디자인 패턴/GoF

[디자인 패턴] 구조 패턴 (5) 퍼사드 Facade

로파이 2021. 1. 28. 16:36

퍼사드 (Facade) 패턴

 

1. 의도

  • 전체 서브시스템을 포괄하는 인터페이스를 정의.

2. 활용

  • 복잡한 서브시스템에 대한 단순한 인터페이스 제공이 필요할 때
  • 사용자와 서브시스템의 연관성을 줄이기 위해
  • 서브 시스템을 계층화 시키고 퍼사드를 통해 서브 시스템을 접근

3. 참여자

 

구조패턴 - 퍼사드 패턴

  • 퍼사드: 통합된 인터페이스를 제공, 서브시스템의 기능을 모두 알고 있으며 사용자의 요청을 서브시스템 객체에 전달한다.
  • 서브시스템 클래스: 서브시스템의 기능을 구현하고 퍼사드 객체로 할당된 작업을 처리하지만 퍼사드를 접근할 수는 없다.

4. 협력방법

  • 사용자는 퍼사드가 제공하는 인터페이스를 통해 서브 시스템의 기능을 이용한다.

5. 결과

1) 서브시스템 구성요소를 보호한다.

2) 서브시스템과 사용자 코드간의 결합도를 약하게 한다.

3) 퍼사드를 사용하지 않고 서브시스템 클래스를 사용하는 것도 가능하다.

 

6. 구현

1) 사용자와 서브시스템 간의 결합도를 줄인다.

  • 퍼사드를 추상 클래스로 정의하고 퍼사드를 상속하는 서브시스템에 다른 구현을 정의하거나 다른 서브시스템 객체를 조합하여 퍼사드를 구성한다.

2) 서브시스템 클래스 중 공개할 것과 감출 것

  • 서브 시스템의 공개 인터페이스는 사용자가 직접 접근할 수 있는 클래스 비공개 인터페이스는 서브시스템 자체가 된다.

- 퍼사드가 하나만 필요하다면 단일체로 구현한다.

 

예시

퍼사드 패턴을 가상 메모리 시스템과 구성 서브 시스템으로 볼 수 있다.

가상 메모리 시스템

사용자(프로세스)는 Domain이라는 퍼사드를 통해 가상 메모리 시스템을 이용할 수 있으며 가상 메모리 시스템은 주소공간을 관리한다. 주요한 연산으로 특정 주소에 메모리 객체를 할당하거나 삭제하고 보호하는 역할을 수행한다. 또한 페이지 부재 현상을 처리한다.

 

내부 서브 시스템 객체로 주소 변환기와 메모리 객체 그리고 메모리 객체 캐시가 있다. 각 서브 시스템을 상속하여 구체적인 기능을 구현하는 클래스들이 있고 위 예시에서 가상 메모리는 페이징 기법을 사용하고 있다.

 

페이지 부재 핸들링 과정

주소 변환기의 FindMemory(Address)를 통해 찾아야하는 주소에 대한 메모리 객체가 없다면 페이지 부재 현상이 발생하고 RepairFault()를 호출하게 될 것이다. 페이지 부재에 따라 디스크에서 메모리 객체를 가져 캐시를 만드는BuildCache() 연산이 호출 된다.