https://www.youtube.com/watch?v=Sq6LAJ9tqBY&list=PL412Ym60h6uufFJlxsKcYkOtRu-PIsLuA&index=3
🤖 옵저버 패턴 개요
![](https://blog.kakaocdn.net/dn/q0J7i/btsMak4YTlw/1BZm3yJIBYpaqf5TeH7PNk/img.jpg)
-
옵저버 패턴은 특정 대상(서브젝트)을 주시하고, 그 대상에서 이벤트가 발생하면 여러 옵저버가 반응하는 구조이다.
-
버튼을 서브젝트로 하고, 파티클, 오디오 등 다양한 옵저버들이 존재하여 서로에게 신호를 전달하고 반응하게 된다.
-
옵저버들은 서브젝트에 등록하여 자신의 역할을 수행하며, 이러한 구조는 확장성과 유지보수에 용이하다.
🎮 옵저버 패턴과 델리게이트의 연관성
-
옵저버 패턴은 간단한 언어로 쉽게 구현할 수 있으며, 시합과 같은 시스템에서 자연스럽게 사용된다.
-
델리게이트는 대리자로서 함수를 대신해주는 개념으로, 함수 포인터를 사용하는 것과 유사하다.
-
델리게이트를 사용하면 여러 함수를 담는 변수처럼 활용할 수 있으며, 이를 통해 함수 호출 및 추가적인 연산이 가능하다.
-
멀티캐스트 델리게이트는 여러 개의 함수를 담아 동시 호출할 수 있는 방식으로, 편리한 사용법과 효율성을 제공한다.
-
델리게이트는 서로 다른 클래스 간의 콜백 등록에 유용하며, 특히 유니티 게임 개발에서 많이 사용된다.
🎮 옵저버 패턴과 이벤트 시스템
![](https://blog.kakaocdn.net/dn/cq9TJ6/btsL8LC5bwy/wWBPDtNptHM9hb29awWEXk/img.jpg)
-
델리게이트는 이벤트를 정의할 때 사용되며, 클래스 외부에서 접근하지 못하도록 캡슐화하는 역할을 한다.
-
이벤트는 델리게이트를 기반으로 하며, 호출 과정에서 직접 호출이 불가능한 방식으로 구현된다.
-
C#의 이벤트 액션 기능은 사용하기 간편하며, 다양한 상황에서 활용될 수 있다.
-
옵저버 패턴을 활용하면, 버튼 클릭과 같은 이벤트를 텔레포트 스크립트와 결합하여 결합성을 낮추고 유지보수를 쉽게 한다.
-
이벤트 매니저와 연결된 옵저버는 상황이 발생할 때만 실행되며, 이는 훨씬 효율적이고 간단한 구조를 만들어준다.
🔍 옵저버 패턴의 이해와 활용
-
옵저버 패턴은 서브젝트가 해준 클릭 이벤트를 기반으로 다른 객체들이 반응할 수 있게 해준다. 클릭 시 마우스 위치를 체크하여 버튼 클릭 여부를 판단한다.
-
오디오 옵저버는 서브젝트가 자신의 함수를 등록하여, 클릭 이벤트 발생 시 사운드를 출력하는 등의 기능을 수행한다.
-
옵저버 패턴은 느슨한 결합과 재사용성, 확장성을 제공하므로 UI 기반 이벤트 시스템에서 주로 사용된다.
-
네트워크 연결 상태 변화 시에도 옵저버 패턴이 유용하게 활용되며, 데이터 변경 사항을 실시간으로 관리할 수 있다.
-
유니티에서는 유니티 액션과 유니티 이벤트를 사용하여 옵저버 패턴을 쉽게 구현할 수 있으며, 프로그래머가 아닌 사용자도 손쉽게 사용할 수 있도록 설계되어 있다.
⚠️ 옵저버 패턴의 복잡성과 위험성
-
옵저버 패턴은 여러 개의 객체가 상호작용하는 구조를 가지며, 이로 인해 시스템의 복잡성이 증가한다.
-
등록된 옵저버들이 호출 순서와 관계없이 동작하기 때문에, 예측 불가능한 행동이 발생할 수 있다.
-
옵저버의 등록 해제를 실수로 잊으면 메모리 누수가 발생할 위험이 있다.
-
많은 옵저버가 등록된 경우, 그 수에 따라 성능 저하와 디버깅의 어려움이 생길 수 있다.
-
순환 참조가 발생할 경우 무한 루프에 빠질 수 있으며, 이는 설계 시 주의가 필요하다는 점에서 큰 단점으로 작용한다.