-
구조패턴 > 퍼싸드 *기타/디자인패턴 2021. 2. 11. 10:12
facade : 1(건물의) 정면[앞면] 2(실제와는 다른) 표면, 허울
퍼사드 패턴은 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공하는 것을 말한다.
퍼사드에서 고수준 인터페이스를 제공하기 때문에 서브시스템을 더 쉽게 사용할 수 있다.
예를 들어 홈씨어터에 조명, 스크린, 프로젝트,dvd 기계들을 끄고 켜고 등 조작하는 행위들을 하는 여러 서브시스템을 가지고 있을 때, 그러한 여러 객체를 한 번에 호출하고 조작해주는 facade 객체를 생성하는 것이다.
* 최소 지식 원칙
객체 사이의 상호작용은 될 수 있으면 아주 가까운 "친구" 사이에서만 허용하는 것이 좋다.
어떤 객체든 그 객체와 상호작용하는 클래스의 개수, 상호작용을 어떤식으로 하는 지에 주의를 기울여야 한다는 의미이다.
여러 객체와 인연맺는 것을 피하기 위한 가이드 라인
* 다음 네 종류의 객체의 메서드만 호출한다.
- 객체 자체
- 메서드에 매개변수로 전달된 객체
- 그 메서드에서 생성하거나 인스턴스를 만든 객체
- 그 객체에 속하는 구성요소 (인스턴스 변수에 의해 참조되는 객체, A에는 B가 있다.)
// 원칙을 따르지 않은 경우 public float getTemp(){ //station 으로부터 thermometer 라는 객체를 받은 다음, // 그 객체의 getTemperature을 직접 호출 Thermometer thermometer = station.getTemperature(); return thermometer.getTemperature(); }
// 최소지식 원칙을 지킨 경우 public float getTemp(){ // station 클래스에 thermometer 에 요청을 해 주는 메서드를 추가. 의존 클래스 수를 줄여줌 return station.getTemperature(); }
public class Car { Engine engine; // 구성요소 메서드 호출 가능 public Car(Engine engine){ this.engine = engine; } public void start(Key key){ //매개변수로 전달된 객체의 메서드 호출 가능 Doors door = new Doors(); // 메서드 내에서 생성한 객체의 메서드 호출 가능 boolean authorized = key.turns(); if(authorized){ engine.start(); updateDashboardDisplay(); // 객체 내 메서드 호출 가능 doors.lock(); } } private void updateDashboardDisplay(){ } }
* 자바에서 일상적으로 사용하는 것 중에 최소 지식 원칙에 위배되는 것 => System.out.println()
반응형'기타 > 디자인패턴' 카테고리의 다른 글
행위패턴 > 이터레이터 * (0) 2021.02.11 행위패턴 > 커맨드 * (0) 2021.02.11 구조패턴 > 데코레이터 * (0) 2021.02.11 구조패턴 > 컴포지트 * (0) 2021.02.11 구조패턴 > 어댑터 * (0) 2021.02.11