에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. 퍼사드 패턴
- 복잡한 서브시스템을 하나의 단순한 인터페이스로 감싸는 디자인패턴
- 복잡도를 감추어, 클라이언트가 쉽게 사용하도록 하는것이 목적
2. 예제: 홈시어터 퍼사드
예제) HomeTheaterFacade
더보기
public class HomeTheaterFacade {
    Amplifier amp;
    Tuner tuner;
    StreamingPlayer player;
    Projector projector;
    TheaterLights lights;
    Screen screen;
    PopcornPopper popper;
    
    public void watchMovie(String movie) {
    	popper.on();
        popper.pop();
        lights.dim(10);
        screen.down();
        projector.on();
        projector.wideScreenMode();
        amp.on();
        amp.setStreamingPlayer(player);
        amp.setVolumne(5);
        player.on();
        player.play(movie);
    }
}
3. 최소 지식 원리
- 객체 사이의 상호작용은 가까운 사이에만 이루어지도록 하기 (불필요한 직접 접근을 피하기)
- 간접 참조를 통해 정보 은닉과 유지보수성을 높임
장점
| 장점 | 설명 | 
| 결합도 감소 | 클라이언트와 서브시스템 간의 의존성 줄어듦 | 
| 코드 재사용성 향상 | 서브시스템 기능을 모듈화해 여러 곳에서 재활용 가능 | 
| 유지보수성 향상 | 변경이 퍼사드 내부에 한정되어 수정이 쉬움 | 
예시
| 구분 | 설명 | 기대 효과 | 
| 메서드 체이닝 피하기 | 외부에서 객체 내부 구조에 직접 접근하지 않음 객체의 내부 메서드를 통해 필요한 기능만 노출 | 내부 구조 은닉 결합도 감소 유지보수성 향상 | 
| 헬퍼 객체 활용하기 | 하나의 메서드가 여러 객체에 직접 접근하지 않음 중간에 헬퍼 객체를 둬서 간접적으로 작업 처리 | 역할 분리 복잡성 감소 테스트 용이 | 
예) 메서드 체이닝 피하기
더보기
✅
Order order = customer.getOrder();
order.getItem().doSomething();
❌
customer.processOrder();
예) 헬퍼 객체 활용하기
더보기
✅
public class Customer {
    private Order order;
    public void processOrder(OrderProcessor processor) {
        processor.process(order);
    }
}
public class OrderProcessor {
    public void process(Order order) {
        order.validate();
        order.calculateTotal();
        order.confirm();
    }
}
❌
public class Customer {
    private Order order;
    public void processOrder() {
        order.validate();
        order.calculateTotal();
        order.confirm();
    }
}
'Java > Design Pattern' 카테고리의 다른 글
| [헤드퍼스트 디자인 패턴] 9-1. 반복자 패턴 (0) | 2024.12.18 | 
|---|---|
| [헤드퍼스트 디자인 패턴] 8. 템플릿 메서드 패턴 (0) | 2024.12.18 | 
| [헤드퍼스트 디자인 패턴] 7-1. 어댑터 패턴 (0) | 2024.12.17 | 
| [헤드퍼스트 디자인 패턴] 6. 커맨드 패턴 (0) | 2024.12.17 | 
| [헤드퍼스트 디자인 패턴] 5. 싱글턴 패턴 (1) | 2024.12.16 |