lazy란

이하연·2021년 9월 16일
0

[Swift] 스위프트

목록 보기
19/27

배경

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를 사용할 수 있다.

순환 참조를 일으키지 않는다.

0개의 댓글