ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (Swift) Property - didSet, willSet이란
    Programing Language/Swift 2019. 11. 5. 14:42
    728x90
    반응형

    스위프트는 프로퍼티 옵저버로 didSet, willSet을 제공합니다. 

    didSet은 프로퍼티 값이 변경되기 직전, willSet은 값이 변경된 직후를 감지하는 것입니다. 따라서, 이 때 원하는 작업을 수행할 수 있습니다.

     

    참고로 프로퍼티 옵저버를 사용하기 위해서는 프로퍼티의 값이 반드시 초기화가 되어 있어야 합니다.

    또한 클래스의 init()안에서 값을 할당할 때는 didSet, willSet이 호출되지 않습니다. (초기화 이후부터 프로퍼티를 감시)

     

    # didSet, willSet의 활용

     

    프로퍼티 옵저버의 가장 빈번한 사용은 Model에서 갱신된 값을 View에 보여줄 때 입니다. 

    예를 들면, View에 점수를 표시하는 Label이 있다고 가정하고, 점수가 바뀔 때 마다 View의 Label을 업데이트하고 싶습니다. 

    이 경우에 점수를 저장하고 있는 변수인 score의 값을 바꾸어주고 화면을 갱신하는 작업을 아래처럼 할 수 있습니다.

    score = 90 
    scoreLabel.text = "\(score)"

     

     

    이렇게 해도 View의 Label은 정상적으로 바뀌지만, 여러 곳에서 score의 값을 바꾼다면 score의 값이 바뀌는 곳 마다 2번 라인의 코드를 적어야하는 번거로움이 있습니다.

    이럴 때 프로퍼티 옵저버를 사용할 수 있습니다. 프로퍼티 옵저버를 사용하면 아래와 같이. 

    var score: Int = 0 {
        didSet {
            scoreLabel.text = "\(score)"
        }
    }

     

    이렇게 하면 score값이 바뀔 때 마다 View의 값을 갱신하는 작업을 따로 해줄 필요가 없습니다. 이외에도 프로퍼티 옵저버를 사용하여 현재 값과 바뀔 값을 비교하는 작업을 할 수도 있습니다.

    var score: Int = 0 {
        didSet(oldVal) {
            print("현재 점수는 : \(self.score), 이전 점수는: \(oldVal)")
        }
    }
    

     

    (willSet도 비슷하게 활용할 수 있습니다.)

    728x90
    반응형
Designed by Tistory.