클린코드니 솔리드원칙이니 꼭 지켜야 하는건 아니라고 알고있지만


지키려는 시늉을 안하면 스파게티를 볶아버려서 질문하러 왔습니다.




7cee8277b6836bf420afd8b236ef203e659ea1400a5fe8


예시 설명)


 인터페이스를 상속받아 만들어진 [ 곰, 용, 호랑이 ] 변신상태가 있음. (enter, update, exit 활용하는 상태패턴 )

[베이스 컨트롤러 A (모노비헤이비어) ] 를 상속받는 B,C,D 스크립트가 있으며 이는 각각 [ 곰, 용, 호랑이 ] 상태 전용 컨트롤러 스크립트임.


 기존에는 베이스 컨트롤러 A만 플레이어 오브젝트에 붙여넣고

상태에 따라 A스크립트에 "곰, 용, 호랑이 전용 함수를 다 우겨넣어서" 상태패턴에서 그냥 가져와 쓰면 구현은 가능했습니다.

(ATTACK_BEAR, ATTACK_DRAGON 등)


 공용함수인 '기본움직임', '공격', '방어' 등을 가상화 혹은 추상화하여 코드중복을 피하고

곰, 용, 호랑이 스크립트에서 전용 함수로 오버라이드해서 사용하려고 했는데


상태패턴 스크립트는 인터페이스 상속이라 베이스 컨트롤러 A를 상속받는것도 아니고, 베이스 컨트롤러 A의 함수를 재정의 할 수도 없어서 b,c,d를 추가했습니다.




 "구현하고 싶은 것"은 결국 상태패턴에 따라 

B,C,D 중 하나의 컨트롤러 스크립트만 사용하고 싶습니다. (스크립트 A는 오브젝트에 붙인 상태로)




 그런데 위 사진처럼 상속받는 B,C,D 스크립트를 만들어서 3개를 한꺼번에 오브젝트에 붙이고 선택적으로 쓰자니

b,c,d 스크립트의 start, update 등 함수가 한번에 돌아갈거같고


 A만 오브젝트에 붙이고 B,C,D의 start, update 함수 등은 OptionalStart(), OptionalUpdate()로 만든 후, b,c,d 객체를 생성한 다음

A 스크립트의 Update() 안에서 c.OptionalStart(); c.OptionalUpdate(); 이런식으로 처리하는것도 정상적인 접근방식이 아닌거같아서 질문드려요.




 이런 구조일때 어떻게 만들어야 할까요? 알고 계시는 구조나 

공부해야 할 검색 키워드라도 알려주시면 공부해보겠습니다.