[iOS_Swift] 프로퍼티 감시자(Property Observers)(코드x)

2021. 12. 18. 02:21Programming/iOS_Swift

프로퍼티 감시자란?

어떤 저장프로퍼티와 부모클래스로부터 상속받은 저장프로퍼티, 연산프로퍼티에 새로운 값이 할당될 때, 그러한 변화들을 관찰하고 호출(respond)하는 역할을 수행하는 것이다.

 

프로퍼티 감시자의 특징

1. 프로퍼티의 값이 변경될때마다 호출됨.(~~~~called every time a property's value is set.)

2. 새로운 값이 기존의 값과 같더라도 호출됨.(~~~~even if the new value is the same as the property current value.)

3. 지연저장프로퍼티에는 감시자를 넣을 수 없음.(~~~~except for lazy stored properties.)

3. 부모클래스로부터 상속받은 저장프로퍼티, 연산프로퍼티에도 넣을 수 있음.

4. 프로퍼티 감시자의 메서드는 willSet과 didSet 두 가지가 존재함.

 

왜 쓸까?

1. 코드의 반복을 줄일 수 있다.

  예를 들어, 어떤 프로퍼티의 값이 변할 때마다 테이블뷰를 리로딩 해줘야 하는 상황이 있다고 가정해보자. 감시자를 쓰지 않는다면 해당 프로퍼티의 값이 변하는 곳마다 테이블뷰 reloadData를 추가해줘야 한다. 즉, 불필요한 코드 낭비가 발생할 수 있다. 이럴 때, 감시자를 활용한다면 didSet메서드에 코드 한 줄이면 해결할 수 있다.

 

2. 직관적이고 코드의 흐름을 이해하기 편하다.

   1번의 연장선으로, 여기저기 흩뿌려진 반복되는 코드가 프로퍼티 감시자 메서드에 묶여있다면, 코드를 이해하는 데에 용이해진다. '이 저장 프로퍼티의 값이 바뀌면 저런 메서드가 바로 호출되는구나' 이런 식으로, 또 반복되던 코드가 있던 자리의 코드들을 볼 때도 불필요하던 코드가 빠졌으니 좀 더 유기적으로 이해할 수 있게된다!

 

** 왜 쓸까? 부분은 현재까지 제가 느낀 사견이기 때문에, 틀릴 수도 있습니다. 내용이 잘못됐다면 언제든 지적해주세요!