- 주로 1:1로 이벤트를 전달할 때 많이 사용된다.
protocol
을 정의해놓고, 이벤트를 대신 처리할 객체가 채택하여 사용하게 한다. (위임하는 객체를 알 필요 X)- 때문에 모니터링을 위한 제 3의 객체가 필요하지 않다.
- 하지만, 코드량이 많고 다수의 객체에 이벤트를 전달하기 어렵다.
- 1:N으로 이벤트를 전달할 때 많이 사용된다.
NotificationCenter
라는 싱글턴 객체를 기반으로 이벤트 발생여부를addObserver
한 객체에게 post 한다.- 정보를 브로드캐스트하고, observer들은 수동적으로 정보를 받는다.
- 코드량이 적고, 다수 객체들에게 이벤트를 동시 전달 할 수 있다.
- 하지만, post 이후의 정보를 받을 수 없다. (추적의 어려움)
- 또, observer들이 많아지면 상호작용하는 객체들간의 관계를 파악하기 어려워진다.
Delegate | Notification |
---|---|
객체 간 1:1 관계 | 객체 간 1:N 관계 |
제 3의 객체 필요 없음 | 제 3의 객체 필요 있음 |
protocol을 통해 대신 메소드를 사용 | 객체가 원할 때 특정 메소드 사용 불가 |
주로 MVC 패턴 작업 시, View와 ViewController 사이 혹은 프레임워크 작업 시 사용자들에게 프로토콜로 메소드를 사용할 수 있도록 하기 위해 사용 | 특정 이벤트가 여러 객체에 전달되어야 할 때 주로 사용 |
이름, 프로토콜의 메서드 등을 통해 어떤 과정에 의해 이벤트 처리 로직이 돌아가는지 파악할 수 있다. | Notification을 누가 Subscribe하고 있는지 알기가 어렵다. |
수신자가 발신자의 정보를 알고 있어야한다. | 정보 필요 없이, 이벤트를 발생시켜주기만 하면 된다. |
참고문서
1. https://devejs.github.io/ios/2020/09/23/notification_delegation.html
2. https://github.com/lunchScreen/Interview_Questions/issues/59