본문 바로가기
소프트웨어공학/디자인 패턴

Facade 패턴 (퍼사드 패턴) - 구조, 통합 인터페이스 제공 | Design Pattern 디자인 패턴 /

by javapp 자바앱 2021. 10. 12.
728x90

 

 

Facade Pattern

 

복잡한 시스템을 구조화하여 쉽게 사용

 

 

 

 

문제점) : 여러 개의 구성요소(interface)로 구성된, 사용 절차가 복잡한 시스템

 

책 참고 :  Head First Design Patterns

 

 

 

Key Idea : subsystem (a set of interfaces)에 대해 통합 인터페이스 제공

 

 

예제 코드

public class HomeTheaterFacade
{
    Amplifier amp;
    Tuner tuner;
    DvdPlayer dvd;
    CdPlayer cd;
    Projector projector;
    TheaterLights lights;
    Screen screen;
    PopcornPopper popper;

    public HomeTheaterFacade(Amplifier amp, Tuner tuner, DvdPlayer dvd, CdPlayer cd, Projector projector, TheaterLights lights, Screen screen, PopcornPopper popper) {
        this.amp = amp;
        this.tuner = tuner;
        this.dvd = dvd;
        this.cd = cd;
        this.projector = projector;
        this.lights = lights;
        this.screen = screen;
        this.popper = popper;
    }

    public void watchMovie(String movie){
        System.out.println("Get ready to watch a movie...");
        popper.on();
        popper.pop();
        lights.dim(10);
        screen.down();
        projector.on();
        projector.wideScreenMode();
        amp.on();
        amp.setDvd(dvd);
        amp.setSurroundSound();
        amp.setVolume(5);
        dvd.on();
        dvd.play(movie);
    }

    public void endMovie(){
        System.out.println("Shutting movie theater down...");
        popper.off();
        lights.on();
        screen.up();
        projector.off();
        amp.off();
        dvd.stop();
        dvd.eject();
        dvd.off();
    }
}

 

 

public class Client
{
    public static void main(String[] args) {
// instantiate components here
        HomeTheaterFacade homeTheater =
                new HomeTheaterFacade(amp, tuner, dvd, cd, projector, screen, lights, popper);
        homeTheater.watchMovie(“Raiders of the Lost Ark”);
        homeTheater.endMovie();
    }
}

 

 

Client를 대신하여 subsystem의 통합 인터페이스를 통해 보다 간단한 인터페이스 제공.

- client가 간단해짐.

- Hides subsystem from client -> client는 subsystem 변경에 영향을 받지 않음.

- 하나의 인터페이스를 통해 client , subsystem 간 결합도 (커플링) 가 낮아짐.

- 클라이언트와 복잡한 서브 시스템 사이에 Facade가 존재함.

 

하나의 완성품으로 조립하는 느낌이다.

Facade 패턴에서 제공하는 단순화된 하나의 인터페이스만 사용하므로 클래스간 의존관계가 줄어들고 복잡성 또한 낮아지는 효과를 가져온다.

 

 

책 참고 : Head First Design Patterns

댓글