NotificationCenter(알림 센터)는 iOS 및 macOS에서 컴포넌트 간의 통신을 쉽게 할 수 있도록 도와주는 기능이다.
이를 통해 한 컴포넌트에서 발생한 이벤트나 데이터 변화를 다른 컴포넌트에게 알릴 수 있다.
NotificationCenter를 사용하면 효율적으로 앱 내부의 상태 변화를 관리하고, 뷰 컨트롤러 간의 데이터 전달 등을 간편하게 처리할 수 있다!
닉네임을 수정하고 이전 화면인 마이페이지로 돌아가면 화면이 갱신되지 않아 수정 전 닉네임이 그대로 보여지는 문제가 발생했고, NotificationCenter를 이용하여 이를 해결하고자 했다.
업데이트를 전달할 때 사용할 고유 알림 이름을 정의해 준다.
extension Notification.Name {
static let dataUpdated = Notification.Name("dataUpdated")
}
업데이트를 수신하고자 하는 화면(또는 컴포넌트)에서 NotificationCenter에 옵저버를 등록해 주고, 알림 이름과 대응하는 처리 메서드를 설정한다. 이때 옵저버 등록하는 코드(addObserver)는 viewDidLoad 내에 작성해 주면 된다.
NotificationCenter.default.addObserver(self, selector: #selector(handleDataUpdate), name: .dataUpdated, object: nil)
@objc func handleDataUpdate() {
// 업데이트를 처리하는 작업을 수행
// 나는 이곳에 회원 정보를 불러와 이름 label에 넣어주는 작업을 수행했다
// 이 메서드는 업데이트 알림이 수신될 때마다 호출
}
데이터를 갱신하거나 업데이트해야 할 때, NotificationCenter에 알림을 보낸다!
NotificationCenter.default.post(name: .dataUpdated, object: nil)
옵저버가 더 이상 필요하지 않을 때는, 반드시 해당 옵저버를 NotificationCenter에서 해제해야 한다. 일반적으로 deinit 메서드 내에서 해제 작업을 수행한다.
deinit {
NotificationCenter.default.removeObserver(self)
}
수정 페이지에서 이름을 수정하고 저장을 누르면 바로 전 화면인 마이페이지로 돌아가게 되고, 수정 후 이름으로 갱신되어 나타난다!