객체지향 자바스크립트
분류없음 | 2000/01/01 12:00

Class Template 과 instance 생성

Javascript는 Java처럼 OOP를 언어자체에서 명시적으로 지원하고 있지 않지만, OOP를 추구할 수 있는 여러가지 방법들이 있다. OOP에서 가장 기초적이고 중요한 class는 아래와 같 은 방식으로 구현할 수 있다.


Member variable, Method
Class template에 member를 등록하기 위해서는 아래와 같은 방법을 이용한다.

Privileged

Class Template 안에 var로 선언된 맴버들은 객체 외부에서 접근할 수 없다(private).

객체의 외부에서 접근 가능하면서, 스스로 객체 내부의 맴버에 접근이 가능한 맴버를 Privileaged Member라고 하는데 이를 위해서는 var 대신 this를 사용한다.

정리하면, private을 구현하기 위해서는 var를 사용하고 public을 구현하기 위해서는 this를 사용한다는 점을 기억하자.

static

static은 객체의 맴버가 아니라, 클래스의 맴버로 등록된 변수와 메소드이다. 그렇기 때문에 객체가 아닌 클래스에서 직접 접근하며, 모든 객체가 동일한 값을 공유한다.

상속
객체의 상속을 위해서는 아래와 같이 prototype을 사용한다.

Class-Based Language vs Prototype-Based Languages

Class-Based의 대표적 언어는 Java이고, Prototype-Based은 자바스크립트이다. 이 두언어의 차이를 객체를 다루는 방식으로 설명할 수 도 있을 것이다. 이 두언어의 차이는 아래와 같다.
Class-Based Prototype-Based
class를 정의하기 위한 탬플릿이 존재함. 이 탬플릿은 추상적인 것으로써 어떠한 정보도 담고 있지 않고, 데이터 형만을 결정 함. class를 정의하기 위한 탬플릿 없음. Generic Object를 직접 사용하거나(new Object()) constructor function를 통해 탬플릿을 정의 함.
new를 통해 instance를 생성함 동일
class chain을 통해 상속됨. prototype chain을 통해 상속됨.
instance에 동적으로 property, method를 추가할 수 없음.(정적언어, c, c#), IDE 강력, 퍼포먼스 유리, 강력한 타입체크로 인한 오류 방지 동적으로 property, method를 추가/삭제 할 수 있음.(동적언어, 루비, 파이썬, 자바스크립트), 가독성, 간결한 코드, 유연성

Polymorphism

Polymorphism(다형성)은 OOP에서 중요한 의미를 가지고 있다. 상속은 부모 객체가 할 수 있는 일을, 자식도 할 수 있도록 하는 것을 의미한다. 그러나 부모가 하는 일을 자식도 할 수 있지만, 그 일을 처리하는 방식이 달라 질 수도 있다. 이를 인간세계에서는 개성이라고 하고 , OOP에서는 Polymorphism이라고 한다. 도둑잡기 게임을 제작한다고 가정해보자. 필요한 등장인물은 경찰, 도둑, 무고한 시민이 있을 것이다. 그런데 이들은 모두 인간이라는 공통점을 가지고 있지만, 동시에 다른 행동양식을 가지고 있다. 이를 자바스크립트의 방식으로 표현하는 아래와 같다

prototype은 무엇인가?

prototype은 class와 대비되는 개념이다. class가 클래스의 스팩을 매우 엄격하게 정의하는 설계도인 반면, prototype은 설계가 언제든 변경될 수 있도록 유연하게 정의된 데모라고 이해할 수 있다. 이러한 차이는 정적 언어와 동적언어의 차이에서 연유하는데, Java, C#과 같은 정적언어가 클래스에서 한번 정의되면, 런타임에서 이를 변경할 수 없는 엄격한 언어임에 반해, Javascript와 같은 동적언어는 언제든 이를 변경할 수 있는 유연한 언어이다. 이 각각의 언어간에는 장단점이 존재하며, 이는 아래의 class-based VS prototype-based에서 비교하겠다.

protype을 이야기함에 있어 prototype-chain을 빼놓을 수 없는데. 아래의 예제를 보자.

TEST는 function이다. 그런데 TEST에는 prototype이라는 속성이 이미 정의되어 있다. function을 정의하면 prototype이라는 generic object가 미리 준비되는 것이다. 이 generic object는 new 연산자를 이용해 constructor function을 호출할 때 반환된다.

즉 prototype property에는 객체의 대략적인 모습을 담고 있는 generic Object가 담겨져있는 것이다. 다음은 protype의 상속관계를 나타내는 예제이다.


2000/01/01 12:00 2000/01/01 12:00

트랙백0 | 댓글0
이 글의 관련글(트랙백) 주소 :: http://egoing.net/trackback/468

아이디 :
비밀번호 :
홈페이지 :
  비밀글로 등록
내용 :
 


[PREV] [1] ... [202][203][204][205][206] [NEXT]
전체 (206)
독백(이기적인 언어) (18)
대화 (5)
생각 (97)
사진 (16)
막전막후 (4)
박근혜가 조급한 이유 (1)
기상청 (6)
IT (6)
흉부외과 (10)
노무현과 이명박의 차이 (4)
유재석이 잘생겨진 이유. (6)
텍스트큐브.org가 해야 할 것 (12)
블로그는 어렵다? (14)
가장 위대한 반전
좋은 사람, 나쁜 사람. (6)
병원 (10)
보수는 무능해지지 않았다. (2)
서강대녀, 오세훈 주민소환,... (10)
MB식 이상한 커뮤니케이션 솔... (7)
정의? (4)
권력과 기상청 (4)
촛불이라는 프리즘 (2)
발명품 (2)
시간이라는 장사 (2)
성급함에 대한 고백 (2)
애플의 디자인 (12)
정권의 처지 - 임계점과 습관... (6)
광고라는 리트머스 (2)
정권의 새로운 호적수와 EBS... (4)
인디아나존스.말고 고고학자... (6)
스피드레이서.말고 다른 영화... (10)
그래 아직 업어드리지도 못했지 (10)
아이언맨 (14)
난독증인가? 난번역인가? (6)
미의식 (4)
흥행의 조건 (2)
웹서비스에서의 진보와 개혁 (3)
메이저와 마이너의 관계 (7)
아이러니 공화국 (6)
갈등의 수준 (2)
독도는 한국 땅, 티벳은 중국 땅
StandAlone complex (8)
사람은 죽어서 책을 남긴다.... (7)
오래된 시간(낡은 것들) (14)
레드홀릭 (10)
allblog in hanrss (22)
건빵주머니 속 자동차 (6)
정신나간 사람들 (4)
프래임 웍 (8)
글쓰기 (5)
비즈니스 모델 (6)
살처분 (6)
기억량보존의법칙 (2)
선거
동물원 (16)
you2day.net (2)
조카 진혁이 (14)
카운터 사기 (4)
우분투 (10)
지역화 (6)
web2.0 (8)
한나라당
이동통신사 (14)
BPF후 (14)
일정 (10)
습관 API (10)
소수자 (16)
빨래엔 피존 (6)
사랑의 증후 (53)
경험의 중요함 (12)
컴벳암즈 (8)
20:80 (13)
컨퍼런스 (3)
이념이 나쁜 이유. (8)
야동과 창의력 (20)
고흐전후 (18)
아이들의 애정표현 (16)
가라 (8)
나에게 네이버란? (2)
레고와 창의력 (36)
나도 전설이다 (6)
Big 3, 2007 (2)
망년회 & 종무식 (14)
냉장고 (8)
내가 장사를 한다면 이런 것... (16)
크리스마스 (23)
망각력 (6)
커튼이 벽지보다 좋은 이유 (8)
대선의 절경 (5)
Good bye my 2007 (26)
혐오량 보존의 법칙 (9)
어느 노빠의 정치적 커밍아웃 (9)
도쿄도지사후보 방송유세 (16)
(10)
신뢰 (8)
애정결핍이 정치에 미치는 영향 (12)
오래된 미래 - 미래에는 어떤... (15)
한국정치의 양비론적 비극 (6)
소음 (29)
아침햇살 VS 신라면 (11)
반고흐전 (18)
동안이라는 말이 무척 유감스... (22)
러시아 이름에 대한 불만 (17)
베오울프가 남의 일 같지 않... (8)
공존 - (농담 반 진담 반) (6)
뇌에 대한 싱거운 음모론 (14)
인간은 나약하지 않다. (10)
죽은 시인의 사회 (23)
식객의 막전막후
일상을 지배하는 힘 (13)
진혁아 삼촌이 간다. (11)
네이버가 나쁜 이유 (22)
영적이라는 것과 종교 (14)
세상을 움직이는 힘 - 알바와 빠 (4)
서울 에어쇼 2007 - 밀리터리... (12)
친구 (4)
사람은 누구나 시대의 자식이다 (2)
민주주의와 경제성장, 부패와... (15)
세계 최초의 블로거 대통령 (8)
권영길씨 블로거 간담회
단순성과 자유도, 그리고 고... (20)
문자의 굴욕 (4)
울엄마의 절대음감 (8)
원더걸스의 막전막후 (12)
조카 전상서 (33)
친절한 ㅎ (4)
블로깅하다 (32)
대화의 기술 (1)
합리적인 소비를 위한 제언 (10)
Death Proof의 막전막후 (8)
포스팅하다 (20)
외유내강 (2)
계절의 관성 (16)
Followership (7)
석방을 축하드립니다 (40)
예비군은 악플러 (10)
이모티콘 얼굴로 고쳐주세요.... (18)
감정의 의외성 (6)
기형도를 추억하다 (18)
블로깅의 어려움. (32)
속독 (4)
워크샵 (9)
그녀를 추억한다 (2)
바벨의 현대적 의미 (4)
사물과의 대화 (13)
대화하세요 (17)
심형래,황우석,노무현 그리고... (18)
노이즈 마켓팅의 막장 (12)
화려한 휴가 프롤로그 (8)
외계인은 친구일까? 적일까? (7)
화려한 휴가 (2)
신해철을 생각하다. (8)
삼성동 현대백화점 화장실의...
슈바이처와 마더 테레사에게... (2)
2차 낚시원정대 2번째 사진 (5)
기분이 좋아지는 음악
고독과 종교
콤플렉스 (3)
심심하다! (2)
그땐 그랬지 - 유치원 (2)
DSLR의 승천 (2)
제3회 태터캠프 열립니다.
예비군 전날 (7)
낚시원정대 2차 (9)
진혁이 목욕신 (3)
잠이 안 올 때 보는 동영상 (2)
행복과 불행 (1)
공각기동대 - 과학과 종교 (12)
오 하느님 - 조정래
공각기동대 - 난민과 반도 (18)
냉방의 양극화 - 바보 에어컨 (2)
트랜스포머 (3)
커뮤니케이션 과잉과 컨텐츠... (4)
직업병 (1)
조카 진혁이와 호수공원에서 (6)
워크샵 (4)
시부야의 스파이더 맨 (6)
미조노꾸찌에 마련된 내방 (3)
이터널 선샤인 - 냉정과 열정... (9)
신앙고민 (10)
감성은 힘들다 (6)
진보논쟁 링크 모음
웹진화론 (2)
책 더럽게 돌려보기 (17)
액션영화의 최고봉 학원 폭력물 (10)
자살 (4)
집착없이... (2)
철학자의 머리로 생각하고 시... (2)
고흐와 홈쇼핑 그리고 마라톤 (7)
고흐에서 피카소까지 (4)
Van Gogh (2)
선영이 시집가는 날.
진혁이가 아프다. (8)
조정래 선생님 아리랑 100쇄... (4)
꼴찌와 일등사이
주상관매도 - 김홍도 (6)
목계장터 - 신경림
종방을 앞둔 노무현 시즌2
동해나 일본해가 정당한가? (2)
고정관념 (1)
조카돌잔치 (1)
VMWARE에서 Linux 설치하기
전세계 경쟁력 지도 (2)
응용 프로그램을 위한 최상의...
원근공식
태터툴즈 배너
rss
 
 
 
위치로그 : 태그 : 방명록 : 관리자
egoing’s Blog is powered by Tattertools.com / Designed by plyfly.net