본문 바로가기

Swift

Lazy in Swift

"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의 값으로 메모리에 올라가 있고 그 값을 유지하기 때문이다.

 

참조

baked-corn.tistory.com/45

'Swift' 카테고리의 다른 글

생체인증을 통한 본인인증 제작기  (0) 2022.06.07
보안 핀코드 입력화면 제작기  (0) 2022.05.15
Initializer  (0) 2022.01.27
Memory에 대한 이해  (0) 2021.02.28