결합(coupling)없이 Controller사이에 동작을 전달하는 방법은 iOS에서 총 3가지 방법이 있습니다.
1. Delegation
2. Notification
3. Key Value observing
delegation의 기본 개념은 Controller의 이벤트에 응답하여 위임자를 정의하는 protocol을 정의해야 한다.
일종의 기능 명세로, 이러한 Delegation의 역할을 하기 위해 protocol에 정의된 메서드나 프로퍼티들을 모두 구현해야 한다.
이렇게 protocol로 정의하게 되면서 어떠한 Controller에 결합되어 있지 않지만, Controller의 동작을 전달할 수 있다.
NotificationCenter라는 싱글턴 객체를 통해 이벤트를 전달한다.
NotificationName을 통해 Controller에서 발생하는 이벤트들을 특정 객체들에게 전달하는 방식이다. Controller에게는 알려지지 않았지만 같은 키로 observer해놓은 객체들은 이를 전달 받는다.
Delegation, Notification 모두 어떤 이벤트를 다른 화면에 전달하는 기능을 가진다.
Delegate패턴은 다른 객체의 인스턴스를 내부적으로 보유하여 그 인스턴스에서 활용하는 방식으로 운용되고, Notification은 어떤 객체를 Observing하여 그 객체의 변화에 따라 Observer들이 이벤트를 받아 처리할 수 있는 방식으로 운용된다.
Delegate는 수신자가 발신자의 정보를 알아야 한다.
즉, Controller가 Delegate변수를 가지고 있어야 하며 해당 프로토콜에 정의된 메서드들을 구현해야 한다.
Notificaiton은 단순히 Observe하여 이벤트가 발생한다면 어디에서 발송되는지 모르는 Post의 이벤트를 받는다.
Notificaiton을 사용하게 되면 어디서 발생된 이벤트를 가져오는지 확인하기 힘들어서 유지보수가 힘들다.
https://neph3779.github.io/ios/DelegateVsNotification/
https://shinesolutions.com/2011/06/14/delegation-notification-and-observation/