클래스 기반(일반 언어)과 프로토타입 기반 비교
클래스 기반(일반 언어)
Java
/* 1단계 : 클래스 정의 */
public class Prisoner {
public int setence = 4;
public int probation = 2;
public string name;
public string id;
/* 2단계 : 클래스 생성자 정의*/
public Prisoner(string name, string id) {
this.name = name;
this.id = id;
}
}
/* 3단계 : 객체 생성 */
Prisoner firstPrisoner = new Prisoner("Joe", "12A");
Prisoner secondPrisoner = new Prisoner("Sam", "2BC");
프로토타입 기반(자바스크립트)
JavaScript
/* 1단계 : 프로토타입 객체 정의 */
var proto = {
sentence : 2,
probation : 2
};
/* 2단계 : 객체 생성자 정의 */
var Prisoner = function(name, id) {
this.name = name;
this.id = id;
}
/* 3단계 : 생성자와 프로토타입 객체 연결 */
Prisoner.prototype = proto;
/* 4단계 : 객체 생성 */
var firstPrisoner = new Prisoner("Joe", "12A");
var secondPrisoner = new Prisoner("Joe", "12A");
두가지 방식 모두 먼저 객체 템플릿을 만들었습니다. 클래스 기반 프로그래밍에서는 이런 템플릿을 클래스라 부르고 프로토타입 기반 프로그래밍에서는 이를 프로토타입 객체라고 부르지만 두 템플릿의 목적은 모두 같습니다.
바로 객체를 생성할 수 있는 프레임워크 역할을 하는 것입니다.
두번재로 생성자를 만들었고 클래스 기반 언어에서는 객체를 생성할 때 생성자가 어떤 클래스에 속하는지 명확히 알 수 있도록 생성자를 클래스 내부에 정의합니다. 자바스크립트에서는 객체 생성자를 프로토타입 외부에서 설정하고 있기 때문에 둘을 서로 연결해 주는 단계(3단계)가 필요합니다. 마지막으로 객체를 생성합니다.
Jaehee's WebClub
'JavaScript > JS 객체지향 프로그래밍' 카테고리의 다른 글
new Object() 의 문제점 (0) | 2016.10.11 |
---|---|
함수의 프로토타입(prototype) 핵심 정리 (0) | 2016.10.05 |
절차 지향 방식에서 객체지향 방식(함수기반 클래스,프로토타입방식 클래스) 으로 리팩토링하기 (0) | 2016.09.29 |
팩토리 함수를 활용한 Object.create (0) | 2016.09.29 |
싱글톤(singleton) 패턴 (0) | 2016.09.29 |