Facade 패턴

5.디자인패턴 2016. 9. 18. 15:12

Facade 패턴은 사용하기에 복잡한 라이브러리에 대한 간편한 인터페이스를 제공하거나 어떤 목적의 동작인지 이해하기 어려운 일련의 작업들에 대한 적절한 네이밍을 통해 사용자로 하여금 그 의미를 쉽게 이해 할 수 있는 인터페이스를 제공하기 위한 패턴이다.

Facade라는 단어의 의미는 잘 지어진 건축물의 정면을 의미한다. 건축물의 정면은 보통 건축물의 이미지와 건축 의도를 나타내기 때문에 오래 전부터 특별한 디자인을 적용하여 의미를 부여했다. 이와 마찬가지로 자칫 동작의 목적과 같은 중요한 사항을 놓치기 쉬운 경우, 이해하기 쉬운 인터페이스를 제공해주면 동작에 대한 이해도가 높아질 수 있다.


Facade 패턴의 클래스 다이어그램

Facade 패턴은 다른 패턴들처럼 일정한 구조를 가지고 있는 것이 아니다. 따라서 구현의 예는 매우 다양할 수 있는데 여기서는 자동차(Car)와 자동차에 대한 Facade(CarFacade)를 통해 Facade 패턴을 살펴 보기로 한다.


Facade 패턴의 구현

class CarFacade{

    Car car;

    public CarFacade(Car car){

        this.car = car;

    }

   

    public void drive(){

        car.enginStart();

        car.doorLock();

        car.wheelsRoll();

    }

   

    public void stop(){

        car.enginStop();

        car.doorUnlock();

        car.wheelsStop();

    }

      

    public void park(){

        car.enginStop();

        car.doorLock();

        car.wheelsStop();

    }

}

class Car{

    public void enginStop(){ System.out.println("engine stop"); }

    public void enginStart(){ System.out.println("engine start"); }

    public void doorLock(){ System.out.println("door locked"); }

    public void doorUnlock(){ System.out.println("door unlocked"); }

    public void wheelsRoll(){ System.out.println("wheels roll"); }

    public void wheelsStop(){ System.out.println("wheels stop"); }

}

Car의 경우 부품인 엔진, 문, 바퀴 등의 동작에 대해 구현되어 있다고 하자. 이들 기능은 자동차의 동작에 매우 중요한 부분이긴 하지만, 일반적인 운전자 또는 자동차의 상태를 쉽게 조작하고자 하는 사람들에게는 각 부품을 일일이 조작하기는 힘들다. 따라서 CarFacade 클래스를 통해서 사용자가 이해하기 쉽게 자동차의 상태를 변경할 수 있도록 한다. 예를 들어 일반적인 운전자는 자동차를 운전(drive) 정지(stop) 주차(park)와 같은 형태로 차의 상태를 조작하기를 윈한다. 따라서 CarFacade가 drive / stop / park와 같은 Facade 메소드를 제공하여 주면 자동차를 한결 쉽게 운전할 수 있게 될 것이다.


사용 방법

public static void main(String[] args) {

    CarFacade facade = new CarFacade(new Car());

    facade.drive();

    facade.stop();

    facade.park();

}


'5.디자인패턴' 카테고리의 다른 글

Property List 패턴  (0) 2016.09.24
Mediator 패턴  (0) 2016.09.18
Command 패턴  (0) 2016.09.18
Flyweight 패턴  (0) 2016.09.18
Chain Of Responsibility 패턴  (0) 2016.09.17
Posted by 이세영2
,