아삭아삭 iOS 개발

[Swift 독학] 패스트캠퍼스 챌린지 23일차_프로퍼티 관찰자 본문

Swift

[Swift 독학] 패스트캠퍼스 챌린지 23일차_프로퍼티 관찰자

바닐라머스크 2022. 2. 15. 23:46

 

■ 프로퍼티 관찰자(property observers)

  • 프로퍼티의 값이 변경될 때 사용자가 지정하는 동작에 응답 가능
  • 변경하려는 프로퍼티의 새로운 값이 기존값과 같아도 프로퍼티가 설정(set)될 때 프로퍼티 옵저버는 호출됨
  • 프로퍼티 관찰자를 추가할 수 있는 위치 3곳
    1) 저장 프로퍼티
    2) 오버라이딩이 된(=상속한) 저장 프로퍼티
    3) 오버라이딩이 (=상속한) 연산 프로퍼티
  • 상속된 프로퍼티의 경우(2,3번) 하위 클래스의 프로퍼티를 재정의하여 프로퍼티 관찰자를 추가
  • 연산 프로퍼티의 경우, (관찰자를 생성하는 대신) 프로퍼티의 setter 이용하여 변경을 관찰하고 응답
  • 함수/메서드/클로저/타입 등의 외부에 있는 지역 및 전역 변수에도 모두 사용 가능


■ 프로퍼티 관찰자 정의방법 2가지

1) willSet 옵저버

  - 값이 저장되기 직전에 호출됨

  - 새로 저장될 프로퍼티의 값을 상수 매개변수로 전달
  - wiliest
블럭에서 암시적 매개변수 new value 사용 가능
2) didSet
옵저버

  - 값이 저장되기 직후에 호출됨

  - 프로퍼티의 기존 값이 상수 매개변수로 전달
  - didst
블럭에서 암시적 매개변수 old value 사용 가능


※ willSet과 didSet 2개 모두 정의 가능

※ willSet과 didSet 둘 중 필요한 하나만 구현해 주어도 무관

 

오늘 공부하면서 작성해본 예시 코드로는 환율 관련한 프로퍼티 옵저버를 생성해보았다.

 

작년에 읽은 책 중 「나는 주식 대신 달러를 산다」 라는 책을 인상깊게 읽었던 점이 기억나서인데,

시시각각 환율 변동 상황을 알려주는 기능이 있으면 좋을 것 같다는 생각에 간단하게 작성해보았다.

(그러고보니 이 책 마지막에 작가분이 직접 관련앱 출시도 할 예정이라고 적혀있던데, 한 번 찾아보고 그 앱은 어떤 식으로 만들어졌는지 살펴보는 것도 좋은 공부가 될 것 같다.)

 

class WonDollarExchangeRate {
    var todayExchangeRate: Double = 0 {
// 데이터 타입을 처음에 Int로 했다가, 소수점 둘째 자리까지의 환율값을 할당해야 하므로 데이터 타입을 Double로 변경함
        willSet (newExchangeRate){
            print("오늘의 원달러 환율은 \(newExchangeRate)원입니다.")
        }

        didSet {
            if todayExchangeRate > oldValue {
                print("오늘의 원달러 환율은 어제보다 \(todayExchangeRate - oldValue) 원 상승했습니다.")
            } else if todayExchangeRate == oldValue {
                print("오늘의 원달러 환율은 어제와 동일한  \(oldValue) 원입니다.")
            } else {
                print("오늘의 원달러 환율은 어제보다 \(oldValue - todayExchangeRate) 원 하락했습니다.")
            }
        }
    }
}

let kdExchangeRateAlarm = WonDollarExchangeRate()

kdExchangeRateAlarm.todayExchangeRate = 1194.59
//오늘의 원달러 환율은 1194.59원입니다.
//오늘의 원달러 환율은 어제보다 1194.59 원 상승했습니다.

kdExchangeRateAlarm.todayExchangeRate = 1199.74
//오늘의 원달러 환율은 1199.74원입니다.
// 오늘의 원달러 환율은 어제보다 5.150000000000091 원 상승했습니다.
  -> 여러번 돌려도 1199.74-1194.59=5.150000000000091 이 나옴. 진짜 이상함ㅋㅋㅋㅋㅋ 0.000000000000091의 정체를 찾아보아야겠음

kdExchangeRateAlarm.todayExchangeRate = 1194.49
//오늘의 원달러 환율은 1194.49원입니다.
//오늘의 원달러 환율은 어제보다 5.25 원 하락했습니다.

 

 

본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.

 fast campus강의  참조자료

[1] https://blog.yagom.net/556/

[2] https://bbiguduk.gitbook.io/swift/language-guide-1/properties#property-observers

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

 

포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.