Apple 공식 문서에 따르면 NotificationCenter란 등록된 observer에게 정보를 전송할 수 있게 해주는 notification(알림) 전송 방법이라고 한다.
NotificationCenter는 Delegate Pattern과 함께 어플리케이션 내에서 객체가 서로 상호작용할 수 있는 방법 중 하나이다.
NotificationCenter의 동작 방식
특정 객체가 NotificationCenter에 등록된 Event를 발생시키면, NotificationCennter에 등록된 Observer들 중 해당 Event를 담당 중인 Observer가 그 Event에 대한 행동을 취하는 것(#selector)이 NotificationCenter가 동작하는 방식이다.
어떻게 활용할 수 있을까?
동작방식에서 알 수 있듯이 특정 Event의 실행을 감지할 수 있기 때문에, 특정 Event의 실행에 따라 동작해야하는 것 또는 동시적으로 여러 View에서 동작해야하는 것 등을 처리할 때에 활용할 수 있다.
실제로 해보기
참고했던 이동건님의 블로그에 쉽게 이해할 수 있는 예제가 나와 있어서 따라해보았다.
POST라는 버튼을 누르면 파란색 박스는 주황색으로, 차콜색은 초록색으로 변하는 예제입니다.
POST
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "PostButton"),object: nil)
- POST라는 버튼을 누르면 NotificationCenter에 PostButton이라는 Event 등록하고 이를 발생시킨다.
- object: 매개변수를 통해 Event를 발생시킬 때 특정 객체를 같이 넘길 수 있는데, 현재는 아무것도 넘기지 않을 것이기 때문에 nil 이다.
Observer
NotificationCenter.default.addObserver(self,
selector: #selector(changThirdColor),
name: NSNotification.Name(rawValue: "PostButton"),
object: nil)
- 위의 두 뷰에서는 PostButton이라는 Event가 발생할 때 이를 캐치하고 어떤 행동을 취하는 Observer를 Add해준다.
- Observer가 취하는 행동은 #selector에 지정해준 changeSecondColor,changeThirdColor 메서드이다.
- changeSecondColor는 박스의 색을 orange로 변경.
- changeThirdColor는 박스의 색을 green으로 변경.
Result
도움을 준 좋은 블로그