티스토리 뷰
안녕하세요 Pingu입니다!🐧
오늘은 NotificationCenter를 사용하여 특정 동작이 발생했을 때 어떤 객체에 알리는 일종의 옵저버 패턴에 대해 알아보려고 합니다.
간단하게 만화를 그려봤는데 한 번 봐주세요 ㅎㅎ
위와 같이 A가 B에게 밥 먹을 때 연락하라고 말을 합니다.
그리고 자신도 그 때 밥을 먹겠다고 하죠.
나중에 알아보겠지만 이러한 과정이 addObserver라는 메서드에 의해 수행됩니다.
그럼 언젠가 B가 밥을 먹을 때 A에게 이를 알리겠죠?
위와 같이 B는 착하게도 A에게 밥을 먹는다고 알려주고 A는 이걸 듣고 자신도 밥을 먹게 됩니다.
위와 같은 과정을 앱에서 할 수 있도록 해주는 것이 NotificationCenter입니다.
Apple 문서에서 NotificationCenter에 대한 정보로 위와 같이 나와있는데요, NotificationCenter는 앱에 기본적으로 하나씩 존재하며 이를 default로 정의했다고 합니다. 또한 자신이 속한 프로세스에서만 동작 가능하고 다른 프로세스와 소통하려면 DistributedNotificationCenter를 사용하라고 하네요!
이건 나중에 알아보도록 하고 일단 오늘은 NotificationCenter를 한 번 사용해보겠습니다.
일단 Xcode에서 기본 iOS App 템플릿으로 프로젝트를 만들어서 사용해보겠습니다.
제가 해볼 것은 버튼을 누르면 레이블의 배경색과 텍스트를 변경해보려고 합니다.
물론 버튼에 target을 추가하거나 IBAction을 사용해서 이를 처리할 수 있지만 NotificatoinCenter로 알림을 보내서 처리해보려고 해요.
일단 위와 같이 뷰를 만들어줍니다. 여기서 NotificationCenter에 새로운 알람을 추가할 건데요, 아까 봤듯이 default라는 기본적으로 존재하는 NotificationCenter에 추가해주시면 됩니다.
옵저버는 위와 같이 addObserver 메서드로 추가할 수 있는데 이 메서드의 매개변수들의 의미는 무엇일까요?
observer라는 매개변수는 옵저버를 추가할 객체를 말합니다.
selector는 알람을 받았을 때 수행할 일이라고 보시면 됩니다.
name은 옵저버가 여러 개 존재할 수 있는데 어떤 옵저버인지를 구분하기 위한 이름입니다.
object는 알림을 보낸 객체가 여러개 존재할 수 있는데 어떤 객체인지 구분하기 위한 이름입니다.
지금 추가한 옵저버에 알람이 들어오면 위와 같은 메서드를 실행하게 만들었습니다.
이렇게 하면 옵저버가 추가되게 되고 그럼 이를 버튼을 눌렀을 때 알람을 전송하는 걸 만들어보겠습니다.
위와 같이 post 메서드로 옵저버에 알람을 전송할 수 있는데요, 아까 만든 옵저버의 이름을 매개변수로 넣어서 아까 만든 옵저버에 알람을 전송하면 됩니다.
그럼 이제 실제로 버튼을 눌러서 옵저버에 알람이 잘 전달됐는지 확인해보겠습니다.
알람도 잘 전달되고 원하는 작업도 수행된 것을 볼 수 있습니다.
NotificationCenter에는 이렇게 직접 알람을 만들어 줄 수도 있지만 기본적으로 존재하는 알람들도 많이 있습니다.
앱이 백그라운드에 진입했을 때나 다시 Active 상태가 되었을 때, 키보드가 나타났을 때 사라졌을 때와 같이 시스템적인 알람들이 많은데요, 알람의 종류가 많기 때문에 이번 글에서는 간단하게 백그라운드에 진입했을 때의 알람만 사용해보도록 하겠습니다.
이번에는 알람의 이름을 제가 만들지 않고 UIApplication.didEnterBackgroundNotification이라는 이름을 사용했습니다. 이름만 봐도 알 수 있듯이 앱이 백그라운드에 가면 알람을 보낼 것 같아요^^
그리고 앱이 백그라운드에 가면 위와 같은 메시지를 콘솔에 남기도록 하겠습니다.
그리고 실제 실행을 해보면!
위와 같이 잘 실행되는 것을 볼 수 있습니다.
근데 이렇게 NotificaionCenter에 옵저버를 추가만하고 제거해주지 않으면 문제가 발생할 가능성도 있습니다.
따라서 옵저버를 더 이상 쓰지 않을 때는 이를 제거해줘야 합니다.
옵저버를 제거해줄 땐 removeObserver 메서드를 사용하시면 되는데요, 위와 같이 제거해주시면 됩니다.
이렇게 정말 간단하게 NotificationCenter를 사용해봤는데요, 앱 개발을 할 때 유용하게 쓰일 것 같습니다.
감사합니다!
'iOS > iOS_Memo' 카테고리의 다른 글
[iOS 앱개발] iOS 앱의 상태변화에 따른 AppDelegate, SceneDelegate 메서드 (0) | 2021.05.20 |
---|---|
[iOS] Core Data 사용해보기 - 1 (0) | 2021.04.12 |
[iOS 앱개발] Swift와 Vapor로 서버 만들기 (0) | 2021.02.11 |
[iOS 앱개발] Application의 Life Cycle 알아보기 (0) | 2021.02.05 |
[iOS 앱개발] View Controller의 Life Cycle (0) | 2021.02.04 |
- Total
- Today
- Yesterday
- 자료구조
- dfs
- 아이폰
- operating
- 코딩테스트
- DP
- 코테
- Combine
- pattern
- 문법
- 테이블뷰
- Apple
- document
- OSTEP
- operator
- 백준
- 알고리즘
- Publisher
- IOS
- OS
- System
- Xcode
- design
- Swift
- mac
- 프로그래밍
- 앱개발
- 동시성
- 스위프트
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |