[디자인패턴] 퍼사드패턴(Pacade Pattern)

고지훈·2021년 10월 13일
1

DesignPattern

목록 보기
12/16
post-thumbnail

퍼사드패턴(Pacade Pattern)

퍼사드패턴(Facade Pattern)의 목적은 복잡한 서브시스템을 인터페이스로 감싸 간단하게 만드는 것이다.

퍼사드패턴은 다음과 같은 특징을 갖는다.

  • 어떤 서브시스템의 인터페이스에 대한 통합된 인터페이스를 제공한다. 퍼사드에서 고수준의 인터페이스를 제공하기 때문에, 서브시스템을 더 쉽게 사용할 수 있다.
  • 퍼사드패턴은 어떤 소프트웨어의 다른 커다란 코드 부분에 대해 간략화된 인터페이스를 제공하는 디자인 패턴이다. 복잡한 소프트웨어 바깥에 있는 코드가 라이브러리의 내부 코드에 의존하는 정도를 낮춰주고, 복잡한 소프트웨어를 쓸 수 있도록 간단한 인터페이스를 제공한다.
  • 여러 메서드를 써서 하나의 단순한 기능을 수행하는 인터페이스를 만드는 패턴이다. 사용자가 객체의 여러 기능을 더 쉽게 사용할 수 있게 한다.
  • 퍼사드패턴은 제 3의 API(Third Party API)와 같은 외부 라이브러리를 추상화하는데 사용된다.

위 다이어그램에서 처럼 다양한 서브시스템이 사용되는 시스템에서 Facade Class는 서브 시스템을 추상화할 수 있다.

즉, 클라이언트는 서브시스템으로 분리되어 서브시스템에 의존하지 않아도 된다는 장점이 있다.


퍼사드패턴 구현

위 다이어그램을 토대로 코드를 구현해보자!

// SubSystem1.java
public class SubSystem1 {
	public void doSomething(String name) {
    	System.out.println("동작 1: " + name);
    }
}
// SubSystem2.java
public class SubSystem2 {
	public void doSomething(String name) {
    	System.out.println("동작 2: " + name);
    }
}
// SubSystem3.java
public class SubSystem3 {
	public void doSomething(String name) {
    	System.out.println("동작 3: " + name);
    }
}
// FacadeService.java
public class FacadeService {
    private final SubSystem1 subSystem1;
    private final SubSystem2 subSystem2;
    private final SubSystem3 subSystem3;
    
    public FacadeService() {
    	subSystem1 = new SubSystem1();
        subSystem2 = new SubSystem2();
        subSystem3 = new SubSystem3();
    }
    
    public void operate(String name) {
    	subSystem1.doSomething(name);
        subSystem2.doSomething(name);
        subSystem3.doSomething(name);
    }
}
// Client.java
public class Client {
    public static void main(String args[]){
    	FacadeService facadeService = new FacadeService();
        facadeService.operate("Client");
    }
}

FacadeService가 SubSystem1, SubSystem2, SubSystem3을 캡슐화하였고, Client클래스는 operator메소드를 통해 사용할 수 있다.(내부는 알 수 없음)

profile
"계획에 따르기보다 변화에 대응하기를"

0개의 댓글