struct Test {
let testing = "지연 저장 프로퍼티입니다"
}
struct User {
let name: String
let age: Int
lazy var test = Test()
}
let person = User(name: "person", age: 123)
print(person.test) // error!
분명 이상하다. User에 있는 프로퍼티에 접근했을 뿐인데, person을 let에서 var로 바꿔달라는 에러가 발생함.
error: cannot use mutating getter on immutable value: 'person' is a 'let' constant
print(person.test)
lazy로 선언된 지연 프로퍼티는 접근할때 메모리에 올라가기에, 접근하기 전에는 존재는 하지만 마치 nil처럼 있다가, 접근할때 실제 값이 들어가기에 전지적 struct User 관점에선 값이 변한 것 처럼 보임.
let person -> var person으로 바꿔주면 정상적으로 작동한다.
struct User {
let name: String
let age: Int
lazy var test = Test()
static let identifier: String = "타입 프로퍼티임"
}
static으로 만든 타입 프로퍼티도 lazy하게 동작한다.