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
https://flower0.tistory.com/432
https://imasoftwareengineer.tistory.com/29
728x90
'야미스터디 > Design pattern' 카테고리의 다른 글
[디자인 패턴] 프록시 패턴 📌 (0) | 2022.10.05 |
---|---|
[디자인 패턴] 상태 패턴 (State Pattern) 📌 (0) | 2022.08.24 |
[디자인 패턴] 싱글톤 패턴 📌 (0) | 2022.08.21 |
[디자인 패턴] 디자인 패턴이란? (0) | 2022.08.21 |
댓글