이번에는 저번에 정리하였던 연산 프로퍼티(Computed Properties)에 이어서 프로퍼티 감시자에 대해서 정리해보도록 하겠습니다.
제가 생각할 때 프로퍼티 감시자도 자주 사용하는 만큼 열심히 정리해보도록 하겠습니다!
프로퍼티 감시자( Property Observers)
이번에도 Apple 공식 문서를 통해 프로퍼티 감시자에 대해 알아보도록 하겠습니다!
이 내용들을 정리해보고 설명해보자면
-
프로퍼티 감시자를 사용하면 프로퍼티의 값이 변경됨에 따라 적절한 대응을 하는 것이 가능합니다.
-
프로퍼티 감시자는 값이 새로 할당될 때마다 호출되게 됩니다. (그렇다면 변경되는 값이 이전의 값과 같으면 어떻게 될까요? 정답은 변경되는 값이 같더라도 호출!됩니다.)
-
지연 저장 프로퍼티를 제외한 저장 프로퍼티에 추가가 가능합니다.
-
재정의를 통해 상속받은 저장 프로퍼티 또는 연산 프로퍼티에도 추가가 가능합니다. 하지만 상속받지 않은 연산 프로퍼티에는 정의해줄 필요가 없습니다. 왜냐하면 연산 프로퍼티의 setter에서 프로퍼티 감시자를 구현이 가능하기 때문입니다!
-
프로퍼티 감시자는 프로퍼티의 값이 변경되기 직전 호출되는 willSet 메서드와 프로퍼티의 값이 변경된 직후에 호출되는 didSet 메서드가 있습니다.
그렇다면 이번에는 프로퍼티 감시자에서 사용하는 메서드인 willSet과 didSet에 대해서 정리해보도록 하겠습니다!
willSet 과 didSet
1. willSet
-
willSet 메서드에 전달되는 전달 인자는 프로퍼티가 변경될 값 입니다.
-
연산 프로퍼티의 set 과 마찬가지로 매개변수 이름에 괄호를 쓰지 않는다면 기본 매개변수인 newValue 를 사용할 수 있습니다. ( 이 내용은 제가 연산 프로퍼티에서 예시를 들고 설명했던 만큼 이해가 되지 않으신다면 저번 글을 참고하시면 좋을 것 같습니다!)
2. didSet
-
didSet 메서드에 전달되는 전달 인자는 프로퍼티가 변경되기 전의 값 입니다.
-
매개변수 이름을 지정하지 않는다면 기본 매개변수인 oldValue 를 사용할 수 있습니다.
항상 그렇듯이 이렇게 정의만 보면 이해가 잘 되지 않는데요. 이번에는 애플 문서의 예시를 보며 이해하도록 해볼게요!
- 위에서 프로퍼티 감시자에 대해 정리한 내용처럼 이 예시를 보면 totalSteps라는 저장 프로퍼티에 프로퍼티 감시자가 선언되어 있는 것을 확인할 수 있습니다!
- 여기서 willSet은 newTotalSteps 라는 파라미터 이름을 사용하여 새로운 값을 관찰하고 있습니다.
- (중요!!!) willSet 의 경우는 값이 저장되기 전에 호출되는 것이고 didSet 의 경우 값이 설정된 직후에 불리는 것이므로 stepCounter.totalSteps = 350 했을 때 totalSteps의 값이 350인 것입니다!
- 또한 didSet 메서드는 위에서 매개변수를 따로 정해주지 않았기 때문에 기본 매개변수인 oldValue 를 사용하는 것을 확인할 수 있습니다.
이렇게 정리를 할까 하다가 예시를 한 가지 정도는 더 보는 게 좋을 것 같아 다른 예시를 찾아보았는데요.
- 이렇게 보셨을 때 프로퍼티 감시자가 어떻게 사용됐는지 이제 감이 오시나요???
- 간단하게 이 코드를 설명해보자면 섭씨온도와 화씨온도를 바꿀 건데요.
- 여기서 보시면 updateCelsiusLabel() 메서드에 의해 값이 바뀔 때마다 프로퍼티 감시자가 호출되어 fahrenheitValue 에 값을 할당해주는 것입니다!
이렇게 프로퍼티 감시자(Property Observers)를 잘 사용한다면 값이 바뀌거나 하는 상황에 메서드를 만들어주지 않고도 변경이 가능하기 때문에 유용합니다!!
오늘은.. 여기까지..
'Swift' 카테고리의 다른 글
Swift(4) - Generic(제네릭)이란 무엇일까? (0) | 2020.02.21 |
---|---|
Swift(2) - Computed Property(연산 프로퍼티)란 무엇일까? (2) | 2020.02.13 |
Swift(1) - Stored Property(저장 프로퍼티)란 무엇일까? (0) | 2020.02.10 |