티스토리 뷰
퍼사드 패턴(Facade Pattern)
퍼사드 패턴은 아주 복잡한 일련의 서브시스템 인터페이스들을 하나의 단순화된 통합 인터페이스로 묶어 줍니다. 또한 고수준 인터페이스를 정의하고 클라이언트가 정말로 중요하다고 여기는 기능들만 포함해 서브시스템을 더 편리하게 사용할 수 있도록 도와줍니다.
특징
- 하나 이상의 클래스 인터페이스들을 단순한 하나의 인터페이스로 제공하는 퍼사드 클래스를 구현합니다.
- 클라이언트의 구성 요소인 서브시스템들을 분리하는 역할을 수행합니다.
Q) 퍼사드 클래스에서 사용되는 서브시스템 클래스 메소드를 직접 호출하고 싶다면 어떻게 할까요?
퍼사드 클래스는 서브시스템 클래스를 캡슐화하지 않아요. 서브시스템 클래스를 그냥 사용하면 됩니다!
퍼사드 클래스 예시
스트리밍 플레이어, 프로젝터, 자동 스크린, 서라운드 음향, 팝콘 기계까지 갖춘 멋있는 우리 집의 영화관을 만들어봅시다.
영화를 보기 위해 내가 직접 플레이어를 켜고, 스크린을 열고, 음향을 키우고, 프로젝터를 켜고, 팝콘까지 직접 튀긴다면.. 너무 과정이 복잡해질 것 같아요. 영화 보기 버튼 하나만 꾹 누르면 자동으로 플레이어를 켜고 팝콘까지 튀켜주는 기능이 있으면 좋을 것 같네요.
영화를 보기 위한 복잡한 준비 과정을 퍼사드 패턴을 적용해 아주 단순하게 만들어봅시다.
public class HomeTheaterFacade {
Amplifier amp;
Tuner tuner;
StreamingPlayer player;
Projector projector;
TheaterLights lights;
Screen screen;
PopcornPopper popper;
public HomeTheaterFacade(Amplifier amp,
Tuner tuner,
StreamingPlyaer player,
Projector projector,
Screen screen,
TheaterLights lights,
PopcornPopper popper) {
this.amp = amp;
this.tuner = tuner;
this.player = player;
this.projector = projector;
this.screen = screen;
this.lights = lights;
this.popper = popper;
}
public void watchMovie(String movie) {
System.out.println("영화 볼 준비 중");
popper.on();
popper.pop();
lights.dim(10);
screen.down();
projector.on();
projector.wideScreenMode();
amp.on()
...
}
public void endMovie() {
System.out.println("홈 시어터를 끄는 중");
popper.off();
lights.on();
screen.up();
projector.off();
amp.off();
...
}
}
이제 watchMovie() 메소드만 실행하면 퍼사드 클래스가 자동으로 복잡한 영화 준비 과정을 수행해준답니다.
HomeTheaterFacade homeTheater =
new HomeTheaterFacade(amp, tuner, player, projector, screen, lights, popper);
homeTheater.watchMovie("인디아나 존스:레이더스");
homeTheater.endMovie();
최소 지식 원칙(Principle of Least Knowledge)
최소 지식 원칙은 퍼사드 패턴이 준수하고 있는 객체지향 원칙입니다. 객체 사이의 상호작용은 되도록이면 아주 가까운 사이에서만 허용해야 한다는 원칙입니다. 이 원칙을 잘 따르면 여러 클래스가 복잡하게 얽혀 있어서, 시스템의 한 부분을 변경했을 때 다른 부분까지 줄줄이 고쳐야 하는 상황을 미리 방지할 수 있습니다.
최소 지식 원칙의 가이드라인
최소 지식 원칙에서 허용하는 아주 가까운 사이는 다음을 의미합니다.
- 객체 자체
- 메소드에 매개변수로 전달된 객체
- 메소드를 생성하거나 인스턴스를 만든 객체
- 객체에 속하는 구성 요소
예시
메소드를 호출한 결과로 리턴받은 객체의 메소드를 호출하는 것도 최소 지식 원칙을 위반합니다.
public float getTemp() {
Thermometer thermometer = station.getThermometer();
return thermometer.getTemperature();
}
이렇게 객체가 대신 메소드를 호출해 리턴하는 방식으로 최소 지식 원칙을 준수할 수 있습니다.
public float getTemp() {
return station.getTemperature();
}
- Total
- Today
- Yesterday
- 리눅스
- atq
- linuxawk
- cat
- 백준27219
- GithubAPI
- 코테
- 쇼미더코드
- 버추억박스에러
- baekjoon
- 백준
- linux파일
- Linux
- 사용자ID
- GitHubAPIforJava
- OnActivityForResult
- 백준27211
- linuxtouch
- 버추억박스오류
- Baekjoon27219
- linuxgedit
- Baekjoon27211
- 리눅스cron
- virtualbox
- cron시스템
- awk프로그램
- api문서
- whatis
- SELECT #SELECTFROM #WHERE #ORDERBY #GROUPBY #HAVING #EXISTS #NOTEXISTS #UNION #MINUS #INTERSECTION #SQL #SQLPLUS
- E_FAIL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |