에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
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 |