Delegate와 Notification

Jee.e·2022년 3월 13일
0

Delegate

  • 주로 1:1로 이벤트를 전달할 때 많이 사용된다.
  • protocol 을 정의해놓고, 이벤트를 대신 처리할 객체가 채택하여 사용하게 한다. (위임하는 객체를 알 필요 X)
  • 때문에 모니터링을 위한 제 3의 객체가 필요하지 않다.
  • 하지만, 코드량이 많고 다수의 객체에 이벤트를 전달하기 어렵다.



Notification

  • 1:N으로 이벤트를 전달할 때 많이 사용된다.
  • NotificationCenter 라는 싱글턴 객체를 기반으로 이벤트 발생여부를 addObserver 한 객체에게 post 한다.
  • 정보를 브로드캐스트하고, observer들은 수동적으로 정보를 받는다.
  • 코드량이 적고, 다수 객체들에게 이벤트를 동시 전달 할 수 있다.
  • 하지만, post 이후의 정보를 받을 수 없다. (추적의 어려움)
  • 또, observer들이 많아지면 상호작용하는 객체들간의 관계를 파악하기 어려워진다.



✅ 공통점

  • 두 방식 모두 객체가 서로 종속되지 않고 소통이 가능하게 한다.
  • 특정 이벤트 발생 시, 객체에 해당 사항을 전달 → 처리하도록 한다.



✅ 차이점

DelegateNotification
객체 간 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

profile
나는 지이!

0개의 댓글