[알쓸신잡] 항상 주인공은 늦게 등장함

유인호·2024년 1월 12일
0

알쓸신잡

목록 보기
13/20
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하게 동작한다.

profile
🍎Apple Developer Academy @ POSTECH 2nd, 🌱SeSAC iOS 4th

0개의 댓글