Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 컴포지트패턴
- 팩토리메서드패턴
- cocoapods
- 스트래터지패턴
- 추상팩토리패턴
- 커맨드패턴
- 템플릿메서드
- SWIFT
- 프록시패턴
- 데코레이터패턴
- 디자인패턴
- 상태패턴
- DispatchQueue
- ViewController
- 어댑터패턴
- RxSwift
- 이터레이터패턴
- Lifecycle
- Scenedelegate
- 전략패턴
- WKWebView
- ios
- Xcode
- unowned
- 스테이트패턴
- 옵저버패턴
- Mobile
- 파사드패턴
- 싱글턴패턴
- 컴파운드패턴
Archives
- Today
- Total
ios dev kangwook.
09. Facade Pattern 본문
어떤 소프트웨어의 다른 커다란 코드 부분에 대하여 간략화된 인터페이스를 제공해주는 디자인 패턴
Facade Pattern
Facade Pattern은 하위 시스템의 인터페이스 집합에 통일된 인터페이스를 제공한다. 즉, Facade Pattern은 하위 시스템을 더 쉽게 사용할 수 있는 더 높은 수준의 인터페이스를 정의하는 패턴이다.
- 다양한 서브시스템이 함께 이용되는 시스템에서 facade 클래스는 이 서브 시스템들을 추상화할 수 있음
- Client는 서브시스템의 존재를 모르고 facade 클래스만 알고 있으며 facade 클래스에만 접근 할 수 있음
- Client와 서브시스템은 의존성이 제거됨
Facade Pattern 예제
- 홈씨어터를 Client가 사용하는 예제
- 기존의 클래스들은 위와 같이 각 장치들이 여러 관계에 의해 복잡하게 구성되어 있음
- 홈시어터의 사용법이 굉장히 복잡해질 수 있음
- HomeTheaterFacade 클래스에서 subsystem으로의 쓰기 쉬운 인텉페이스를 만듦
public class HomeTheaterFacade {
Amplifier amp;
Tuner tuner;
DvdPlayer dvd;
CdPlayer cd;
Projector projector;
TheaterLights lights
Screen screen;
PopcornPopper popper;
public HomeTheaterFacade(Amplifier amp,
Tuner tuner,
DvdPlayer dvd,
CdPlayer cd,
Projector projector,
Screen screen,
TheaterLights lights,
PopcornPopper popper) {
this.amp = amp;
this.tuner = tuner;
this.dvd = dvd;
this.cd = cd;
this.projector = projector;
this.screen = screen;
this.lights = lights;
this.popper = popper;
}
public void watchMovie(String movie) {
System.out.println("Get ready to watch a movie...");
popper.on();
popper.pop();
screen.down();
projector.on();
projector.wideScreenMode();
amp.on();
amp.setDvd(dvd);
amp.setSurroundSound();
amp.setVolume(5);
dvd.on();
dvd.play(movie);
}
public void endMovie() {
System.out.println("Shutting movie theater down...");
popper.off();
lights.on();
screen.up();
projector.off();
amp.off();
dvd.stop();
dvd.eject();
dvd.off();
}
...
}
- Client가 Facade Pattern을 통해 서브시스템에 접근
- 먼저 Facade 클래스 객체를 생성
- 필요한 메서드를 호출
- 영화를 시작하기 위해 단순화된 인터페이스를 통해서 접근할 수 있음
public class HomeTheaterTestDrive {
public static void main(String [] args) {
HomeTheaterFacade homeTheater = new HomeTheaterFacade(amp,
tuner,
dvd,
cd,
projector,
screen,
lights,
popper);
homeTheater.watchMovie("Raiders of the Lost Ark");
homeTheater.endMovie();
}
}
결론
- Facade Pattern은 하위 시스템을 더 쉽게 사용할 수 있도록 단순한 인터페이스를 제공함으로써 다양한 코드에 쉽게 접근할 수 있도록 하는 구조 패턴(Structural Pattern)
- 장점
- Client 입장에서 서브 시스템을 사용해야할 때 다루어야 할 객체의 수를 줄여줌
→ Client입장에서 더 간결하게 코드를 사용할 수 있게 해줌 - Client와 서브시스템간의 결합도가 낮아짐
- Client 입장에서 서브 시스템을 사용해야할 때 다루어야 할 객체의 수를 줄여줌
- 단점
- 다른 구성요소에 대한 메소드 호출을 하기 위해 wrapper클래스를 많이 만들어야할 수 있음
→ 시간과 비용 증가
- 다른 구성요소에 대한 메소드 호출을 하기 위해 wrapper클래스를 많이 만들어야할 수 있음
본문은 Head First Design Pattern (2004) 를 참고하여 공부하고 작성하였음
'Design Pattern' 카테고리의 다른 글
11. Iterator Pattern (0) | 2022.08.31 |
---|---|
10. Template Method Pattern (0) | 2022.08.29 |
08. Adapter Pattern (0) | 2022.08.23 |
07. Command Pattern (0) | 2022.08.22 |
06. Singleton Pattern (0) | 2022.08.21 |
Comments