KVO, Notification, delegate 단방향/양방향, 프로퍼티 값 전달
KVO | NotificationCenter | Delegate | Singleton | |
---|---|---|---|---|
사용목적 | 객체의 속성 변화를 감지하고 관찰하기 위해 사용 | 여러 객체 간의 이벤트 통지 및 통신을 위해 사용 | - 객체 간의 상호작용과 데이터 전달을 위해 사용 - Delegate 패턴은 한 객체가 다른 객체로부터 이벤트나 데이터를 받아 처리하는 단방향 통신을 위한 메커니즘 | 전역적으로 접근 가능한 단일 인스턴스를 생성하여 공유 리소스 관리 또는 상태 유지를 위해 사용 |
장점 | 객체의 속성 변화를 감지하여 상태 변화에 따른 적절한 대응이 가능 | 객체 간의 느슨한 결합을 가능하게 하며, 이벤트 기반 통신이 가능 | 객체 간의 인터페이스를 정의하여 상호작용이 가능하며, 콜백 메서드를 통한 데이터 전달이 가능 | 전역적인 접근, 중앙화된 리소스 관리, 객체 생성 및 초기화 제어 등을 제공 |
단점 | 객체 간의 결합도가 높아질 수 있으며, 코드의 가독성이 감소 | 모든 객체가 등록된 이벤트를 수신하므로, 성능 저하 및 의도하지 않은 이벤트 처리 문제가 발생 | 한 객체가 다른 객체로부터 이벤트나 데이터를 받아 처리하는 단방향 통신을 위한 메커니즘이기 때문에 양방향 통신이 필요한 경우에는 Delegate를 사용하여 각각의 객체에서 서로에게 정보를 주고받는 양방향 통신을 구현할 수는 있지만 적합하지 않을 수 있다 | 의존성과 테스트 문제가 발생할 수 있으며, 남용 시 코드의 복잡성과 유지보수성을 저하시킴 |