본문 바로가기
프로그래밍_

iOS 개발 NotificationCenter 사용법, 데이터전달

by Mocca_ 2023. 2. 3.

IOS에서는 이벤트를 구독하여 원하는 상황에 따라 이벤트를 받는 NotificationCenter라는 것이 있습니다. 다른 뷰에 업데이트를 편하게 할 때나 데이터를 전달할 때 사용합니다. 오늘은 이것에 대해서 정리해보겠습니다.


[목차]

  1. IOS NotificationCenter란?
  2. IOS NotificationCenter 언제 사용하는지?
  3. IOS NotficationCenter 사용법

반응형

 

 

 

1. IOS NotificationCenter란?

 

NotificationCenter란 등록된 Observer의 정보를 다른 뷰에 전송할 수 있게끔 알려주는 메커니즘 클래스입니다. 쉽게 말해서 Apple에 내장되어 있는 Observer Pattern이라고도 할 수 있습니다. Observer Pattern은 어떤 객체 상태가 변할 때 그와 연관된 객체들에게 알림을 보낸다는 것인데 IOS Notification은 Observer Pattern처럼 사용하라고 만들어졌습니다.

NotificationCenter
NotificationCenter란?

addObserver 메소드를 통해서 Observer를 등록할 수 있으며 Observer는 내가 원하는 특정 상황일 때까지 대기하고 있다가 알려줍니다.(전파)

 

userInfo라는 Hash를 통해서 데이터를 전달할 수 있습니다. 

 

 

 

2. IOS NotificationCenter 언제 사용하는지?

 

이것을 언제사용하는지도 궁금한데요. 저희 프로젝트 같은 경우에 사용한 예가 많았습니다. 

 

- 스크롤링하거나 수정할 때 키보드를 숨김

- 스크롤링하거나 수정할 때 키보드를 보임

- 쪽지나 채팅이 왔을 때 뱃지를 추가

- 유저의 상태를 바꿨을 때 상태표시창에 전파

- 로그인되었는지 다른 뷰에 처리

- 푸시를 받았으면 전파

 

이것 말고도 많습니다. 원하는 상황에서 전파하길 원하면 바로 커스터마이징해서 사용할 수 있습니다. 이제 사용법에 대해서 알아보겠습니다. 

 

3. IOS NotificationCenter 사용법

 

우선 소개에서 했던 말과 같이 특정한 상황을 계속 지켜보고 있는 Observer가 필요합니다. 이 Observer는 특정한 상황이 벌어지는지 벌어지지 않는지 판단하는데요. 특정한 상황이 벌어진다면 이 Observer가 행동개시할 이벤트에게 전파해줍니다. 

 

우선 NotificationCenter에서 Observer를 추가해보겠습니다. 

        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name:UIWindow.keyboardWillShowNotification, object: nil)

 

addObserver는 Observer를 추가하는 것입니다. 

 

func addObserver( _ observer: Any, selector aSelcetor: Selector, name aName: NSNotification.Name?,object anObject: Any?)

 

함수에 대한 설명은 이렇습니다. 이벤트를 발생시킬 특정 상황에 addObserver를 넣고 selector를 통해서 이벤트를 넣어줍니다. 위의 상황은 '처음 프로그램이 초기화되었을 때, 키보드를 보여준다.'는 코드입니다. 

 

 @objc func keyboardWillShow(_ notification:NSNotification){
        //give room at the bottom of the scroll view, so it doesn't cover up anything the user needs to tap
        let userInfo = notification.userInfo!
        ....

name은 NotificationCenter를 통해서 이름을 정해줌으로써 해당 이름으로도 이벤트상황을 지정하는 것입니다. 요새는 별로 사용하지 않지만 위와 같이 UIWindow 활용되는 경우가 있습니다. 

 

func post(
    name aName: NSNotification.Name,
    object anObject: Any?,
    userInfo aUserInfo: [AnyHashable : Any]? = nil
)

또한 NotificationCenter.default.post 를 통해서 name을 이용한 Notification.name을 보내서 처리할 수도 있습니다. userInfo에는 보낼 해쉬 값이 들어가며 다른 곳에 전달할 수 있습니다. 

 

 

 

 

결론을 말하자면

 

addObserver로 name에 대한 이벤트를 처리할 수도 있고 Selector를 통해서도 이벤트를 처리할 수 있다. Observer를 만들고 받아서 처리하는 곳

Post는 name을 통해 addObserver로 userInfo란 데이터값을 보낼 수 있다. 생각보다 많이 쓰진 않는다.  

 

 


[함께 읽으면 좋은 글]

2023.01.25 - [취미로 코딩하기] - iOS Push Notification 개발 및 테스트, 사용법

 

iOS Push Notification 개발 및 테스트, 사용법

iOS에서 Push Notification을 개발하거나 테스트하려면 개발자계정이 있어야 합니다. 요즘 push기능이 없는 앱은 거의 없습니다. 개발자계정에 어떤 종류가 있는지도 다룰 테지만 먼저 정리해야 할 것

commnetall.tistory.com

2023.01.25 - [취미로 코딩하기] - Docker, 도커를 사용하는 이유와 도커 설치법

 

Docker, 도커를 사용하는 이유와 도커 설치법

도커를 사용하면 서버환경 구성하기 편하다는 말을 조금씩 들어왔지만 제대로 공부하고 설치해본 적은 없었습니다. 그래서 이번에는 도커를 활용해 AZURE나 AWS서버를 구축하는 과정을 해보려했

commnetall.tistory.com

 


 

 

 

댓글