1. 소개

이 빠른 사용방법(예제)에서는 구조 디자인 패턴 중 하나인 Facade를 살펴보겠습니다 .

먼저 패턴에 대한 개요를 제공하고 이점을 나열하며 어떤 문제를 해결하는지 설명합니다.

그런 다음 외관 패턴을 Java의 기존 실제 문제에 적용합니다.

2. 외관이란 무엇입니까?

간단히 말해서 파사드는 간단한 인터페이스 뒤에 복잡한 하위 시스템을 캡슐화합니다. 복잡성의 상당 부분을 숨기고 하위 시스템을 사용하기 쉽게 만듭니다.

또한 복잡한 하위 시스템을 직접 사용해야 하는 경우에도 그렇게 할 수 있습니다. 우리는 항상 파사드를 사용하도록 강요받지 않습니다.

훨씬 간단한 인터페이스 외에도 이 디자인 패턴을 사용하면 얻을 수 있는 이점이 하나 더 있습니다. 복잡한 하위 시스템에서 클라이언트 구현을 분리합니다. 덕분에 기존 하위 시스템을 변경할 수 있고 클라이언트에 영향을 주지 않습니다.

작동 중인 파사드를 살펴보겠습니다.

3. 예시

자동차에 시동을 걸고 싶다고 가정해 봅시다. 다음 다이어그램은 그렇게 할 수 있는 레거시 시스템을 나타냅니다.

파사드 클래스 다이어그램

 

보다시피 꽤 복잡할 수 있으며 엔진을 올바르게 시작하려면 약간의 노력이 필요합니다 .

airFlowController.takeAir()
fuelInjector.on()
fuelInjector.inject()
starter.start()
coolingController.setTemperatureUpperLimit(DEFAULT_COOLING_TEMP)
coolingController.run()
catalyticConverter.on()

마찬가지로 엔진을 멈추는 데도 몇 가지 단계가 필요합니다.

fuelInjector.off()
catalyticConverter.off()
coolingController.cool(MAX_ALLOWED_TEMP)
coolingController.stop()
airFlowController.off()

파사드가 여기에 필요한 것입니다. startEngine()stopEngine() 의 두 가지 방법으로 모든 복잡성을 숨길 것입니다 .

어떻게 구현할 수 있는지 봅시다:

public class CarEngineFacade {
    private static int DEFAULT_COOLING_TEMP = 90;
    private static int MAX_ALLOWED_TEMP = 50;
    private FuelInjector fuelInjector = new FuelInjector();
    private AirFlowController airFlowController = new AirFlowController();
    private Starter starter = new Starter();
    private CoolingController coolingController = new CoolingController();
    private CatalyticConverter catalyticConverter = new CatalyticConverter();

    public void startEngine() {
        fuelInjector.on();
        airFlowController.takeAir();
        fuelInjector.on();
        fuelInjector.inject();
        starter.start();
        coolingController.setTemperatureUpperLimit(DEFAULT_COOLING_TEMP);
        coolingController.run();
        catalyticConverter.on();
    }

    public void stopEngine() {
        fuelInjector.off();
        catalyticConverter.off();
        coolingController.cool(MAX_ALLOWED_TEMP);
        coolingController.stop();
        airFlowController.off();
    }

이제 자동차를 시동하고 멈추려면 13줄이 아닌 2줄의 코드만 있으면 됩니다.

facade.startEngine();
// ...
facade.stopEngine();

4. 단점

파사드 패턴은 추가 추상화 계층만 추가하기 때문에 원하지 않는 절충안을 강요하지 않습니다.

경우에 따라 간단한 시나리오에서 패턴이 남용되어 중복 구현이 발생할 수 있습니다.

5. 결론

이 기사에서는 파사드 패턴을 설명하고 기존 시스템 위에 이를 구현하는 방법을 시연했습니다.

이러한 예제의 구현은  GitHub 에서 찾을 수 있습니다 .

Generic footer banner