⚡퍼사드 패턴이란?
퍼사드 패턴(Facade Pattern)은 복잡한 시스템 내부에 있는 다양한 모듈과 서브시스템들을 단순한 인터페이스로 대체하여 외부에서 시스템과의 상호작용을 단순화하고자 하는 디자인 패턴이다.
즉, 복잡한 시스템 구조를 가진 클래스, 라이브러리, 프레임워크 등을 사용하는 클라이언트가 시스템의 구현 내용을 몰라도 쉽게 사용할 수 있도록 하는 패턴이다. 이를 위해 시스템 내부의 다양한 모듈과 서브시스템들을 단순한 인터페이스로 제공하고 이를 사용하여 클라이언트가 시스템과 상호작용할 수 있도록 한다.
퍼사드 패턴의 기본 구조
- Facade : 복잡한 서브시스템을 단순하게 제공하기 위한 인터페이스를 제공한다. 클라이언트는 이 인터페이스를 통해 서브시스템에 접근할 수 있다.
- Subsystem Classes : 서브 시스템을 구성하는 클래스이다. 이 클래스들은 Facade에 의해 제공되는 인터페이스를 구현한다.
- Client : Facade를 이용하여 서브시스템에 접근한다. 클라이언트는 Facade를 통해서만 서브시스템에 접근하며 서브시스템의 내부 구조를 알 필요가 없다.
⚡퍼사드 패턴은 어떤 경우에 사용하는가 ?
- 복잡한 시스템의 간단한 인터페이스가 필요한 경우: 퍼사드 패턴은 시스템의 복잡성을 감추고 단순한 인터페이스를 제공함으로써 시스템을 잘 몰라도 사용 가능 하도록 도와준다.
- 시스템의 결합도를 줄이고 유연성을 높이는 경우: 시스템이 서로 강하게 결합되어 있는 경우 변경이 발생하면 시스템 전체에 영향을 미치는 경우가 있다. 이를 방지하기 위해 퍼사드 패턴을 사용하여 시스템의 각 구성 요소를 분리하고 결합도를 낮추고 유연성을 높일 수 있다.
- 서브 시스템을 노출하지 않고 사용자 인터페이스를 제공하는 경우: 서브 시스템을 직접 노출하지 않고 대신 단순한 인터페이스를 제공함으로써 사용자가 서브 시스템을 직접 조작하지 않도록 한다.
- 라이브러리나 프레임워크에서 일관된 인터페이스를 제공하는 경우: 라이브러리나 프레임워크를 사용하는 경우 일반적으로 많은 수의 클래스와 메소드를 사용해야 한다. 이를 단순화하고 일관된 인터페이스를 제공하기 위해 퍼사드 패턴을 사용할 수 있다.
개발에서 사용중인 퍼사드 패턴의 예시로 웹 개발에서 프론트엔드와 백엔드 간의 인터페이스를 간단하게 만들어주는 것을 예로 들수 있다. 프론트엔드 개발자는 백엔드 개발자가 작성한 코드를 모르더라도 프론트엔드에서 필요한 인터페이스만을 통해 간단하게 데이터를 전송하고 받을 수 있게 된다.
⚡퍼사드 패턴의 장단점
장점
클라이언트와 서브시스템 사이의 결합도를 낮출 수 있다. 클라이언트는 서브시스템 대신 퍼사드를 사용하여 요청을 처리하므로 서브시스템의 내부 구현이 변경되어도 클라이언트의 코드를 수정할 필요가 없다.
복잡한 시스템을 단순화할 수 있다. 퍼사드는 서브시스템의 복잡한 인터페이스를 간단하게 추상화하여 제공하므로 클라이언트는 더 이상 서브시스템의 복잡한 내부 동작을 신경쓸 필요가 없다.
서브시스템에 대한 보호 기능을 제공할 수 있다. 퍼사드를 사용하여 클라이언트가 서브시스템의 일부에만 접근할 수 있도록 제한하거나 클라이언트의 요청에 대해 보안 검사를 수행할 수 있다.
단점
서브시스템의 모든 기능을 제공하는 범용적인 퍼사드 클래스를 만들면 해당 퍼사드 클래스의 크기가 커질 수 있다. 이러한 경우 클라이언트가 필요하지 않은 기능까지 모두 포함되어 있어 메모리를 낭비할 수도 있다.
서브시스템을 수정해야 하는 경우 해당 서브시스템과 관련된 모든 퍼사드 클래스를 수정해야 한다.
⚡퍼사드 소스 정리
⚡생각
퍼사드 패턴을 사용하면 일련의 복잡한 작업을 한번에 처리할 수 있어서 코드의 가독성과 유지보수성이 좋아진다. 하지만 모든 디자인 패턴이 그렇듯이 어디서 사용하느냐에 대한 정답은 없다. 작업하는 클래스의 개발 이후의 유지보수를 할때 변경 가능성에 대해서 생각해보고 사용하자.!
'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 프록시 패턴에 대한 내용 정리 (0) | 2023.04.10 |
---|---|
[디자인 패턴] 플라이웨이트 패턴에 대한 내용 정리 (0) | 2023.04.07 |
[디자인 패턴] 데코레이터 패턴에 대한 내용 정리 (0) | 2023.03.28 |
[디자인 패턴] 복합체 패턴에 대한 내용 정리 (0) | 2023.03.26 |
[디자인 패턴] 브리지 패턴에 대한 내용 정리 (0) | 2023.03.25 |