TIL(Today I Learned)
11월 19일(목)
학습내용
- KVO와 Notification Center에 대해서 배웠다.
- 둘 다 인스턴스끼리 통신하는 방법이다. (피관찰자가 관찰자에게 정보를 전달하는 방법)
- 관찰자는 정보를 기다리는 자이고, 피관찰자는 정보를 전달하는 자이다.
- KVO는 어떤 인스턴스의 프로퍼티의 값 변화를 다른 인스턴스가 관찰을 가능하게 하는 것이다.
- KVO를 이용 하기 위해선 관찰자, 피관찰자 모두 NSObject를 상속 해야 한다.
- 이 때, Key는 프로퍼티 이름이며 Value는 프로퍼티에 저장된 내용이다. (즉, 어떤 인스턴스의 프로퍼티 내용 변화를 관찰하는 방법)
- Notification Center는 Notification을 보내서 등록된 관찰자들에게 정보를 전달하는 방법이다.
- 관찰자를 addObserver를 통해서 등록하며, addObserver(forName:object:queue:using:) 또는 addObserver(_:selector:name:object:)를 이용한다. 첫번째 방법은 코드 블록을 using 파라미터에 넣음으로써 코드블록을 관찰자로 지정하는 것이며, 두번째 방법은 첫번째 파라미터에 Any 타입을 넣음으로써 관찰자를 지정하는 것이다.
- Notification Center의 post 메서드를 통해서 등록된 관찰자들에게 notification 전달(broadcast)가 가능하다.
문제점/고민한점
- KVO와 Notification Center의 차이점은? 관찰자와 피관찰자 관계가 1:1 과 1:n이라는게 차이점인가?
해결방법
- KVO와 Notification Center의 차이점은? 관찰자와 피관찰자 관계가 1:1 과 1:n이라는게 차이점인가?
- KVO도 1:n이 가능하다.(관찰자 n명이 피관찰자 1명을 관찰하는것)
- 뿐만 아니라 KVO는 n:1, n:n도 가능하다. (관찰자 1명이 n명의 피관찰자를 갖거나, n명의 관찰자가 n명의 피관찰자를 갖는것)
- 차이점은 ‘관찰의 대상이 무엇인가’와 ‘관찰에 언제 반응? 하는가’ 이다.
- KVO는 관찰자(인스턴스)가 어떤 인스턴스의 프로퍼티를 관찰하는 것이고, Notification center는 관찰자(인스턴스)가 Notification을 관찰하는 것이다.(어떤 Notification이 날라오는가를)
- KVO는 프로퍼티의 내용이 변화했을 때 관찰자가 반응하고, Notification center는 Notification을 post 했을 때 관찰자가 반응?한다.