샘성의 iOS 개발 일지

NotificationCenter 동작 방식과 활용 방안에 대해 설명하시오. 본문

iOS/면접

NotificationCenter 동작 방식과 활용 방안에 대해 설명하시오.

SamusesApple 2023. 6. 7. 22:10
728x90

 

1. NotificationCenter 동작 방식

  Notification에 등록된 이벤트가 발생되면 NotificationCenter에 등록된 Observers 중 해당 Notification을 담당하는 Observer가 해당 되는 이벤트에 대한 액션(#selector로 정의된)을 취하는 방식으로 동작한다. Delegate와는 다르게 등록된 하나의 이벤트에 대해 여러개의 옵저버가 구독할 수 있다.

 

 

2. NotificationCenter 활용 방안

  이벤트 발생 시, 이를 알릴 수 있고 관심이 있는 객체들은 해당 이벤트를 구독하여 처리할 수 있다. (하나의 이벤트를 여러개의 객체가 구독할 수 있음)

 

  사용자가 로그인할 때마다 "로그인 완료"라는 이벤트를 발생시키고, 다른 객체들은 이 이벤트를 받아서 로그인 완료 후의 작업을 처리해야 한다고 가정한다면,

  1. 이벤트 발생: 로그인이 완료되면, 이벤트를 발생시킴. 이를 위해 NotificationCenter에 "로그인 완료"라는 이름의 이벤트를 발송자로 등록한다.

  2. 이벤트 수신: 로그인 상태를 알아야 하는 객체들은 NotificationCenter에 자신을 등록하여 "로그인 완료" 이벤트를 구독. 이렇게 등록된 객체들은 이벤트가 발생하면 자동으로 알림을 받게 된다.

  3. 이벤트 처리: 이벤트를 받은 객체들은 해당 이벤트에 대한 처리를 수행. 예를 들어, 사용자 정보를 업데이트하거나 화면을 갱신하는 등의 작업을 할 수 있다.

 

3. NotificationCenter 사용 시 주의점

  • 일대다 통신이기 때문에 하나의 이벤트에 대해 여러개의 옵저버가 중복사용 될 수 있으므로 생기는 메모리 관리 주의점
    -  더이상 구독하지 않아도 되는 이벤트에 대해 ViewWillDisappear, ViewDidDisapper 등의 View의 생명주기에 사용되는 함수를 활용하여 옵저버를 제거해야한다.
    -  반대로, 같은 객체가 하나의 이벤트에 대한 중복 구독 및 중복 구독 해제 되는 것 주의 또한 필요.

    - 여러 쓰레드에서 동시에 이벤트를 발생시키고 받을 수 있기에, Thread-Safe 하지 않다. 여러개의 객체가 NotificationCenter 내부상태에 동시에 접근하는 경우 충돌 발생 가능성이 있음.

  • 수신자(구독자)와 송신자의 위치를 찾는 것이 쉽지 않음.
    - 앱 내 아무데서나 특정 이벤트가 생기면, 해당 이벤트를 구독한 Observer들에 구현된 #selector 함수를 실행하는 방식이기 때문에, 앱 내 어디서 해당 이벤트가 생겼는지 찾기 힘든 경우가 있으므로 주의 필요.
728x90