IOS에서는 이벤트를 구독하여 원하는 상황에 따라 이벤트를 받는 NotificationCenter라는 것이 있습니다. 다른 뷰에 업데이트를 편하게 할 때나 데이터를 전달할 때 사용합니다. 오늘은 이것에 대해서 정리해보겠습니다.
[목차]
- IOS NotificationCenter란?
- IOS NotificationCenter 언제 사용하는지?
- IOS NotficationCenter 사용법
1. IOS NotificationCenter란?
NotificationCenter란 등록된 Observer의 정보를 다른 뷰에 전송할 수 있게끔 알려주는 메커니즘 클래스입니다. 쉽게 말해서 Apple에 내장되어 있는 Observer Pattern이라고도 할 수 있습니다. Observer Pattern은 어떤 객체 상태가 변할 때 그와 연관된 객체들에게 알림을 보낸다는 것인데 IOS Notification은 Observer Pattern처럼 사용하라고 만들어졌습니다.
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 개발 및 테스트, 사용법
2023.01.25 - [취미로 코딩하기] - Docker, 도커를 사용하는 이유와 도커 설치법
'프로그래밍_' 카테고리의 다른 글
서버 프레임워크 netty 구현 및 개념 (0) | 2023.02.15 |
---|---|
Nodejs typscript 사용해야 할까?,사용법 (0) | 2023.02.06 |
Node.js APNs 서버 개발 (0) | 2023.01.30 |
IOS 개발 APNs 아이폰 테스트 (0) | 2023.01.28 |
자바스크립트 ES6 , CommonJS 문법, 모듈시스템 차이 (0) | 2023.01.26 |
댓글