iOS는 앱 사용량이 높아지면 앱이 죽기때문에, 개발자는 처음부터 메모리 관리를 생각하면서 코드를 작성해야합니다. 예를 들어 필요한 경우가 아니면, 비싼 코스트의 작업을 지양해야합니다. swift에서 비싼 코스트 의 작업을 in-time 계산할 수 있게 하는 lazy variables라는 메커니즘을 제공합니다.
요청되지 않는 경우
→ 지정된 함수는 호출되지 않음
→ processing time 절약
항상 var로 선언해야한다. == let과 lazy 함께 사용 불가
이 프로퍼티의 초기값을 인스턴스 초기화가 완료된 시점까지 알 수 없기 때문
상수 프로퍼티(let)는 초기화가 끝나기 전까지 반드시 값을 가져야하기에, lazy로 선언될 수 없다.
computed property와 사용 불가
연산 프로퍼티는 computation 블록 안의 코드가 모두 실행되고난 다음에 값을 반환하기 때문에
struct, class의 멤버로만 사용 가능
자동으로 초기화되지 않기 때문에 thread safe 하지 않음
lazy 변수는 처음 request될 때 초기화되고, 그 다음엔 그 값을 계속 저장한다.
→ 따라서 처음 값을 계속 유지
lazy 변수의 초기화에 사용되는 클로저에는 @noescape가 자동적으로 적용된다.
→ 외부에서 접근하는 것이 아니기에 캡쳐를 할 필요가 없다.
lazy property와 관련된 클로저는 오직 그 프로퍼티를 읽을 때만 실행된다.
따라서 사용자의 판단에 그 프로퍼티가 잘 사용되지 않는다면, 불필요한 할당과 실행을 방지할 수 있다.
lazy property를 stored property의 값으로 채울 수 있다.
lazy property의 클로저 안에 self를 사용할 수 있다.
순환 참조를 일으키지 않는다.