[디자인 패턴] Facade 패턴

이멀젼씨

·

2020. 3. 20. 08:51

- 정의

 

일련의 서브시스템에 대한 통합된 인터페이스를 제공하여 여러 서브 시스템을 더 쉽게 사용할 수 있도록 해주는 패턴이다

 

- UML

1. Engine클래스는 엔진을 설치하는 installEngine메서드를 갖고 있다

2. Skeleton클래스는 뼈대를 생성하는 makeSkeleton메소드를 갖고 있다

3. Wheel클래스는 바퀴를 장착하는 equipWheel메소드를 갖고 있다

4. Car클래스는 생성자를 통해 각 클래스를 주입받고, makeCar메소드를 통해 makeSkeleton, installEngine, equipWheel의 메소드를 순차적으로 수행한다

 

- 코드

 

Engine class

public class Engine {
	public void installEngine() {
		System.out.println("엔진을 설치합니다");
	}
}

Skeleton class

public class Skeleton {
	public void makeSkeleton() {
		System.out.println("뼈대를 생성합니다");
	}
}

Wheel class

public class Wheel {
	public void equipWheel() {
		System.out.println("바퀴를 장착합니다");
	}
}

Car class

public class Car {
	private final Engine engine;
	private final Skeleton skeleton;
	private final Wheel wheel;
	
	public Car() {
		engine = new Engine();
		skeleton = new Skeleton();
		wheel = new Wheel();
	}
	
	public void makeCar() {
		skeleton.makeSkeleton();
		engine.installEngine();
		wheel.equipWheel();
	}
	
}

Main class

public class Main {
	public static void main(String[] args) {
		Car car = new Car();
		car.makeCar();
	}
}

출력결과

더보기

뼈대를 생성합니다
엔진을 설치합니다
바퀴를 장착합니다

 

 

- 설명

 

일련의 행위가 한 클래스에서 수행된다는 게 템플릿 메서드 패턴과 유사하다

 

다른 점이라면

 

템플릿 메서드 패턴은 추상 클래스에서 일련의 행위들을 한꺼번에 수행할 수 있는 메소드를 만들고, 이 추상 클래스를 상속하는 클래스는 한꺼번에 수행되는 일련의 행위들을 각각 재정의한다.

즉, 추상 클래스에서는 일련의 과정만 수행을 해주고, 각 과정의 자세한 부분은 상속받는 클래스에서 재정의가 필요하다

 

퍼사드 패턴은 여러 클래스(서브 시스템)에서 수행되는 행위들을 묶어 한 클래스에서 동작하게 만든다는 것이다

 

장점 : 사용자가 다루어야 할 서브 시스템(클래스)의 범위를 줄여주고, 결합도를 낮출 수 있다.

 

단점 : 사용자에게 내부의 서브 시스템까지 숨길 수 없기 때문에, 사용자가 서스 시스템 내부의 클래스를 직접 사용하는 것을 막을 수 없다. 대안으로는 Namespace를 사용하는 것이다