일종의 OOP(
object-oriented programming)
보편적인 OOP와의 차이점
- 클래스가 없다.
- 상속(
inheritance)을 통해 behaviour reuse
상속에 대한 구현 방식이 일반적인 OOP와 다르다.
- 기존의 객체를 프로토타입(
prototypes)으로 삼아 인스턴스 복제(
cloning)를 통해서 상속 실현
자바의 상속과 비교해보면
super:sub = prototype:clone
이러한 특징으로 인해 다양한 이름으로 불린다:
class-less,
prototype-oriented, or
instance-based programming
JavaScript 가 대표적인 사례
프로토타입 기반 프로그래밍의 옹호자의 주장에 따르면
클래스 기반 언어는 개발의 초점을 클래스 분류와 관계 포착에 의미를 두지만
프로토타입 기반 프로그래밍은 행위에 초점을 맞추다가..
(행위에 따른) 전형적인 모습에 기초하여 추후에 클래스를 분류한다.
유사 개념:
오리 인터페이스(Duck Interface)
개인적으로는이러한 분류(Classification)가 정적인 정의에서 출발하는 것보다
훨씬
실효성이 있다고 본다. 추정의 근거는 이러한 방식이
실증적이고
연속적으로
진화할 수 있는 접근이기 때문이다.
실행시점에서 동적으로 타입을 정의하는 루비류의 언어와
상당한 유사점을 갖고 있다.
Unlike the relationship between class and instance in class-based object-oriented languages, the relationship between the prototype and its offshoots does not require that the child object have a memory or structural similarity to the prototype beyond this link.
그리고 위의 내용을 보면 Duck Typing과도 닮아 있고(
오리 인터페이스(Duck Interface) 참조)
상태가 클라이언트에게 완전히 Transparent 하다는 것은...
추상화 수준이 다르지만 SOA의 방향과도 매우 흡사한 느낌이다.
As such, the child object can continue to be modified and amended over time without re-arranging the structure of its associated class as in class-based systems. It is also important to note that not only data but also methods can be added or changed. For this reason most prototype-based languages refer to both data and methods as "slots".
위 내용까지 읽어보면 매료된다. (주의하자.)
상속이 실현되는(메소드를 호출하면 프로토타입의 메소드가 불려지는)
메커니즘은
Delegation이라고 부른다. 언어의 런타임이 Dispatching 해주는...
mitosis이라는 생물학적 개념을 차용한 것도 눈에 띈다.
유사분열이라.. 핵분열을 통한 복제.. 복제를 통해 새로운 개체가 탄생하는??
흥미롭다.
장단을 논한 부분을 대략적으로 훑어보면
상속을 하거나/주는 양자의 관계가 강력하지 않다는 것.
상태의 구조는 공유되지 않고, 링크도 약하다.
유연성이라고 요약해버리자. ㅡㅡ;
단점으로는
correctness,
safety,
predictability, and
efficiency. 이런 단어들이 나열된다.
정적 타이핑과 비교해서 이들이 약해진다는..
보수적 혹은
안정적 관점이다.
참고:
Prototype-based programming