Facade Pattern 복잡성 숨기기 - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki
퍼사드 패턴이란
Facade Pattern 시스템의 복잡한 내부 작업을 추상화하여 단순화된 전면 인터페이스 제공
- Facade 복잡한 내부 구조를 숨기는 외부 면
미화beutification
가 아닌단순화simplification
이 목표
- 상호작용하는 서브시스템 모음에 단순화된 인터페이스로 작용하는 단일 클래스로 제한
EngineFacade
엔진 각 구성요소에 대한 인터페이스Client
EngineFacade
의StartEngine()
호출 시 Scene 뒤에서 일어나는 일과 엔진 구성요소 & 도달 방법 모름- 사용 방법만 숙지
- 엔진이 작동하는 것에만 관심
장·단점
- 장점
- 복잡한 코드 본문에 단순화된 인터페이스 제공 복잡한 시스템과 상호작용하는 클라이언트를 위해 단순화된 인터페이스 제공
- 쉬운 리팩토링
- 퍼사드 패턴 뒤 고립된 코드 리팩토링 용이
- 시스템 뒤에서 구성요소가 수정되는 중이라도 인터페이스는 클라이언트와 일관성 유지
- 단점
- 지저분한 코드가 쉽게 숨겨짐
- 리팩토링 수행하는 동안 몇몇 코드를 숨기는 방법 제공
- 제대로 리팩토링할 시간이 없는 경우 나중에 수정하기 어려움
- 너무 많은 퍼사드
- 전역적 접근이 가능한 매니저 클래스에 대한 유니티 개발자 선호도 높음
- 종종
싱글턴 패턴
퍼사드 패턴
을 결합하여 구현 - 너무 많은 매니저 클래스가 각 함수에 의존하는 문제 발생
- 결과적으로
디버깅
리팩토링
단위 테스트
구성이 매우 어려워짐
- 지저분한 코드가 쉽게 숨겨짐
퍼사드 패턴 구현 예제
1. 구현 UML
2. 구현 시 고려사항
- 오토바이 엔진 디자인
- 가스 엔진의 완벽한 시뮬레이션 X
- 엔진의 표준 구성을 최소한으로 시뮬레이션 O
- 엔진 구성요소의 동작 분석
- 냉각 시스템cooling system 엔진 과열 방지
- 터보 차저 활성화 시 냉각 시스템 OFF
- 과도한 터보 차저 사용에 따른 엔진 과열 시, 엔진 정지 or 엔진 폭발로 오토바이 고장
- 연료 펌프fuel pump 연료 소비 관리
- 가스 잔량 확인 & 전량 소모 시 엔진 정지
- 터보 차저turbo charger 활성화 시 오토바이 최고속도가 증가하지만 냉각 시스템 OFF
- 냉각 시스템cooling system 엔진 과열 방지
대안
- 추상 팩토리 패턴abstract factory pattern 클라이언트 코드에서 서스시스템 객체가 초기화되는 방식만 숨기는 경우
- 어댑터 패턴adapter pattern 호환되지 않는 두 인터페이스를 연결하기 위해 기존 클래스에 래퍼wrapper를 작성하는 경우