Giken Dev
article thumbnail
Published 2023. 10. 9. 11:07
[Java] 퍼사드 패턴 백엔드 데브코스
반응형

퍼사드 패턴?

퍼사드(Facade) : 건물의 출입구가 있는 정면

 

복잡한 시스템이나 서브시스템을 단순화된 인터페이스를 통해 외부로 노출시키는 패턴입니다.

이를 통해 클라이언트가 시스템의 복잡성을 몰라도 간단한 인터페이스를 통해 시스템을 사용할 수 있도록 합니다.

 

 

실생활에서 볼 수 있는 퍼사드 패턴의 예시

일상적인 예제로는 스마트폰의 전원 버튼을 들 수 있습니다. 
스마트폰의 내부에는 수많은 하드웨어 및 소프트웨어 컴포넌트가 복잡하게 동작합니다. 그러나 사용자에게는 전원 버튼 하나만 노출되어 있고, 이 버튼을 누르면 전체 시스템이 켜지거나 꺼집니다. 

 

 

 

개발 과정에서 만나게 되는 퍼사드 패턴이 필요한 상황

  • 복잡한 시스템 또는 라이브러리를 간편하게 사용하려고 할 때.
  • 다른 시스템과의 상호작용을 캡슐화하려고 할 때.
  • 서브시스템의 변경에 영향을 최소화하면서 클라이언트 코드를 관리하려고 할 때.

 

 

 

UserService 가 ArticleService 에만 의존하는 상황에서는 아직은 괜찮습니다.

그러나 Servcice 가 서로 의존한다면 문제가 생길 수 있습니다. (순환참조)

 

 

이 때 퍼사드 패턴을 통해서 해결합니다.

 

각각의 컨트롤러에서 UserService, ArticleService 두 개 다 필요한 메서드라면,
-> 퍼사드 클래스에서 수행하도록 합니다.

그게 아니라 Service 하나만 필요한 메서드라면
-> 퍼사드 클래스를 거치지 않고 해당 Service 를 직접 호출해서 사용하면 됩니다.

 

 

 

 

 

퍼사드 패턴이 적용되면서 생긴 장점과 퍼사드 패턴이 보호하고자 하는 것

  • 클라이언트 코드 간소화: 시스템의 복잡성을 숨기고, 클라이언트에게는 간단한 인터페이스만 노출되므로 클라이언트 코드를 간소화합니다.
  • 시스템의 유지 보수 용이성: 시스템 내부 변경이 있을 때, 퍼사드 패턴을 사용하면 클라이언트에 영향을 미치지 않고 서브시스템 변경을 쉽게 처리할 수 있습니다.
  • 시스템의 확장성: 새로운 기능을 추가하거나 다른 서브시스템을 통합하기 쉽습니다.
  • 보안과 접근 제어: 클라이언트는 오직 퍼사드 인터페이스만 접근할 수 있으며, 시스템 내부 구현과 상세 내용은 숨겨진 채로 보호됩니다.

 

 

 

 

// 서브시스템 (Engine)
class Engine {
    public void start() {
        System.out.println("엔진 시동을 걸었습니다.");
    }
}

// 서브시스템 (Battery)
class Battery {
    public void supplyPower() {
        System.out.println("배터리 전원을 공급합니다.");
    }
}

// 퍼사드 클래스 (CarStarter)
class CarStarter {
    private Engine engine;
    private Battery battery;

    public CarStarter() {
        this.engine = new Engine();
        this.battery = new Battery();
    }

    public void startCar() {
        battery.supplyPower();
        engine.start();
        System.out.println("자동차 시동이 걸렸습니다.");
    }
}

// 클라이언트 코드
public class Main {
    public static void main(String[] args) {
        CarStarter carStarter = new CarStarter();
        carStarter.startCar();
    }
}
반응형
profile

Giken Dev

@기켄

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!