CHAPTER 7 구조 디자인 패턴_PART_1
- 프록시 패턴 : 원본기술가 연관 없는 기능을 추가할 때 사용
- 데커레이터 패턴: 원본 클래스와 관련 있거나 향산된 기능을 추가할 때 사용
- 어댑터 패턴: 코드 호환성 문제 해결
- 브리지 패턴 : 합성의 폭발문제를 해결하는 데 사용
- 퍼사드 패턴 : 인터페이스 설계에 사용
- 복합체 패턴 : 주로 트리 구조로 나타낼 수 있는 데이터에 사용
- 플라이웨이트 패턴 : 재사용 문제 해결
7.1 프록시 패턴
7.1.1 인터페이스 기반의 프록시 패턴
프록시 클래스를 도입하여 원본 클래스와 관련 없는 새로운 기능을 추가하는 것
7.1.2 상속 기반의 프록시 패턴
인터페이스를 정의하지 않고 있어서 클래스를 직접 수정할수 없을때 상속을 통해서 외부 클래스를 확장
7.1.3 리플렉션 기반의 동적 프록시
동적 프록시 : 각 원본 클래스에 대한 프록시 클래스를 미리 작성하는 대신 코드를 실행하는 도중 원본 클래스에 대한 프록시 클래스를 동적으로 생성하고
코드 내의 원본 클래스를 프록시 클래스로 대체하는 것을 말한다
7.1.4 프록시 패턴의 활용 방법
- 주요 비즈니스와 관련 없는 요구 사항의 개발에 활용될 수 있다
- RPC에서 프록시 패턴을 적용할 수 있다
- 캐시에 프록시 패턴을 적용할 수 있다
7.2 데커레이터 패턴
원본 클래스와 관련 있거나 향산된 기능을 추가할 때 사용7.3 어댑터 패턴
조정에 따른 적응에 사용되며, 호환되지 않은 인터페이스를 호환 가능한 인터페이스로 변환하여 두 클래스를 함께 작동할 수 있게 한다
7.3.1 클래스 어댑터와 객체 어댑터
클래스 어댑터는 상속 관계를 사용한 방식
객체 어뎁터는 합성 관계를 사용한 방식
- 인터페이스가 많지 않으면 두 방식중 어느 것을 사용해도 무방하다
- 인터페이스가 많지만 source 와 target 인터페이스의 정의가 대부분 같다면 클래스 어뎁터를 사용하는것이 좋다
- 인터페이스가 많고 source 와 target 인터페이스의 정의가 대부분 다르다면 객체 어뎁터를 사용하는것이 좋다
7.3.2 어댑터 패턴의 응용
어댑터 패턴은 설계 결함을 교정하는 보상 패턴으로 볼 수 있다
- 결함이 있는 인터페이스 설계가 캡슐화된 경우
- 여러 클래스의 인터페이스 설계를 통합할 경우
- 사용 중인 외부 시스템을 교체해야 할 경우
- 이전 버전 인터페이스와 호환성이 필요한 경우
- 다양한 형식의 데이터에 적응해야 할 경우