디자인 패턴

Facade Pattern

내일도무사히 2021. 10. 27. 21:17

스프링 slf4j(Simple Logging Facade for Java) 를 공부하던 도중 못보던 디자인 패턴이 발견되었다. 그건 이름에도 나와있는 Facade Pattern이였고 이번에 구글링을 통해서 내용을 정리하기로 했다.

 

💡 Facade 패턴이란?

 

디자인 패턴의 '구조' 패턴 중 하나로 객체지향 개발법에서 많이 쓰인다. Facade(퍼사드)란 여러 복잡한 서브클래스들의 인터페이스를 한데 묶어 간략화된 인터페이스를 제공하는 객체를 말한다.

 

 

🧩 어떤 장점이 있나?

 

  1. 여러 서브시스템을 하나의 인터페이스로 둠으로써 복잡한 서브시스템을 사용하기 편하게 한다.
  2. 서브시스템의 '의존성'이 최소화된다.

 

 

📗 Facade Pattern UML

 

from -  https://en.wikipedia.org/wiki/Facade_pattern

 

from -  https://en.wikipedia.org/wiki/Facade_pattern

 

위의 클래스 다이어그램과 시퀀스 다이어그램에서 볼 수 있듯이 서브클래스들을 Facade라는 단일 인터페이스로 묶고, Client는 Facade를 사용하는 방식이다.

 

 

📖 구현

Code

class SubSystem1 {
    void log() {
        System.out.println("call at subSystem1 Object");
    }
}

class SubSystem2 {
    void log() {
        System.out.println("call at subSystem2 Object");
    }
}

class SubSystem3 {
    void log() {
        System.out.println("call at subSystem3 Object");
    }
}

class FacadeClass {

    private final SubSystem1 subSystem1;
    private final SubSystem2 subSystem2;
    private final SubSystem3 subSystem3;

    public FacadeClass() {
        this.subSystem1 = new SubSystem1();
        this.subSystem2 = new SubSystem2();
        this.subSystem3 = new SubSystem3();
    }

    void logSubSystems() {
        subSystem1.log();
        subSystem2.log();
        subSystem3.log();
    }
}

class Driver {

    @Test
    void facadeTest() {
        FacadeClass facadeClass = new FacadeClass();
        facadeClass.logSubSystems();
    }
}

Output

 위의 구현과 같이 Subsystem의 기능들을 Facade의 인터페이스에 묶어서 드라이버가 Facade를 한번만 불러도 모든 코드가 동작하는 모습을 볼 수 있다.

 

 

Reference

https://en.wikipedia.org/wiki/Facade_pattern

 

Facade pattern - Wikipedia

The facade pattern (also spelled façade) is a software-design pattern commonly used in object-oriented programming. Analogous to a facade in architecture, a facade is an object that serves as a front-facing interface masking more complex underlying or str

en.wikipedia.org