티스토리 뷰

반응형
Adapter & Facade Pattern - 디자인 패턴

참고서적 : Head First Design Pattern
소스코드 다운로드 : http://www.wickedlysmart.com/headfirstdesignpatterns/code.html
 
패턴 정의 #8 - 어댑터(Adapter) Pattern
한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다.
어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다.  
 
흔히 11자형 플러그와 돼지코 플러그의 상호 어댑터를 연상하면 쉬울 겁니다.
간단히 클래스 다이어그램을 살펴보시기 바랍니다.
 


 
- 클라이언트에서는 타겟 인터페이스만 볼 수 있습니다.
- 어댑터에서 타겟 인터페이스를 구현합니다.
- 어댑터는 어댑티로 구성되어 있습니다.
- 모든 요청은 어댑티에 위임됩니다.
 
개념은 간단하죠.. Target 인터페이스를 구현한 Adapter에서 Adaptee를 호출하는 형식입니다.
클라이언트가 사용하는 Target 인터페이스에 맞추어서 Adaptee 클래스를 Adapter로 변경해 호출하는 겁니다.
 
말이 꼬이는 듯 하지만 자세히 보면 이해가 될 겁니다.
 
다중 상속이 가능하다면 다음 그림과 같이 Target과 Adaptee를 모두 상속받도록 구현할 수도있습니다.
위의 그림은 객체 구성(composition)을 이용한 객체 어댑터이구..
아래 그림은 다중 상속을 이용한 클래스 어댑터라고 합니다.
 


 
패턴 정의 #9 - 퍼사드(Facade) Pattern
어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다.
퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있습니다.
 
퍼사드 패턴은 단순화된 인터페이스를 통해서 서브시스템을 더 쉽게 사용할 수 있도록 하기 위한 용도로 쓰인다는 점입니다.
패턴의 클래스 다이어그램을 보면 더욱 쉽게 이해할 수 있을 것입니다.
 
디자인 원칙
1. 최소 지식 원칙 - 정말 친한 친구하고만 애기하라.
 
예제 클래스다이어그램으로 HomeTheater를 퍼사드 패턴으로 구현한 것입니다.
 
복잡한 HomeTheater 기능을 직접 이용하지 않고 HomeTheaterFacade 클래스를 통해 이용하는 것입니다.
 

 
- 클라이언트에게는 친구가 HomeTheaterFacade 하나 뿐입니다.
객체지향 프로그래밍에서는 친구가 하나만 있는 것이 좋습니다.
- HomeTheaterFacade에서 클라이언트 대신 모든 서브시스템 구성요소를 관리해 줍니다.
덕분에 클라이언트는 단순하면서도 유연해질 수 있습니다.
- HomeTheater 구성요소를 업그레이드 해도 클라이언트에는 아무 영향이 없습니다.
- 서비시스템에서도 최소 지식 원칙을 최대한 지키는 것이 좋습니다.
서로 얽혀 있는 친구들이 너무 많아져서 시스템이 너무 복잡한 것 같으면 퍼사드를 추가하는 것도 생각해 보는 것이 좋습니다.
 
다음 사항은 설계할 때 참고하시기 바랍니다.
 
데코레이터 패턴 - 인터페이스는 바꾸지 않고 책임(기능)만 추가
어댑터 패턴 - 한 인터페이스를 다른 인터페이스로 변환
퍼사드 패턴 - 인터페이스를 간단하게 바꿈
 
이상입니다~~ 좋은 하루되세요!! from 미니
 
반응형
댓글
댓글쓰기 폼