Facade Pattern 복잡성 숨기기 - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki

퍼사드 패턴이란

Facade Pattern 시스템의 복잡한 내부 작업을 추상화하여 단순화된 전면 인터페이스 제공

  • Facade 복잡한 내부 구조를 숨기는 외부 면
    • 미화beutification가 아닌 단순화simplification이 목표
  • 상호작용하는 서브시스템 모음에 단순화된 인터페이스로 작용하는 단일 클래스로 제한
    image
    • EngineFacade 엔진 각 구성요소에 대한 인터페이스
    • Client EngineFacadeStartEngine() 호출 시 Scene 뒤에서 일어나는 일과 엔진 구성요소 & 도달 방법 모름
      • 사용 방법만 숙지
      • 엔진이 작동하는 것에만 관심

장·단점

  • 장점
    • 복잡한 코드 본문에 단순화된 인터페이스 제공 복잡한 시스템과 상호작용하는 클라이언트를 위해 단순화된 인터페이스 제공
    • 쉬운 리팩토링
      • 퍼사드 패턴 뒤 고립된 코드 리팩토링 용이
      • 시스템 뒤에서 구성요소가 수정되는 중이라도 인터페이스는 클라이언트와 일관성 유지
  • 단점
    • 지저분한 코드가 쉽게 숨겨짐
      • 리팩토링 수행하는 동안 몇몇 코드를 숨기는 방법 제공
      • 제대로 리팩토링할 시간이 없는 경우 나중에 수정하기 어려움
    • 너무 많은 퍼사드
      • 전역적 접근이 가능한 매니저 클래스에 대한 유니티 개발자 선호도 높음
      • 종종 싱글턴 패턴 퍼사드 패턴을 결합하여 구현
      • 너무 많은 매니저 클래스가 각 함수에 의존하는 문제 발생
      • 결과적으로 디버깅 리팩토링 단위 테스트 구성이 매우 어려워짐

퍼사드 패턴 구현 예제

1. 구현 UML

image

2. 구현 시 고려사항

  • 오토바이 엔진 디자인
    • 가스 엔진의 완벽한 시뮬레이션 X
    • 엔진의 표준 구성을 최소한으로 시뮬레이션 O
  • 엔진 구성요소의 동작 분석
    • 냉각 시스템cooling system 엔진 과열 방지
      • 터보 차저 활성화 시 냉각 시스템 OFF
      • 과도한 터보 차저 사용에 따른 엔진 과열 시, 엔진 정지 or 엔진 폭발로 오토바이 고장
    • 연료 펌프fuel pump 연료 소비 관리
      • 가스 잔량 확인 & 전량 소모 시 엔진 정지
    • 터보 차저turbo charger 활성화 시 오토바이 최고속도가 증가하지만 냉각 시스템 OFF

대안

  • 추상 팩토리 패턴abstract factory pattern 클라이언트 코드에서 서스시스템 객체가 초기화되는 방식만 숨기는 경우
  • 어댑터 패턴adapter pattern 호환되지 않는 두 인터페이스를 연결하기 위해 기존 클래스에 래퍼wrapper를 작성하는 경우