NotificationCenter
NotificationCenter란?

등록된 관찰자에게 정보를 브로드캐스트할 수 있도록 하는 알림 디스패치 메커니즘입니다.
쉽게 말해 NotificationCenter는 객체로부터 어떤 이벤트를 받아 자신에게 등록된 객체들에게 알림을 보내주는 객체이다. NotificationCenter는 싱글톤으로 구성되어 있어 사용자가 인스턴스를 만들지 않고 NotificationCenter를 부를 수 있다.
아래는 예제를 살펴보기 전에 먼저 알아둬야하는 내용이다.
- NotificationCenter에 자신의 정보를 등록하여 알림을 받고자 하는 객체를 Observer라고 한다.
- 객체가 NotificationCenter로 이벤트를 보내는 행위를 Post라 한다.
- NotificationCenter는 싱글톤이기 때문에 이벤트를 여러개 만들기 위해서는 식별자가 필요한데 이를 NotificationName로 관리한다.
예제 살펴보기
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func clickBtnPost(_ sender: Any) {
NotificationCenter.default.post(
name: NSNotification.Name(rawValue: "Post"),
object: nil)
}
}
버튼을 누르면 Post라는 이름의 이벤트를 NotificationCenter에 보내는 코드이다.
해당 이벤트를 받을 Observer를 생성해보자.
class ObserverViewController: UIViewController {
@IBOutlet weak var hiddenLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self,
selector: #selector(showLabel),
name: NSNotification.Name(rawValue: "Post"),
object: nil)
}
@objc func showLabel(){
hiddenLabel.layer.isHidden = false
}
}
Post라는 이벤트가 날라오면 Hidden으로 설정한 UILabel이 false가 되는 showLabel 함수를 실행하는 Observer이다.
이처럼 NotificationCenter는 객체 간의 통신을 더 쉽게 도와주는 클래스이다.
엄청 간단한 예제를 통해 어느정도 이해한 것 같지만 훨씬 다양한 상황에 사용할 수 있는 것 같다. 기회가 된다면 여러 상황에 맞는 예제를 다뤄보고싶다.
참고자료