더북(TheBook)

명백한 DRY 원칙 위반이다. 불필요한 반복은 부실한 코드를 양산한다.

또한, Kangaroo 프로토타입(Marsupial 인스턴스)과 Kangaroo 인스턴스 자신까지 name, isNocturnal 프로퍼티를 들고 다니는 꼴이 된다. 인자 없이 Marsupial을 호출했으니 Kangaroo.prototype 프로퍼티 값은 undefined다. 정말 그런지 Kangaroo 인스턴스를 들여다보자(그림 3-3).

►그림 3-3

 

위쪽 사각형 영역이 Kangaroo 인스턴스의 프로퍼티고, 아래쪽은 Marsupial 인스턴스, 즉 Kangaroo의 프로토타입에 소속된 프로퍼티다.

▼ 표 3-5 고전적 상속 흉내 내기의 SOLID/DRY 요약표

원칙

결과

단일 책임

고전적 상속 흉내 내기는 단일 책임 원칙을 지원하지만 강제하지는 못한다. 의존성을 주입하면 여러 책임을 객체들에 전가하지 않게끔 할 수 있다. new 키워드를 사용하면 생성자 함수를 애스팩트로 장식할 수 없다.

개방/폐쇄

예제 3-8에서 봤던 것처럼 이 패턴의 주제가 바로 개방/폐쇄 원칙이다.

리스코프 치환

이 패턴은 의존성을 수정하는 게 아니라 확장하려는 것이다. 따라서 리스코프 치환 원칙에 충실하다.

인터페이스 분리

해당 없음

의존성 역전

상속하는 객체의 생성자 함수에 의존성을 주입하는 형태로 실현할 수 있다.

DRY(반복하지 마라)

그다지 관련이 없다. 초기화 로직이 상속을 주고받는 객체 모두의 생성 함수에 걸쳐 반복된다. 하지만 프로토타입을 공유하면 함수 사본 개수를 줄일 수 있다.

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