10. 퍼사드 패턴(Facade Pattern)
10.1 개요
프로그래밍하다 보면 여러 종류의 라이브러리를 사용해야 하는 경우가 발생합니다. 그리고 실제 각 라이브러리에 있는 모든 기능을 사용할 필요가 없는 경우가 많지요. 이럴 때 상위 수준의 라이브러리를 만들어서 사용하기 쉽게 제공할 수 있습니다. 이처럼 상위 수준에서 인터페이스를 정의하여 하위 수준의 서브 시스템의 기능을 사용할 수 있게 하고자 할 때 퍼사드 패턴을 사용하면 효과적입니다.
퍼사드 패턴에서는 하위 수준의 여러 서브 시스템에서 제공되는 기능들을 상위 수준에서 단순화시켜 사용하기 쉽게 해 줍니다. 또한, 이를 통해 여러 서브 시스템과의 복잡한 관계를 느슨하게 만들어 주어 하위 시스템과 독립성을 갖게 해 줍니다.
10. 2 시나리오
오전 강의를 하고 있을 무렵 EH Camera의 이 매핑 씨에게 문자 메시지가 왔습니다.
"언휴 님, 이번에 사진을 관리하는 통합 모듈을 만들려고 하는데 참여하셨으면 합니다. 연락 주세요."
저는 강의가 마치는 데로 방문하겠다고 답문을 남기고 계속 강의를 진행하였습니다. 그리고 강의를 마치고 EH Camera를 방문했어요. 그리고 이 매핑 씨는 EH Camera 회사에서 기존에 제공했던 사진들을 관리하는 응용과 사진을 바로잡는 응용에서 제공했던 기능을 통합한 형태의 모듈과 응용을 개발한다고 하더군요.
"예, 매핑 씨. 제가 통합 모듈을 예광탄 형태로 만들어 볼 테니 저에게 사진을 관리하는 모듈의 인터페이스와 보정 모듈의 인터페이스를 알려주세요."
간단하게 이번에 진행할 프로젝트의 의도와 규모 등에 관해 얘기하고 필요한 자료들을 받고 헤어졌습니다. 집에 도착한 저는 두 개의 모듈에서 제공하는 인터페이스 중에서 독립적으로 필요한 기능들과 혼합해서 사용해야 할 작업을 분류하였습니다. 그리고 제공해야 할 기능들을 포함한 새로운 모듈을 제작하기 시작하였습니다. 사실 제가 작성한 모듈의 각 기능은 기존 모듈의 기능을 호출하는 것 외에 다른 작업을 한 것은 없었어요.
이처럼 기존 모듈을 사용하는 상위의 모듈을 작성하고 이를 사용하는 간단한 응용을 제작하여 문서로 만들고 보니 자야 할 시간이 되더군요. 다음 날 학교로 가기 전에 이 매핑 씨를 만나 작업한 결과들을 건네주고 학교로 향했습니다. 그리고 강의 도중에 다시 이 매핑 씨에게 문자 메시지가 왔습니다.
"언휴 님, 덕분에 이번 프로젝트는 빨리 끝날 것 같다고 하네요. 그리고 새로운 설계 방법을 알게 되었다면서 개발팀에서 좋아하는군요. "
[그림] 퍼사드 패턴(Facade Pattern) 클래스 다이어그램
2016/04/26 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C#] - [C#] 퍼사드 패턴(Facade Pattern) - 설계(Design)
2016/04/26 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C#] - [C#] 퍼사드 패턴(Facade Pattern) - 구현
'프로그래밍 기술 > Escort GoF의 디자인 패턴 C#' 카테고리의 다른 글
[C#] 플라이급 패턴(Flyweight Pattern) - 구현 (0) | 2016.04.26 |
---|---|
[C#] 플라이급(Flyweight Pattern) - 설계(Design) (0) | 2016.04.26 |
[C#] 플라이급 패턴(Flyweight Pattern) - 개요, 시나리오 (0) | 2016.04.26 |
[C#] 퍼사드 패턴(Facade Pattern) - 구현 (0) | 2016.04.26 |
[C#] 퍼사드 패턴(Facade Pattern) - 설계(Design) (0) | 2016.04.26 |
[C#] 장식자 패턴(Decorator Pattern) - 구현 (0) | 2016.04.26 |
[C#] 장식자 패턴(Decorator Pattern) - 설계(Design) (0) | 2016.04.26 |
[C#] 장식자 패턴(Decorator Pattern) - 개요, 시나리오 (0) | 2016.04.26 |
[C#] 복합체 패턴(Composite Pattern) - 구현 (0) | 2016.04.26 |
[C#] 복합체 패턴(Composite Pattern) - 설계(Design) (0) | 2016.04.26 |