퍼사드(Facade) 패턴

차동준·2022년 7월 22일
0

CS-디자인패턴

목록 보기
10/16
post-thumbnail

👨‍💻 퍼사드(Facade) 패턴이란?

퍼사드(Facade): 겉모양이나 외관

여러 인터페이스의 사용을 단순하게 바꾸기 위해
인터페이스를 통합하여 사용하기 쉬운 인터페이스를 제공하고
복잡한 시스템을 훨씬 편리하게 사용할 수 있게 해주는 디자인 패턴

예시) 샤워하기 위해 필요한 많은 인터페이스

public interface{
	public void 열기();
    public void 닫기();
}
public interface 조명 {
	public void 켜기();
    public void 끄기();
}	
public interface 샤워기 {
	public void 물뿌리기();
}
public interface 씻기 {
	public void 샴푸();
    public void 바디워시();
    public void 양치질();
    public void 세수();
    public void 닦기();
}

예시) 샤워의 처참한 흔적

public static void main(String[] args) {
	문 우리집화장실문 = new 화장실문();
    ...중략
    
	우리집화장실문.열기();
    우리집화장실조명.켜기();
    우리집화장실문.닫기();
    깨끗이씻기.세수();
    우리집샤워기.물뿌리기();
    깨끗이씻기.양치질();
    우리집샤워기.물뿌리기();
    깨끗이씻기.샴푸();
    우리집샤워기.물뿌리기();
    깨끗이씻기.바디워시();
    우리집샤워기.물뿌리기();
    깨끗이씻기.닦기();
    우리집화장실문.열기();
    우리집화장실조명.끄기();
    우리집화장실문.닫기();
}

이렇게 샤워하기 위해서 매번 모든 객체를 불러와서 메소드를 모두 사용하려면
여간 귀찮은 일이 아닐 수 없다.
이때 이 객체들을 한번에 통합시켜 새로운 하나의 클래스 혹은 인터페이스를 만들어서
간단하게 필요한 모든 메소드들을 실행할 수 있는 상태로 만드는 것이
퍼사드 패턴의 핵심이다.

예시를 위해서 멤버가 되는 객체의 생성들은 중략했다.

예시 ) 샤워하기 퍼사드 클래스

public class 샤워 {
	문 화장실문;
    조명 화장실조명;
    샤워기 화장실샤워기;
    씻기 깨끗이씻기;
    
	public 샤워(문 화장실문, 조명 화장실조명, 샤워기 화장실샤워기, 씻기 깨끗이씻기) {
    	this.화장실문 = 화장실문;
        this.화장실조명 = 화장실조명;
        this.화장실샤워기 = 화장실샤워기;
        this.깨끗이씻기 = 깨끗이씻기;
    }
    
    public 샤워하기() {
    	화장실문.열기();
        화장실조명.켜기();
        화장실문.닫기();
        깨끗이씻기.세수();
        화장실샤워기.물뿌리기();
        깨꿋이씻기.양치질();
        화장실샤워기.물뿌리기();
        깨끗이씻기.샴푸();
        화장실샤워기.물뿌리기();
        깨끗이씻기.바디워시();
        화장실샤워기.물뿌리기();
        깨끗이씻기.닦기();
        화장실문.열기();
        화장실조명.끄기();
        화장실문.닫기();
    }
}

이렇게 모든 복잡한 인터페이스들을 통합으로 제공하는 퍼사드 클래스를 만들어 줌으로써
샤워를 매우 간단하게 할 수 있다.

public static void main(String[] args) {
	문 우리집화장실문 = new 화장실문();
    ... 중략
    
	샤워 쉽게샤워하기 = new 샤워(우리집화장실문, 우리집화장실조명, 우리집화장실샤워기, 우리집에서씻기);
    쉽게샤워하기.샤워하기(); // 샤워완료!
}

🔎 퍼사드 패턴의 장단점

장점

  1. 서브시스템들간의 결합도를 낮출 수 있다.
  2. 클라이언트들이 어떠한 기능을 위해서 컨트롤해야 하는 객체의 수를 줄여준다.
  3. 추상화를 통해서 간결하게 코드를 이해할 수 있다.

단점

  1. 퍼사드 클래스 안에 있는 통합된 인터페이스 중 하나라도 변경되면 오류가 발생할 수 있다.
  2. 클라이언트에게 내부 서브시스템을 숨길 수 없어 내부클래스를 직접 사용하는 것을 막을 수 없다.
profile
백엔드를 사랑하는 초보 개발자

0개의 댓글