본문 바로가기
Swift

getter와 setter 그리고 willSet과 didSet

by iOS 개린이 2022. 7. 1.

-get과 set은 연산 프로퍼티로 클래스, 구조체, 열거형에서 사용된다. 저장 프로퍼티와 다르게 저장공간을 갖지 않고, 다른 저장 프로퍼티의 값을 읽어 연산을 실행하거나, 프로퍼티로 전달받은 값을 다른 프로퍼티에 저장하는 역할을 한다. 또한 연산 프로퍼티는 값을 저장하지 않기 때문에 타입추론이 불가능하다.

따라서 선언할 때 var와 타입 어노테이션을 통해 자료형을 명시해주어야 한다.

 

-get은 읽기 전용으로 리턴값이 있고, set은 파라미터로 받은 값을 조건에 맞게 연산해준다.  여기서 set의 파라미터명은 생략해도 되고 우리가 파라미터로 접근할 때 newValue라는 set에 지정해놓은 이름으로 사용할 수 있다.

 

-willSet과 didSet은 observer property로 프로퍼티의 값을 관찰하고 변화에 대응할 수 있다. observer property를 사용하기 위해서는 반드시 프로퍼티 값이 초기화되어 있어야 한다. 

-willSet은 프로퍼티의 값이 변경되기 직전에 호출되며, newValue는 변경 될 새로운 값을 뜻한다.

  didSet은 프로퍼티의 값이 변경된 후에 호출되며, oldValue 변경 전 프로퍼티의 값을 뜻한다.

 -newValue는 willSet에서만 사용가능한 것이고, oldValue는 didSet에서만 사용가능하다.

 

-observer property는 Model에서 갱신된 값을 view에 보여줄 때 자주 사용된다. 

view에 점수를 표시하는 Label이 있고, 점수가 바뀔 때 마다 view의 label을 업데이트 한다고 가정할 때 

 

ex) 

var score : Int = 0 {

   didSet {
      scoreLabel.text = "Score : \( score )"
   }
}

 

위의 코드처럼 score값이 변경될 때마다 scoreLabel의 텍스트도 계속 변경된다.     

 

ex) 

var score : Int = 0 {

    didSet{
         print( "현재 점수는 \( self.score )이고 이전 점수는 \( oldValue )이다.
    }
      
}

'Swift' 카테고리의 다른 글

Protocol에 관하여  (0) 2022.11.14
lazy variables에 관하여  (0) 2022.10.07
순환참조에 관하여  (0) 2022.09.28
@escaping에 관하여  (0) 2022.08.25
Class와 Struct  (0) 2022.07.04