더북(TheBook)

3.6.1 고전적 상속 흉내 내기

자바스크립트에서 고전적 상속(classical inheritance)을 모방할 수 있는 건 순전히 함수 프로토타입 덕분이다. 앞 절의 Marsupial 함수를 확장해 캥거루에 hop 함수라는 특정 프로퍼티를 넣는다고 하자.

프로토타입에 isAwake 함수를 추가하고 new 키워드 사용을 강제한 예제 3-7의 Marsupial 함수를 다시 보자.


function Marsupial(name, nocturnal) {
if (!(this instanceof Marsupial)) {
  throw new Error("이 객체는 new를 사용하여 생성해야 합니다");
}
this.name = name;
this.isNocturnal = nocturnal;
}
Marsupial.prototype.isAwake = function(isNight) {
return isNight === this.isNocturnal;
}

Marsupial 함수 프로토타입에 hop 함수를 추가(또는 Marsupial 함수로 생성한 객체 인스턴스에 직접 추가)할 수 있지만, 과연 그렇게 하는 것이 최선일까? 그럼 Marsupial 생성자 함수로 만든 객체 인스턴스는 모두 hop 함수를 달고 다니게 될 텐데……?

캥거루만 껑충 뛰게(hop) 하고 싶지만, Marsupial을 바꾸면 전부 다 껑충 뛰게 될 것이다. 이는 개방/폐쇄 원칙에도 맞지 않는다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.