Decorator Pattern 무기 시스템 구현 - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki
데커레이터 패턴이란
Decorator Pattern 기존 객체를 변경하지 않고 새로운 기능을 추가하도록 구현
- 원래 클래스를 래핑하는 데커레이터 클래스 생성
- 객체에 새로운 행동을 부여하거나 분리
- IWeapon 인터페이스 데커레이팅 된 객체와 데커레이터 간 일관된 메서드 서명 유지하는 구현 계약 설정
- WeaponDecorator 대상 객체
Weapon
을 래핑Wrapping - 구체적인 데커레이터 클래스(
WithGrip
,WithStabilizer
) 동작 향상시키는 오버라이팅overriding(재정의)
메서드 서명
,데커레이팅 된 객체
의 전체 구조- 프로세스 중에 수정X
- 행동이나 속성 값만 수정
- 객체에서 데커레이션 삭제 후 초기화가 간편
1. 장·단점
- 장점
- 서브클래싱의 대안
- 상속
- 정적인 프로세스
- 런타임에 존재하는 객체의 행동 확장 허용X
- 원하는 동작이 있는 같은 부모 클래스의 인스턴스만 다른 인스턴스로 교체 가능
- 데커레이터 패턴 상속의 한계를 극복하며 동적인 대안
- 상속
- 런타임 다이나믹
- 객체에 데커레이터를 추가하여 런타임 시 기능 추가 가능
- 데커레이터 제거로 객체 원복 가능
- 서브클래싱의 대안
- 단점
- 복잡한 관계 객체 주변에 다양한 데커레이터 존재할 경우, 초기화 체인과 데커레이터 간 관계 추적이 복잡
- 복잡해지는 코드
- 몇 개의 작은 데커레이터 클래스를 유지/관리가 필요한 코드 복잡도↑
- 단점으로 작용하는 시기/이유는 상황에 따라 변동
설정 가능한 Asset으로 저장하는
ScriptableObject
인스턴스로 극복 가능
2. 사용시기
- 부착물이 있는 무기 시스템
- 무기에 다양한 부착물 부착
- 런타임에 추가/삭제 가능
- 개별 객체에 행동 추가/삭제하는 기능의 시스템 구현 시 고려
데커레이터 패턴 구현 예제
1. 구현 UML
2. 구현 시 고려사항
- 모든 오토바이 전면에 레이저 빔을 발사하는 총 장착
- 방해되는 장애물 제거
- 앞바퀴를 드는 컨트롤로 드론 제거
- 구매 가능한 부착물
- 인젝터 플라즈마 인젝터로 무기 데미지 능력 증가
- 안정 장치 오토바이가 최고 속도일 때 발생하는 진동을 줄이는 안정 장치
- 무기 사격 메커니즘 안정화 & 사정거리 증가
- 쿨러 무기 사격 메커니즘에 부착하여 발사 속도 증가 & 쿨다운 감소
- 각 부착물은 무기의 특정 속성을 수정하거나 데커레이팅