Unity를 이용해서 개발할 때는 컴포넌트를 분리하는 방법을 찾는 것을 최우선의 목표로 한다.
그러나 Unity는 다양한 API와 인스펙터를 통해 컴포넌트를 직접 참조할 수 있게 한다. 이러한 유연성에는 비용이 필요할 수도 있으며 참조가 누락되어 코드를 취약하게 만든다.
옵저버 패턴은 관찰자들을 관리하며 관찰하는 객체의 상태에 변화가 있을 때마다 각 관찰자에게 통보하는 방식으로 커플링을 느슨하게 만드는 패턴이다.
옵저버 패턴은 Unity의 관용적인 패턴 중 이벤트 버스 패턴과 유사하지만 큰 차이가 있다.
n:m
의 관계를 정의한다.1:n
의 관계를 정의한다.관찰 대상의 상태가 변하는 것을 체크하기 위해 폴링할 필요가 없다.
옵저버 패턴을 사용하지 않는다면 관찰 대상의 상태가 변하는 것을 체크하기 위해 Update()
를 통해서 관찰 대상의 상태를 매번 체크해야만 한다.
관찰 대상의 코드를 변경하지 않고도 관찰자를 추가하거나 삭제할 수 있다.
관찰자가 추가되거나 삭제되는 경우 관찰 대상의 코드를 변경할 필요없이 관찰자를 구독시키거나 구독 취소를 시키면 된다. 이는 SOLID 원칙 중 OCP를 준수한다.