// 지연 초기화 코루틴
private IEnumerator DelayedInitialization()
{
// statController가 null이 아니고, 초기화가 완료될 때까지 대기
yield return new WaitUntil(() => statController != null && statController.GetIsInitialized());
// 이벤트 구독 및 초기화 처리
statController.Initialized += OnStatControllerInitialized;
statController.WillUninitialize += OnStatControllerWillUninitialize;
// 이미 초기화된 상태라면 초기화 이벤트를 수동으로 호출
if (statController.GetIsInitialized())
{
OnStatControllerInitialized();
}
}
70점짜리 코드에서 90점으로 만들었다
꽤 많은 기능이 엮여있던 엔터티 인터페이스를 세분화해서 ITargetable로 분리한 후,
모듈 초기화 문제에 각각 지연초기화를 도입했다
오늘도 보람찼다
다만 현재 원래부터 컴포지션 패턴을 고려하고 설계한 것이라, 기본적으로 모듈에서 DI를 하게 바꿨지만
역할을 세분화한 모듈 파츠들이 컴포지션 패턴을 베이스로 한지라, 완전한 리팩토링은 아니지만
이이상 작업은 너무 비효율적이다고 판단 일관성이 떨어지지만 모듈단까지만 적용하는 걸로
구조체를 만들어서 이벤트 입력을 제한하는 식으로 처음에 설계했고, 이는 불변성 보장을 했지만, 장단기적으로 확장성에서는 별로인 느낌이다.
코드의 안전성을 기반으로 할거면 구조체를 만든 후, 이벤트 정의와 호출을 해야했지만
종합적으로 봤을때 안전성이 떨어지는 델리게이트가 확장성과 수정이 편했던 느낌
댓글 0