학습 목표

복잡한 과정을 간단하게 표현하는 퍼사드 패턴

사용 상황

여러 복잡한 하위 시스템을 단일 API로 묶고 싶을 때

가장 대표적인 사용 이유.

예시:

  • 결제 처리
    • PG 연동
    • 카드사 인증
    • 포인트 차감
    • 쿠폰 사용
    • 결제 로그 기록

이걸 각 서비스마다 따로 호출하면 복잡해짐 → PaymentFacade로 단일 메서드 제공

예제

더보기

helpSystem01 , helpSystem02, helpSystem03을 순서대로 하나에 process에서 처리하는 로직

  • 각각의 System
class HelpSystem01 {

    public HelpSystem01() {
        System.out.println("Call COnstructor : " + getClass().getSimpleName());
    }

    public void process() {
        System.out.println("Call Process : " + getClass().getSimpleName());
    }

}

class HelpSystem02 {

    public HelpSystem02() {
        System.out.println("Call COnstructor : " + getClass().getSimpleName());
    }

    public void process() {
        System.out.println("Call Process : " + getClass().getSimpleName());
    }

}

class HelpSystem03 {

    public HelpSystem03() {
        System.out.println("Call COnstructor : " + getClass().getSimpleName());
    }

    public void process() {
        System.out.println("Call Process : " + getClass().getSimpleName());
    }

}
  • Facade
public class Facade {

    private HelpSystem01 helpSystem01;
    private HelpSystem02 helpSystem02;
    private HelpSystem03 helpSystem03;

    public Facade() {
        helpSystem01 = new HelpSystem01();
        helpSystem02 = new HelpSystem02();
        helpSystem03 = new HelpSystem03();
    }

    public void process() {
        helpSystem01.process();
        helpSystem02.process();
        helpSystem03.process();
    }
}
  • 실행
public class Main {

    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.process();
    }
}

- Facade 안에 여러가지 서비스 시스템을 실행하는 과정

 

마무리

보통 Web 을 개발하다 보면 Service에서 풀려고 하다 보면 비즈니스 로직들이 합쳐지면 DDD가 깨지는 상황이 옵니다. 그럴 때 Service 앞에 두어서 쓰기 좋은 것 같습니다.

+ Recent posts