본문 바로가기

Information Technology/terminology

Facade패턴

정의

퍼사드 패턴(프랑스어: façade[fəˈsɑːd] 영어: pattern)은 소프트웨어공학 디자인패턴중 하나이다. 객체지향프로그래밍 분야에서 자주 쓰인다.

퍼사드는 클래스 라이브러리 같은 어떤 소프트웨어의 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체이다.

  • 퍼사드는 소프트웨어 라이브러리를 쉽게 사용할 수 있게 해준다. 또한 퍼사드는 소프트웨어 라이브러리를 쉽게 이해할 수 있게 해 준다. 퍼사드는 공통적인 작업에 대해 간편한 메소드들을 제공해준다.
  • 퍼사드는 라이브러리를 사용하는 코드들을 좀더 읽기 쉽게 해준다.
  • 퍼사드는 라이브러리 바깥쪽의 코드가 라이브러리의 안쪽 코드에 의존하는 일을 감소시켜준다. 대부분의 바깥쪽의 코드가 퍼사드를 이용하기 때문에 시스템을 개발하는 데 있어 유연성이 향상된다.
  • 퍼사드는 좋게 작성되지 않은 API의 집합을 하나의 좋게 작성된 API로 감싸준다.

래퍼(wrapper)가 특정 인터페이스를 준수해야 하며, 폴리모픽 기능을 지원해야 할 경우에는 어댑터패턴(참조1, 참조2)을 쓴다. 단지, 쉽고 단순한 인터페이스를 이용하고 싶을 경우에는 퍼사드를 쓴다.

구조

퍼사드
퍼사드 클래스는 패키지 1,2,3 및 그림에 나오지 않은 그 밖의 응용 프로그램 코드와 상호 동작한다.
클라이언트
패키지 내의 리소스들을 접근하기 위해 퍼사드 클래스를 쓰는 객체들이다.
패키지
소프트웨어 라이브러리 / API 집합이다. 퍼사드 클래스를 통해 접근된다.

출처 : http://ko.wikipedia.org/wiki/Facade_%ED%8C%A8%ED%84%B4

 
-------------------------------------------------------------------------------------------------------
* API란

API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록 운영 체제프로그래밍 언어가 제공하는 기능을 제어할 수 있도록 만든 인터페이스를 뜻한다. 주로 파일 제어, 윈도우 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.

 
* 인터페이스란

인터페이스(interface)는 사물 간 또는 사물과 인간 간의 의사소통이 가능하도록 일시적 혹은 영속적인 접근을 목적으로 만들어진 물리적, 가상적 매개체를 의미한다.

 

* 어댑터 패턴

어댑터 패턴(Adapter pattern)은 클래스인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다.

-------------------------------------------------------------------------------------------------------
 

핵심 특징

[의도]
기존에 존재하고 있던 시스템을 이용하는 방법을 단순화하고 싶다. 여러분 자신의 인터페이스를 정의해야 한다.

[문제점]
복잡한 시스템의 오직 부분만을 이용해야 한다. 또는 특별한 방법으로 그 시스템과 상호작용해야 한다.

[해결책]
Facade 패턴은 기존에 존해하고 있던 시스템을 이용하려고 하는 클라이언트를 위한 새로운 인터페이스를 제시한다.

[참여자와 협력자]
Facade 패턴은 클라이언트가 좀더 사용하기 쉽도록 특별한 인터페이스를 제시한다.

[결과]
Facade 패턴은 필요한 서브시스템의 이용을 단순화한다. 그러나 Facade 패턴이 모든 기능을 다 처리하지 않기 때문에, 어떤 기능은 클라이언트가 사용 가능하지 않을 수도 있다.

[구현]
필요한 인터페이스를 갖는 새로운 클래스(또를 클래스들)를 정의한다.
이 새로운 클래스가 기존에 존재하던 시스템을 이용하게 한다.


요약

Facade 패턴은 본래의 시스템 정면에 새로운 '창구(바로 Facade)'를 집어넣기 때문에 이렇게 이름지어졌다.

Facade 패턴은 다음과 같은 경우에 적용된다.

- 복잡한 시스템의 모든 기능을 사용할 필요가 없고 이 시스템에 접근하기 위한 모든 규칙들을 포함하는 새로운 클래스를 생성하고 싶은 경우. 만약 이 클래스가 본래의 시스템의 한 부분이라면, 일반적으로 그렇겠지만, 여러분이 새로운 클래스에 생성하는 API는 본래의 시스템에 있는 것보다 훨씬 간단하게 된다.

- 본래의 시스템을 캡슐화하거나 숨기기를 원하는 경우

- 본래의 시스템이 가진 기능을 사용하기를 원하고게다가 여러 개의 새로운 기능들을 추가하고 싶은 경우

- 새로운 클래스를 작성하는 데 드는 비용이 모든 사람이 본래의 시스템을 사용하는 방법을 배우는 데 드는 비용보다 저렴하고, 또한 향후에 해야 할 유지보수에 드는 비용보다 저렴할 경우

 

출처 : http://lordsday.egloos.com/453889

'Information Technology > terminology' 카테고리의 다른 글

CLOB  (0) 2010.08.16
COTS(Commercial off-the-shelf)  (0) 2010.08.16
맨먼스(mm) 산정하는 방법  (0) 2010.08.16
Tailoring  (0) 2010.08.16
inspection : 검사  (0) 2010.08.06