"A lazy stored property is a property whose initial value is not calculated until the first time it is used" - Apple Document
-> 최초 사용되기 전까지 사용되지 않는 stored property, 즉 사용하는 순간 연산이 시작된다.
주의 사항
1. Lazy Variable은 항상 var와 함께 사용한다.
- 당연한 말이지만, lazy 변수는 최초에 값이 존재하지 않고 이후 사용될때 값이 주어진다. 따라서 let으로는 사용이 불가능하다.
2. Computed Property VS Lazy Property
- Computed Property의 경우 사용할때마다 값을 계속해서 연산하여 반환하지만,
- Lazy Property의 경우 최초 사용될때 메모리에 값을 올리고, 메모리에 올라온 값을 계속 사용한다.
3. Closure for Lazy Property
- Lazy property에 연산을 통해 값을 지정할 경우 closure를 사용한다.
※ 일반 변수들은 클래스가 생성된 이후에 접근이 가능하기 때문에 클래스내의 다른 영역(메소드, 일반 프로퍼티)에서는 self를 통해 접근할 수 없지만 lazy키워드가 붙으면 생성 후 추후에 접근할 것이라는 의미이기 때문에 closure내에서 self로 접근이 가능합니다.
예제에서 클래스내의 클로저에서 self로 접근하였고, 이 부분에서 self에 접근함으로서 메모리 누수에 대해 걱정할 수 있지만,
클로저 끝에 ()로 인해 그 즉시 값을 리턴하고 끝내버리기 때문에 누수의 걱정은 없다.
만일 desc가 위 예제와 같이 클로저의 실행 결과를 담고 있는 것이 아닌 () -> String과 같이 클로 자체를 메모리에 담고 있는 형태라면,
[weak self] 방식으로 메모리 누수를 방지 해 주어야 합니다.
또한 phone 인스턴스가 생성된 이후 phone의 name을 iPhoneXs로 변경하였음에도 lazy 프로퍼티인 desc의 값이 동일한 이유는,
desc의 값은 최초 name과 manufacture의 값으로 메모리에 올라가 있고 그 값을 유지하기 때문이다.
참조
'Swift' 카테고리의 다른 글
생체인증을 통한 본인인증 제작기 (0) | 2022.06.07 |
---|---|
보안 핀코드 입력화면 제작기 (0) | 2022.05.15 |
Initializer (0) | 2022.01.27 |
Memory에 대한 이해 (0) | 2021.02.28 |