더북(TheBook)

AnimalKingdom.kangaroo가 생성된 후 반환한 baseMarsupial 객체는 AnimalKingdom.marsupial로 생성한 객체의 인스턴스다. 다음으로 AnimalKingdom.kangaroo 함수는 baseMarsupial 인스턴스를 확장해 hop 함수를 추가한다. 이 과정에서 AnimalKingdom.marsupial은 전혀 달라진 게 없다. 개방/폐쇄 원칙이 충실히 반영된 결과다.

모듈을 이용한 함수형 상속은 고전적 상속 흉내 내기와 달리 AnimalKingdom.marsupial의 생성 로직을 AnimalKingdom.kangaroo에서 재탕할 필요가 없다. AnimalKingdom.kangarooAnimalKingdom.marsupial 생성 로직을 직접 사용하기 때문이다.

이보다 더 DRY할 수 있을까?

표 3-6은 함수형 상속이 SOLID/DRY 원칙을 잘 따름을 보여주는 표다.

▼ 표 3-6 함수형 상속 패턴의 SOLID/DRY 요약표

원칙

결과

단일 책임

함수형 상속은 모듈 패턴을 사용하므로 의존성 주입과 애스팩트 장식에 친화적이다. 상속한 모듈에는 반드시 한 가지 책임만 부여해야 한다.

개방/폐쇄

함수형 상속은 모듈 확장에 관한 한 완벽한 메커니즘이다(따라서 모듈을 수정하지 않아도 된다). 예제 3-9가 구체적인 실례다.

리스코프 치환

함수형 상속은 수정 없이 모듈을 확장할 수 있게 해주므로 상속받은 모듈은 자신이 상속한 모듈로 대체될 수 있다.

인터페이스 분리

다시 말하지만, 함수형 상속은 모듈 패턴의 변형이다. 응집된 모듈 API 자체가 분리된 인터페이스다.

의존성 역전

임의 모듈 생성 방식으로 만든 모듈을 상속에 사용했다면 의존성은 쉽게 주입할 수 있다.

DRY(반복하지 마라)

설계만 잘한다면 모듈을 이용한 함수형 상속은 DRY한 코드로 향하는 이상적인 지름길이다.

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