[TIL] NotificationCenter

Eden·2025년 9월 5일

iOS 개발을 하다 보면 객체 간의 소통이 필요할 때가 많습니다.
NotificationCenter는 이런 상황에서 유용하게 사용할 수 있는 이벤트 방송(Broadcast) 시스템입니다.


NotificationCenter란?

  • 하나의 객체에서 이벤트(알림)를 보낼 수 있고,
  • 여러 객체가 그 이벤트를 동시에 받을 수 있는 구조입니다.
  • 즉, 1:N 통신을 가능하게 합니다.

기본 개념

  1. Post (알림 보내기)

    • 특정 이벤트가 발생했음을 알립니다.
  2. Add Observer (알림 받기 등록)

    • 관심 있는 객체가 이벤트를 수신할 수 있도록 옵저버를 등록합니다.
  3. Remove Observer (옵저버 제거)

    • 더 이상 이벤트를 받을 필요가 없을 때 옵저버를 해제합니다.

사용 예시

1. 알림 이름 정의

extension Notification.Name {
    static let didReceiveData = Notification.Name("didReceiveData")
}

2. 알림 보내기 (Post)

NotificationCenter.default.post(
    name: .didReceiveData,
    object: nil,
    userInfo: ["data": "Hello"]
)

3. 알림 받기 (Observer 등록)

NotificationCenter.default.addObserver(
    self,
    selector: #selector(handleData(_:)),
    name: .didReceiveData,
    object: nil
)

@objc private func handleData(_ notification: Notification) {
    if let data = notification.userInfo?["data"] as? String {
        print("받은 데이터: \(data)")
    }
}

4. 옵저버 제거

deinit {
    NotificationCenter.default.removeObserver(self)
}

언제 쓰면 좋을까?

  • 뷰 컨트롤러 간 데이터 전달이 필요할 때
  • 앱 전체에서 공통적으로 발생하는 이벤트를 알릴 때
    (예: 네트워크 연결 상태 변경, 로그인/로그아웃 알림 등)

정리

  • NotificationCenter느슨한 결합(Loose Coupling) 을 가능하게 합니다.
  • 직접 참조하지 않고도 이벤트를 전달할 수 있어 코드 구조가 깔끔해집니다.
  • 하지만 남발하면 관리가 어려워질 수 있으므로 꼭 필요한 곳에만 사용하는 것이 좋습니다.
profile
iOS Dev

0개의 댓글