본문 바로가기
iOS Swift/문법

[Swift] Property observer 프로퍼티 관찰자(옵저버)

by 야고이 2024. 3. 11.
728x90

240311

일단 observer 가 뭔지 검색해 봤다

observer :  관찰자, 감시자

 

고로 Property observer 는 프로퍼티 관찰자 라고 할 수 있겠다

Property 가 뭐냐고 묻는다면 간략하게는 클래스, 구조체에서 선언하는 상수/변수 를 프로퍼티 라고 한다

 

프로퍼티에 대한 자세한 내용은 Swift git book 자료를 첨부 한다


프로퍼티 관찰자 (Property observers)는 프로퍼티의 값이 변경되는지 관찰하고 응답한다.

프로퍼티에 관찰자를 정의하는 방법은 

willSet 과 didSet 이 있는데

  • willSet 은 값이 저장되기 직전에 호출됩니다.

  • didSet 은 새로운 값이 저장되자마자 호출됩니다

영어 그대로 해석 하면 된다 

(1) willSet(새로운 값 생성'될' 예정인 시점) --> (2) 새로운 값 --> (3) didSet (새로운 값 저장 '된' 시점)

이런 순서로 보면 된다. 영어 공부도 할 수 있는 개발,, 정말 조타

 

예제를 보자

var name: String = "Unknown" {
    willSet {
        print("현재 이름 = \(name), 바뀔 이름 = \(newValue)") // 현재 이름 = Unknown, 바뀔 이름 = Peter
    }
    didSet {
        print("현재 이름 = \(name), 바뀌기 전 이름 = \(oldValue)") // 현재 이름 = Peter, 바뀌기 전 이름 = Unknown
    }
}
 
name = "Peter"

항상 willSet 이 먼저 실행 된다.

당연함 시점이 가장 앞이니까

(1) willSet(새로운 값 생성'될' 예정인 시점) --> (2) 새로운 값 --> (3) didSet (새로운 값 저장 '된' 시점)

 willSet , didSet 두가지다 적어야 한다면 둘의 순서를 바꾸어 적어도 상관 없지만, 그냥 내가 보기 편하게 나라면 willSet를 먼저 적을 것이다.

 

그래서 위 예제를 보면 

(0) 현재 값[Unknown] -> (1) willSet --> (2) 새로운 값 [Peter]--> (3) didSet

 

그러므로 현재 name은 Unknown  앞으로 바뀔 이름은 Peter 가 되시겠다

그리고 didset 시점엔 이미 새로운 이름을 받아왔으니 현재 이름은 Peter, 바뀌기전 이름은 Unknown 이 된다

 

 

print 에 newValue 가 뭐냐고 묻는다면 기본 파라미터 명이다. 원하는 이름으로 바꿀 수도 있다

tip. 무슨 값을 넣어야 하는지 모르겠다면  esc  를 누르면 이런 창이 뜬다

파라미터 명을 정하지 않았을 때는 newValue 가 뜨는데

이름을 지정하니 지정한 파라미터명인 newName 이 자동으로 뜨는걸 볼 수 있다

 

궁금한 점이나 오류가 있다면 언제든 댓글 달아주세요

728x90

'iOS Swift > 문법' 카테고리의 다른 글

Swift Naming convention  (0) 2024.03.13
Swift Variables and Constants  (0) 2024.03.13
[Swift] Initializer  (0) 2024.03.07
UITableViewDataSource, UITableViewDelegate  (1) 2024.02.28
[Swift] Array  (0) 2024.02.22

댓글