[Java] 퍼사드 패턴을 예제와 함께 알아보자.

2023. 10. 9. 11:07·Programming Language/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();
    }
}
반응형
저작자표시 비영리 변경금지 (새창열림)

'Programming Language > Java' 카테고리의 다른 글

[Java] 어댑터 패턴을 예제와 함께 알아보자.  (0) 2023.10.09
[Java] 디자인패턴과 안티 패턴을 알아보자.  (0) 2023.10.08
[Java] Enum과 Builder 패턴을 예제와 함께 알아보자.  (0) 2023.10.06
[Java] final 을 사용하는 모든 경우 - 예제와 함께 이해하기  (0) 2023.09.30
[Java] 객체 지향 프로그래밍의 5가지 기본 원칙 SOLID 를 예제와 함께 알아 보자. (2)  (0) 2023.09.29
'Programming Language/Java' 카테고리의 다른 글
  • [Java] 어댑터 패턴을 예제와 함께 알아보자.
  • [Java] 디자인패턴과 안티 패턴을 알아보자.
  • [Java] Enum과 Builder 패턴을 예제와 함께 알아보자.
  • [Java] final 을 사용하는 모든 경우 - 예제와 함께 이해하기
Giken
Giken
𝐒𝐲𝐬𝐭𝐞𝐦.𝐨𝐮𝐭.𝐩𝐫𝐢𝐧𝐭𝐥𝐧("𝐇𝐞𝐥𝐥𝐨 𝐖𝐨𝐫𝐥𝐝!");
  • Giken
    개발자 기켄
    Giken
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Programming Language (26)
        • C (3)
        • C++ (2)
        • Java (19)
      • Web (4)
      • Database (1)
        • SQL (5)
      • Spring (10)
      • PHP (7)
      • Linux (1)
      • Server (1)
      • Infra (3)
      • Algorithm (74)
        • 백준 (71)
        • 프로그래머스 (0)
      • 프로젝트 (2)
      • Etc (8)
      • 낙서 (5)
  • 블로그 메뉴

    • GitHub
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    SQL
    프로그래머스
    평년
    SQL고득점키트
    백준
    2753
    2588
    C
    윤년
    DB
    9498
    1330
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Giken
[Java] 퍼사드 패턴을 예제와 함께 알아보자.
상단으로

티스토리툴바