더북(TheBook)

그림 3-2처럼 생성자 프로토타입을 매개로 모든 객체 인스턴스가 isAwake 함수 사본 하나를 공유한 Marsupial 코드가 객체 인스턴스 각각 isAwake 함수 사본을 생성하여 들고 있는 코드보다 90% 이상 실행이 빠르다는 사실을 알 수 있다.

▼ 표 3-4 new 생성 객체의 SOLID/DRY 요약표

원칙

결과

단일 책임

물론 가능하다. 하지만 생성한 객체가 반드시 한 가지, 한 가지 일에만 전념토록 해야 한다. 생성자 함수에 의존성을 주입할 수 있다는 점에서 도움이 될 것이다.

개방/폐쇄

그렇다. 다음 절에서 상속을 다룰 때 new로 생성한 객체를 어떻게 확장할 수 있는지 알게 될 것이다.

리스코프 치환

상속을 잘 이용하면 가능하다.

인터페이스 분리

상속과 다른 코드 공유 패턴을 이용하면 가능하다.

의존성 역전

의존성은 어렵지 않게 생성자 함수에 주입할 수 있다.

DRY(반복하지 마라)

new 객체 생성 패턴을 쓰면 아주 DRY한 코드가 된다. 다만, AOP를 이 패턴과 함께 잘 써먹을 방법이 떠오르지 않아 안타깝다. new 사용을 강제하는 코드를 AOP를 이용하여 캡슐화하면 좋을 것 같아 더더욱 큰 아쉬움으로 남는다. new는 생성할 객체의 프로토타입을 상속한 객체를 생성하므로 AOP와 new는 친구가 되기 어렵다. 이 객체를 애스팩트로 래핑하면 해당 객체의 프로토타입이 아닌 애스팩트의 프로토타입을 사용하게 될 것이다. 그러나 new로 만든 객체의 프로토타입에 있는 함수를 AOP로 장식하는 건 얼마든지 할 수 있다.

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