Java의 날짜와 시간 API

핵심 기능과 부가 기능을 분리하기

템플릿 메서드 패턴

전략 패턴

템플릿 메서드 패턴과 전략 패턴 그리고 템플릿 콜백 패턴 모두 핵심 기능과 부가 기능을 분리하는데 성공했지만, 이들을 연결하기 위해 추가적인 작업이 필요했다. 즉, 클래스를 수정했어야한다. (상속한 클래스나 구현하는 클래스). 원본 코드를 손대지 않고 로그 추적기를 적용할 필요가 있다.

프록시

데코레이터 패턴 - 인터페이스 기반 프록시

프록시 패턴은 대른 개체에 대한 접근 제어를 위해 대리자 제공

데코레이터 패턴은 객체에 **추가 책임(기능)**을 동적으로 추가하고, 기능 확장을 위한 대안 제공

프록시를 사용하면 기존 코드를 전혀 사용하지 않고 기능 추가할 수 있다

그럼 인터페이스가 없는 구체 클래스에는 어떻게 적용할까?

인터페이스가 없는 구체 클래스에 프록시 적용법 - 클래스 기반 프록시

객체에 인터페이스를 적용하면 역할과 기능을 구별할 수 있게 추상화할 수 있다. 그래서 구현체를 바꾸기가 쉬워진다. 하지만, 구현체를 바꿀 일이 별로 없는 경우는 굳이 인터페이스를 복잡하게 적용할 필요가 없다.