클래스, 객체, 인스턴스에 관한 고찰

Prototype를 분석하다 보니.. 이런 문제가 발생했다.

지금까지 알고 있는 사실로는..

객체는 붕어
클래스는 붕어빵틀
인스턴스는 붕어빵

으로 정의를 하였는데,
Prototype에서 사용되는 것들에 적용해보려고 하니.. 많이 헷갈렸다.

추측 끝에,

객체는 new를 사용하지 않고 쓰는 것
클래스는 new를 사용하고 쓰는 것
인스턴스는 객체나 클래스를 가리키는 것

라고 정의를 내렸는데 아직까지는 모순이 있는거 같진 않다.
너무 당연한 정의인데.. 괜히 머리를 쥐어 뜯었나 ㅠ_ㅠ

=====
결론은 JS에서는 그냥 다 객체이기도 하나보다;

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 장현준

2007/07/20 11:26 2007/07/20 11:26
, , , ,
Response
No Trackback , No Comment
RSS :
http://b4you.net/blog/rss/response/122

JavaScript에서 함수에 관한 고찰

Prototype 소스를 보던 중 신기한게 있어서 적는다.
노파심에 적지만, 이미 고수분들은 아는 사실일 가능성이 크므로 지루해 하지 않는 조건하에만 읽기 바란다.

우리가 일반적으로 함수를 선언할 때 다음과 같이 선언한다.

function Add(a, b) {
	return a + b;
}

그러면 당연하게도(?) Add형은 function이 된다.

그렇다면.. 이렇게 한다면?

function Add(a, b) {
	return a + b;
}

Add.myvalue = 10;

놀랍게도(?) Add라는 함수가 정상적인 작동을 하면서, myvalue까지 저장하고 있는 것을 볼 수 있다.
즉, function이 object와 같이 동작을 하는 것이다!
그렇다면 Function은 무엇인가?
Function은 보시다시피 앞이 대문자이다. 즉 객체라는것.

그렇다면 Function은 어떻게 사용할까?

var add;
add = Function('a', 'b', 'return a + b');

와 같이 사용할 수 있다. 이렇게 함으로 써, eval()을 사용하지 않고도 동적인 함수를 만들 수 있는데,

var add;
var operator;

operator = '+';

add = Function('a', 'b', 'return a' + operator + 'b');

같은 동적 함수생성이 가능하다.

이런건 eval()을 써도 같은 기능을 하는 것을 만들 수 있지만,
객체라는 차원에서 지원되는게 아닐까 한다.

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 장현준

2007/07/18 19:42 2007/07/18 19:42
,
Response
No Trackback , No Comment
RSS :
http://b4you.net/blog/rss/response/121

AJAX Prototype Study Group 첫 모임

몇일전에 모이기로 했었던 ALC 스터디 그룹이 처음으로 모였다.

마침 전날에 핸드폰이 사망하여 주시느라 (전파가 안뜬다) 그날 A/S 센터에 갔다 오느라 2시반까지 가야되는 모임에 늦었다.

이것저것 설명을 듣고 prototype 라는것의 소스를 보았는데..
음 뭐랄까? php를 보는듯한 구조..

자바스크립트가 예전부터 틀이 없었다는건 알았지만 php와 비슷하다는 점에서 (js가 심할지도 바로 함수를 대입해서 생성해버리니.. -ㅁ-) 그동안 두리뭉실 하던게 좀 잡히는것같았다.

예전에도 JS는 객체지향 언어라고 생각하는지라 그쪽에서는 별로 감흥(?)을 못느꼈다.
(일반적으로 우리는 JS를 절차지향 언어로 사용하고 있다. 하지만 JS는 객체같이도 사용할 수 있다.)
JS안에서 충분히 객체를 만들어서 사용하였고, Prototype에서는 그 객체들을 사용하도록 만들었는데..
JS에서 원래 상속관계가 없다. 그래서 prototype에서는 extend()라는 메소드를 제공하는데..
소스를 보면 매우 간단하고, 한눈에 의미가 파악이 되지만, 저런식으로 사용해서 상속관계를 준다는 점이 신기하였다.

전체적으로 느낀점은.. 소스는 어렵지 않은데.. "저런식으로 프레임워크를 제공할 수 있구나"라는것? 좀 더 공부한 뒤에 다른 언어에서 이렇게 다른 방법으로 접근 할 수 있는 방법을 연구해보는것도 재미있을 것 같다.

앞으로 매 주 모여서 공부를 할 예정인데, 이번 공부가 끝나면 그동안 귀찮아서 못했던 AJAX에 대해 고수가 될 것 같은 느낌이다.ㅋㅋ

P.S. 첫 모임이래서 사진이라도 있어야 될 것 같은 느낌이지만.. 처음이라 그런거 없다;;ㅋㅋ

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 장현준

2007/07/15 13:32 2007/07/15 13:32
, , ,
Response
No Trackback , No Comment
RSS :
http://b4you.net/blog/rss/response/120

JavaScript 정규식

입력 유효성 검사 및 파일 구문 분석과 관련하여 정규식을 사용하여 수행할 수 있는 작업은 다양합니다. 가장 일반적인 식 중 일부는 사용할 수 있는 기능 및 옵션으로 인해 기억하기 어려운 경우가 많습니다. 다음은 일반적으로 사용되는 정규식 목록입니다.

사회 보장 번호\d{3}-\d{2}-\d{4}
미국 전화 번호((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}
미국 우편 번호\d{5}(-\d{4})?
인터넷 전자 메일 주소[\w-]+@([\w-]+\.)+[\w-]+
인터넷 URLhttp://([\w-]\.)+[\w-](/[\w- ./?%=]*)?
단순 암호(숫자)^(?=.*\d).{4,8}$
고급 암호(대문자, 소문자, 숫자)^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{4,8}$
공용 파일 마스크^(.+)\\(.+)\.(.+)
주요 신용 카드\d{4}-?\d{4}-?\d{4}-?\d{4}

정규식의 개념

  • 정규식은 복잡한 패턴매칭과 대치 규칙을 정의하는 문자열이다.
  • 정규식은 파일이나 문자열 내에 포함되어 있는 특별한 패턴(또는 특별한 조건을 만족하는 문자열)을 검색하기 위해 미리 정의된 다양한 특수 문자들의 조합이다.
  • 정규식은 니모닉(mnemonic)값으로 간략하게 표현되는 기호로 만들어진다. 예를 들면, 단일 문자열 .은 "임의의 단일 문자열과 매치된다."는 의미이고, 문자 +는 "하나또는 그이상의 앞선식"이라는 의미이다.

    정규식을 정확히 정의하려면, automata, regular language, finite state machine 등을 설명해야 합니다. 그냥 일반적으로는 패턴매칭을 위한 언어라고 넘어갈 수 있지만, 정규식으로 matching할 수 없는 패턴도 많고, 왜 정규식에 이런 연산자가 없을까 고민하기 시작하면, 모든 것이 모호해져버립니다.

    ^ (caret) 라인의 처음이나 문자열의 처음을 표시 ^aaa (문자열의 처음에 aaa를 포함하면 참, 그렇지 않으면 거짓)
    $ (dollar) 라인의 끝이나 문자열의 끝을 표시 aaa$ (문자열의 끝에 aaa를 포함하면 참, 그렇지 않으면 거짓)
    . (period) 임의의 한 문자를 표시 ^a.c (문자열의 처음에 abc, adc, aZc 등은 참, aa 는 거짓)
    a..b$ (문자열의 끝에 aaab, abbb, azzb 등을 포함하면 참)
    [] (bracket) 문자의 집합이나 범위를 나타냄, 두 문자 사이의 "-"는 범위를 나타냄 [] 내에서 "^"이 선행되면 not을 나타냄
    {} (brace) {} 내의 숫자는 직전의 선행문자가 나타나는 횟수 또는 범위를 나타냄 a{3} ('a'의 3번 반복인 aaa만 해당됨)
    * (asterisk) "*" 직전의 선행문자가 0번 또는 여러번 나타나는 문자열 ab*c ('b'를 0번 또는 여러번 포함하므로 ac, ackdddd, abc, abbc, abbbbbbbc 등)
    + "+" 직전의 선행문자가 1번 이상 나타나는 문자열 ab+c ('b'를 1번 또는 여러번 포함하므로 abc, abckdddd, abbc, abbbbbbbc 등, ac는 안됨)
    ? "?" 직전의 선행문자가 0번 또는 1번 나타나는 문자열 ab?c ('b'를 0번 또는 1번 포함하므로 abc, abcd 만 해당됨)
    () (parenthesis) ()는 정규식내에서 패턴을 그룹화 할 때 사용
    | (bar) or를 나타냄 a|b|c (a, b, c 중 하나, 즉 [a-c] 와 동일함)
    \ (backslash) 위에서 사용된 특수 문자들을 정규식내에서 문자로 취급하고 싶을 때 '\'를 선행시켜서 사용하면됨 filename\.ext ("filename.ext"를 나타냄)

    정규식에서는 위에서 언급한 특수 문자를 제외한 나머지 문자들은 일반 문자로 취급함

    위의 정규식 연산자 가운데 vi에서는 지원하지 않는 연산자가 있습니다. vi의 경우 +연산자도 없습니다. regular expression library에 따라 지원하는 연산자의 종류가 상당히 다릅니다. 요즘은 perl-style regular expression이 표준으로 자리잡아가는 것이 대체적인 추세이고, perl의 regular expression은 가장 복합하고 기능이 많은 편입니다.


    [abc](a, b, c 중 어떤 문자, "[a-c]."과 동일)
    [Yy](Y 또는 y)
    [A-Za-z0-9](모든 알파벳과 숫자)
    [-A-Z].("-"(hyphen)과 모든 대문자)
    [^a-z](소문자 이외의 문자)
    [^0-9](숫자 이외의 문자)
    [[:digit:]]([0-9]와 동일)
    a{3,}('a'가 3번 이상 반복인 aaa, aaaa, aaaa, ... 등을 나타냄)
    a{3,5}(aaa, aaaa, aaaaa 만 해당됨)
    ab{2,3}(abb와 abbb 만 해당됨)
    [0-9]{2} (두 자리 숫자)
    doc[7-9]{2}(doc77, doc87, doc97 등이 해당)
    [^Zz]{5}(Z와 z를 포함하지 않는 5개의 문자열, abcde, ttttt 등이 해당)
    .{3,4}er('er'앞에 세 개 또는 네 개의 문자를 포함하는 문자열이므로 Peter, mother 등이 해당)
    * (선행문자가 없는 경우이므로 임의의 문자열 및 공백 문자열도 해당됨)
    .* (선행문자가 "."이므로 하나 이상의 문자를 포함하는 문자열, 공백 문자열은 안됨)
    ab*('b'를 0번 또는 여러번 포함하므로 a, accc, abb, abbbbbbb 등)
    a*('a'를 0번 또는 여러번 포함하므로 k, kdd, sdfrrt, a, aaaa, abb, 공백문자열 등)
    doc[7-9]* (doc7, doc777, doc778989, doc 등이 해당)
    [A-Z].*(대문자로만 이루어진 문자열)
    like.*(직전의 선행문자가 '.'이므로 like에 0 또는 하나 이상의 문자가 추가된 문자열이 됨, like, likely, liker, likelihood 등)
    ab+('b'를 1번 또는 여러번 포함하므로 ab, abccc, abb, abbbbbbb 등)
    like.+(직전의 선행문자가 '.'이므로 like에 하나 이상의 문자가 추가된 문자열이 됨, likely, liker, likelihood 등, 그러나 like는 해당안됨)
    [A-Z]+(대문자로만 이루어진 문자열)
    yes|Yes(yes나 Yes 중 하나, [yY]es와 동일함)
    korea|japan|chinese(korea, japan, chinese 중 하나)
    [\?\[\\\]]('?', '[', '\', ']' 중 하나)

    한글이름 정규식 : [\uac00-\ud7a3]{2,4}

  • 크리에이티브 커먼즈 라이센스
    Creative Commons License

    Posted by 장현준

    2007/02/05 16:10 2007/02/05 16:10
    ,
    Response
    No Trackback , 4 Comments
    RSS :
    http://b4you.net/blog/rss/response/68


    블로그 이미지

    빗소리를 먹는 사람.

    - 장현준

    Notices

    Archives

    Authors

    1. 장현준

    Recent Trackbacks

    Calendar

    «   2017/09   »
              1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30

    Site Stats

    Total hits:
    1714555
    Today:
    3710
    Yesterday:
    3980