Home
home
🏡 홈
home

Facade pattern in PHP

분류
개발지식
태그
PHP
Design Pattern
작성자
작성일
2024/03/15 01:25
자주 사용되는 디자인패턴중 하나인, 퍼사드 패턴을 소개하고자 합니다.

퍼사드 패턴(facade pattern)

복잡한 시스템이나 서브시스템의 인터페이스에 대한 간략한 인터페이스를 제공하여,
시스템의 복잡성을 감소시키는 패턴입니다.

대략적인 구조

외부사용처 → 퍼사드객체 → 복잡한 내부로직

사용되는 대표적인 사례

1.
복잡한 시스템을 캡슐화하여 간단한 인터페이스로 접근하고 싶을때
2.
외부와의 결합도가 높아서, 의존성을 낮추고 싶을때

예시코드

[코드펼치기]
이 코드는 퍼사드 디자인 패턴을 사용하여 컴퓨터 부팅 과정을 간단하게 시뮬레이션합니다.
코드는 다음과 같은 구성 요소로 이루어져 있습니다
1.
Complex parts: CPU, Memory, HardDrive 클래스가 있습니다. 각 클래스는 컴퓨터의 핵심 부품을 나타냅니다. CPU는 freeze(), jump(), execute() 메서드를 가지고 있고, Memory는 load() 메서드를, HardDrive는 read() 메서드를 가지고 있습니다.
2.
Facade: Computer 클래스가 있습니다. 이 클래스는 복잡한 부분들(CPU, Memory, HardDrive)을 감싸고, 간단한 인터페이스를 제공합니다. startComputer() 메서드는 컴퓨터를 시작하는 메서드로, CPU를 초기화하고, Memory를 로드하며, HardDrive에서 부트 섹터를 읽어와서 CPU가 실행할 수 있도록 합니다.
3.
Client: Client 클래스가 있습니다. 이 클래스는 프로그램의 진입점을 제공합니다. main() 메서드에서는 Computer 클래스의 인스턴스를 생성하고, startComputer() 메서드를 호출하여 컴퓨터를 시작합니다.
즉, 퍼사드 패턴을 사용하여 복잡한 시스템을 단순한 인터페이스로 노출하여 사용자가 간편하게 접근할 수 있도록 합니다.

마무리

의존성주입이나 캡슐화를 어느정도 이해하는 개발자라면
퍼서드 패턴은 별도의 학습없이 자연스럽게 사용되는 패턴이라고 생각한다.
특히, 복잡한 라이브러리를 구현하다 보면, 라이브러리의 복잡한 내부로직과
외부 사용처의 코드를 최소화하고 결합도를 줄이고 싶어진다.
다만 용어를 알아두면 개발자간의 조금 더 유연한 커뮤니케이션이 가능할 것이므로
용어 정도는 알고 넘어가도록 하자.