[디자인 패턴] - Facade
by 볼빵빵오춘기Facade
복잡한 서브시스템(여러 클래스, 모듈 등)을 감싸고 있는 간단한 인터페이스를 제공해주는 디자인 패턴이다.
예시 코드
// 복잡한 서브시스템
class CPU { void freeze() {} void execute() {} }
class Memory { void load(String data) {} }
class HardDrive { String read() { return "data"; } }
// Facade
class ComputerFacade {
private CPU cpu;
private Memory memory;
private HardDrive hd;
public ComputerFacade() {
this.cpu = new CPU();
this.memory = new Memory();
this.hd = new HardDrive();
}
public void start() {
cpu.freeze();
memory.load(hd.read());
cpu.execute();
}
}
// Client
public class Client {
public static void main(String[] args) {
ComputerFacade computer = new ComputerFacade();
computer.start(); // 복잡한 내부 호출을 간단하게
}
}
Facade 패턴의 장점
복잡한 시스템 사용을 단순화
사용자 입장에선 필요한 것만 접근하면 된다.
캡슐화 향상
내부 구조를 숨기고, 외부에 꼭 필요한 것만 노출한다.
서브시스템 간 결합도 감소
서브시스템 변경 시, Facade만 수정하면 된다.
유지보수 용이
복잡한 의존성은 Facade가 관리하므로 수정이 쉽다.
Facade 패턴의 단점
기능이 너무 제한적일 수 있음
필요한 세부 기능이 숨겨져서 사용이 제한될 수도 있다.
남용 시 모든 로직이 Facade에 몰릴 수 있음
잘못 설계하면 Facade가 거대해질 수 있다. (고질적 단점)
서브시스템에 강하게 의존
내부 구현이 바뀌면 Facade도 바뀔 가능성 있다.
Facade 패턴은언제 사용하나?
복잡한 서브시스템을 단순하게 사용하고 싶을 때
ex) 복잡한 라이브러리나 API 래핑
의존성을 줄이고 싶을 때
클라이언트가 서브시스템을 직접 알지 않게 하기 위해 사용한다.
테스트/유지보수를 쉽게 하고 싶을 때
Facade만 Mock으로 대체해서 테스트 가능하다.
계층 간 경계를 명확히 하고 싶을 때
ex) Presentation → Facade → Service 구조
정리하자면
Facade 패턴은 복잡한 시스템을 감싸고 단순한 인터페이스만 제공하여 사용자가 쉽게 시스템을 다룰 수 있게 해준다.
'👩🏻💻 About 프로그래밍 > Spring, Spring boot' 카테고리의 다른 글
[디자인 패턴] - Proxy (0) | 2025.04.09 |
---|---|
[디자인 패턴] - Flyweight (0) | 2025.04.09 |
[디자인 패턴] - Decorator (0) | 2025.04.07 |
[디자인 패턴] - Composite (0) | 2025.04.07 |
[디자인 패턴] - Bridge (0) | 2025.04.07 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기