본문 바로가기
야미스터디/Design pattern

[디자인 패턴] 퍼사드 패턴 📌

by 의정부핵꿀밤 2022. 10. 4.
728x90

🖐 구조 패턴 (Structural Pattern)

  • 작은 클래스들의 상속과 함성을 통해 더 큰 클래스를 생성하는 방법을 제공하는 패턴
  • 독립적으로 개발할 클래스들을 마치 하나인 것처럼 사용할 수 있다

 

구조 패턴 종류

  • 적응자 패턴 (Adapter Pattern)
  • 가교 패턴 (Bridge Pattern)
  • 복합체 패턴 (Composite Pattern)
  • 장식자 패턴 (Decorator Pattern)
  • 퍼사드 패턴 (Facade Pattern)
  • 플라이급 패턴 (Flyweight Pattern)
  • 프록시 패턴 (Proxy Pattern)

 


퍼사드 패턴 (Facade Pattern)

  • 구조 패턴(Structural Pattern)의 한 종류로, 서브 시스템들의 공통적인 기능을 정의하는 단순화된 상위 수준의 인터페이스를 정의하는 패턴이다
  • 퍼사드 객체는 복잡한 소프트웨어 바깥쪽의 코드가 라이브러리의 안쪽 코드에 의존하는 일을 감소시켜주고, 복잡한 소프트웨어를 사용할 수 있게 간단한 인터페이스를 제공해준다
  • 퍼사드 패턴은 서브 시스템(내부 구조)을 거대한 클래스(외벽)으로 감싸서 편리한 인터페이스를 제공한다
    • 클라이언트 객체가 여러 저수준 인터페이스의 동작을 제어하려면 여러 저수준 인터페이스의 메서드들을 일일이 호출해야 하는데, 파사드 패턴을 이용하면 고수준 인터페이스의 메서드 호출만으로 한 번에 할 수 있게 된다
    • 그래서 파사드 패턴에서는 고수준 인터페이스로 저수준 인터페이스를 통합했다고 하여 '통합 인터페이스' 라고 부른다
  • 이를 통해 서브 시스템들 사이의 종속성을 줄일 수 있다

 

 

 

퍼사드 패턴 구성

  • Facade : 사용자의 요청을 서브 시스템 객체에 전달하는 단순하고 일관된 통합 인터페이스
  • Subsystem Classes : Facade에 대한 정보를 갖지 않고, 서브 시스템의 기능을 구현하는 클래스

 

 

퍼사드 패턴 특징

  • 낮은 결합도 : 클라이언트가 서브 시스템의 코드를 모르더라도 Facade 클래스를 통해 간편하게 사용이 가능하다
  • 서브 클래스 직접 접근 가능 : Facade 클래스를 통해 서브 클래스를 사용할지, 서브 클래스를 직접 사용할 지 선택이 가능하다
  • 좋은 유연성 : 클라이언트와 서브시스템이 서로 긴밀하게 연결되어 있지 않아 서브시스템에 변화가 있을 때 클라이언트에 영향이 가지 않는다

 

 

 

 

퍼사드 사용 예시

간단한 서브 시스템 3개와 Facade, Client 클래스를 구현해보자

 

 

SubSystem1.java

public class SubSystem1 {
	public void doSomething(final String name) {
    	System.out.println("Operate 1" + name);
    }
}

 

SubSystem2.java

public class SubSystem2 {
	public void doSomething(final String name) {
    	System.out.println("Operate 2" + name);
    }
}

 

SubSystem3.java

public class SubSystem3 {
	public void doSomething(final String name) {
    	System.out.println("Operate 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(final String name) {
    	subSystem1.doSomething(name);
        subSystem2.doSomething(name);
        subSystem3.doSomething(name);
   	}
}
  • FacadeService가 SubSystem1, SubSystem2, SubSystem3을 캡슐화하였다

 

Client.java

public class Cleint {
	public static void main(String[] args) {
    	FacadeService facadeService = new FacadeService();
        facadeService.operate("Client");
    }
}
  • Client는 FacadeService의 operate 메서드만 사용할 수 있고 그 내부는 알 수 없다

 

 

 

 

퍼사드 패턴의 문제점

  • 퍼사드 패턴을 사용하면 고수준 객체가 너무 복잡해진다
  • 따라서 고수준 객체에 넣어야 하는 저수준 객체들 또한 최대한 간단하게 만들어 넣는 방식으로 설계해야 파사드 패턴의 복잡도를 줄일 수 있다
  • 객체의 계층화를 최대한 연관성 있는 개체들끼리 시킴으로써 고수준 객체를 잘 설계할 수 있다

 

 

 

 


참고)

https://gdtbgl93.tistory.com/142

 

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

퍼사드 패턴 (Facade Pattern) = 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수

gdtbgl93.tistory.com

https://flower0.tistory.com/432

 

[디자인패턴] Facade Pattern 퍼사드 패턴

Facade Pattern 퍼사드 패턴 개념 퍼사드 패턴이란 여러 서브 시스템의 작업들을 하나의 인터페이스로 통합하여 제공해주는 것이다. 예시 예를 들어 집에서 영화보는 것에 대해 생각해보자 영화를

flower0.tistory.com

https://kotlinworld.com/372

 

[Design Pattern] 파사드 패턴이란 무엇인가? : Facade Pattern

파사드 패턴이란? 파사드 패턴은 일련의 저수준 인터페이스들을 하나의 고수준 인터페이스로 묶어주는 패턴이다. 클라이언트 객체가 여러 저수준 인터페이스의 동작을 제어 하려면 

kotlinworld.com

https://imasoftwareengineer.tistory.com/29

 

퍼사드 패턴(Façade Pattern)

Facade 패턴은 디자인 패턴중에서도 꽤 많이 사용되는 패턴임에도 불구하고 디자인 패턴을 처음 배우는 입문자들에게는 헷갈리는 개념이다. 그 이유는 Facade 패턴이 가져다 주는 장점이 입문자 입

imasoftwareengineer.tistory.com

 

728x90

댓글