iOS

iOS) NotificationCenter

snowe 2021. 4. 8. 19:32

Apple 공식 문서에 따르면 NotificationCenter란 등록된 observer에게 정보를 전송할 수 있게 해주는 notification(알림) 전송 방법이라고 한다.

 

NotificationCenter는 Delegate Pattern과 함께 어플리케이션 내에서 객체가 서로 상호작용할 수 있는 방법 중 하나이다.

 

 

동작방식을 나타낸 그림

NotificationCenter의 동작 방식

특정 객체가 NotificationCenter에 등록된 Event를 발생시키면, NotificationCennter에 등록된 Observer들 중 해당 Event를 담당 중인 Observer가 그 Event에 대한 행동을 취하는 것(#selector)이 NotificationCenter가 동작하는 방식이다.

 

어떻게 활용할 수 있을까?
동작방식에서 알 수 있듯이 특정 Event의 실행을 감지할 수 있기 때문에, 특정 Event의 실행에 따라 동작해야하는 것 또는 동시적으로 여러 View에서 동작해야하는 것 등을 처리할 때에 활용할 수 있다.

 

실제로 해보기

참고했던 이동건님의 블로그에 쉽게 이해할 수 있는 예제가 나와 있어서 따라해보았다.

POST라는 버튼을 누르면 파란색 박스는 주황색으로, 차콜색은 초록색으로 변하는 예제입니다.

 

POST

image

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "PostButton"),object: nil)
  • POST라는 버튼을 누르면 NotificationCenter에 PostButton이라는 Event 등록하고 이를 발생시킨다.
  • object: 매개변수를 통해 Event를 발생시킬 때 특정 객체를 같이 넘길 수 있는데, 현재는 아무것도 넘기지 않을 것이기 때문에 nil 이다.

 

Observer

NotificationCenter.default.addObserver(self, 
		selector: #selector(changThirdColor),
		name: NSNotification.Name(rawValue: "PostButton"),
		object: nil)

  • 위의 두 뷰에서는 PostButton이라는 Event가 발생할 때 이를 캐치하고 어떤 행동을 취하는 Observer를 Add해준다.
  • Observer가 취하는 행동은 #selector에 지정해준 changeSecondColor,changeThirdColor 메서드이다.
    • changeSecondColor는 박스의 색을 orange로 변경.
    • changeThirdColor는 박스의 색을 green으로 변경.

 

Result

 

 

 

도움을 준 좋은 블로그

 

[ios] NotificationCenter

NotificationCenter Intro 이전에 저는 키보드에 의해 TextField 가 가려지는 문제점에 대한 해결법을 포스팅한 적이 있습니다. 해당 포스팅에서 NotificationCenter 에 대해 간단히 언급을 했었습니다. [ios] 키.

baked-corn.tistory.com