728x90
1. 퍼사드 패턴(Facade Pattern)이란?
퍼사드 패턴은 복잡한 서브시스템의 인터페이스를 단순화하여 사용자가 쉽게 접근할 수 있는 상위 수준의 인터페이스를 제공하는 디자인 패턴입니다. 이는 객체 지향 프로그래밍에서 사용되는 구조적 디자인 패턴(Structural Design Pattern) 중 하나입니다.
퍼사드(Facade)는 '건물의 정면' 또는 '겉모습'을 의미하며, 이 패턴은 복잡한 내부 시스템을 숨기고 사용자에게 간단한 인터페이스를 제공하는 데 중점을 둡니다.
2. 퍼사드 패턴의 특징
- 단순화된 인터페이스 제공
복잡한 시스템의 기능을 감싸는 간단한 API나 클래스가 제공됩니다. - 서브시스템 독립성 유지
클라이언트는 서브시스템의 세부 사항을 알 필요 없이 퍼사드를 통해 간접적으로 접근합니다. - 코드 유지보수성 향상
복잡한 코드를 퍼사드 뒤에 숨김으로써 시스템의 수정과 확장이 용이해집니다.
3. 퍼사드 패턴의 장단점
장점:
- 단순화된 코드: 클라이언트 코드가 서브시스템의 복잡성에서 해방됩니다.
- 모듈성 증가: 서브시스템이 변경되어도 퍼사드만 수정하면 클라이언트에 영향을 미치지 않습니다.
- 가독성 향상: 간결하고 명확한 상위 수준의 인터페이스로 코드 이해도가 높아집니다.
단점:
- 추가 클래스 필요: 퍼사드 클래스를 추가로 작성해야 하므로 초기 개발 작업량이 증가할 수 있습니다.
- 확장성 제한 가능성: 퍼사드가 과도하게 많은 기능을 처리하면, 오히려 유지보수가 어려워질 수 있습니다.
4. 퍼사드 패턴의 활용 사례
- GUI 라이브러리
복잡한 그래픽 렌더링 작업을 단순화한 API를 제공하여 개발자가 쉽게 사용할 수 있도록 합니다. - 데이터베이스 연결
데이터베이스 접근을 간단한 CRUD 메서드로 감싸는 데이터 접근 계층(Data Access Layer)에서 활용됩니다. - 멀티미디어 애플리케이션
오디오, 비디오, 네트워크 스트리밍 등 복잡한 처리를 단순화한 인터페이스 제공.
5. 퍼사드 패턴 구현 예제 (Python)
예제: 홈 시어터 시스템
# 서브시스템 클래스 정의
class Amplifier:
def turn_on(self):
print("Amplifier: 전원이 켜졌습니다.")
def set_volume(self, level):
print(f"Amplifier: 볼륨이 {level}로 설정되었습니다.")
class DVDPlayer:
def play(self, movie):
print(f"DVDPlayer: '{movie}' 재생 중입니다.")
def stop(self):
print("DVDPlayer: 정지되었습니다.")
class Projector:
def turn_on(self):
print("Projector: 전원이 켜졌습니다.")
def set_mode(self, mode):
print(f"Projector: '{mode}' 모드로 설정되었습니다.")
# 퍼사드 클래스 정의
class HomeTheaterFacade:
def __init__(self, amplifier, dvd_player, projector):
self.amplifier = amplifier
self.dvd_player = dvd_player
self.projector = projector
def watch_movie(self, movie):
print("\n--- 영화 감상 모드 시작 ---")
self.amplifier.turn_on()
self.amplifier.set_volume(5)
self.projector.turn_on()
self.projector.set_mode("와이드 스크린")
self.dvd_player.play(movie)
def end_movie(self):
print("\n--- 영화 감상 모드 종료 ---")
self.dvd_player.stop()
# 클라이언트 코드
if __name__ == "__main__":
# 서브시스템 객체 생성
amp = Amplifier()
dvd = DVDPlayer()
proj = Projector()
# 퍼사드 객체 생성
home_theater = HomeTheaterFacade(amp, dvd, proj)
# 간단한 인터페이스로 복잡한 작업 수행
home_theater.watch_movie("어벤져스: 엔드게임")
home_theater.end_movie()
실행 결과:
--- 영화 감상 모드 시작 ---
Amplifier: 전원이 켜졌습니다.
Amplifier: 볼륨이 5로 설정되었습니다.
Projector: 전원이 켜졌습니다.
Projector: '와이드 스크린' 모드로 설정되었습니다.
DVDPlayer: '어벤져스: 엔드게임' 재생 중입니다.
--- 영화 감상 모드 종료 ---
DVDPlayer: 정지되었습니다.
6. 퍼사드 패턴과 관련된 확장
- Adapter 패턴: 기존 클래스의 인터페이스를 변경하여 호환성을 제공합니다.
- Decorator 패턴: 객체에 새로운 기능을 동적으로 추가합니다.
- Mediator 패턴: 객체 간의 복잡한 통신을 중앙에서 조정합니다.
728x90
'프로그래밍공부(Programming Study)' 카테고리의 다른 글
지오 해싱(Geohashing), QuadTree, H3: 위치 데이터의 효율적 관리와 활용 (1) | 2024.12.03 |
---|---|
Kernel에서 시스템 콜이란? DevOps Engineer가 꼭 알아야 할 시스템 콜 정리 (4) | 2024.09.21 |
SOLID 원칙과 파이썬 예제 (0) | 2024.09.08 |
윈도우즈 액티브 디렉토리와 LDAP: 개념, 특징, 그리고 활용 사례 (0) | 2024.08.29 |
Java, Python, TypeScript, Go 언어 preprod, prod환경 Assertion 활용 방법 (0) | 2024.08.28 |
댓글