공부 연습장 :-)

lazy의 사용_스위프트 프로퍼티

|

lazy

lazy는 스위프트의 프로퍼티에 나오는 키워드이다. 한국어로는 지연 저장형 프로퍼티라고 하는데, 쉽게말해서 해당 프로퍼티의 값이 필요할때 계산한다는 뜻이다. (지연 로딩, lazy loading) 곧바로 프로퍼티의 값을 계산하는게 메모리나 시간 측면에서 낭비가 심할경우, 또는 인스턴스가 만들어져야 알 수 있는 타입의 외적 요소에 프로퍼티 값이 의존하는 경우가 있다. (초기화를 할 수 없는 프로퍼티)
지연 로딩(lazy loading)은 프로퍼티의 값이 필요해야 계산한다는 뜻이다. 따라서 프로퍼티의 값을 계산하는 일도 인스턴스의 초기화 이후로 미뤄진다. 따라서 그 값이 나중에 변경되므로 var로 선언해야한다.

lazy 프로퍼티 선언하는 법

struct Cup {

  lazy var beverage : String = {
    // code
    return chosenBeverage
  }()

}

mutating 함수 / var 타입 Struct

참고사이트

  • lazy를 사용하는 스트럭트의 인스턴스를 사용할때는, 항상 var로 선언해야한다. -> lazy 프로퍼티에 의해서 속성이 바뀌고, 그 스트럭트는 변경될 가능성이 있는 스트럭트라고 간주되기 때문에! let으로 선언하면 컴파일에러가 난다.
  • lazy선언된 프로퍼티에 접근하는 메소드는 반드시 mutating 키워드가 선언되어야 한다.
    • lazy 프로퍼티는 값이 필요할때 계산되는데, 그 프로퍼티에 접근하는 메소드는 호출되는 시점에 프로퍼티의 값이 계산되고, 그건 바로 잠정적으로 그 메소드는 프로퍼티 값을 바꾸는 메소드이기 때문이다.
  • lazy 키워드가 붙은 프로퍼티는 한 번만 계산된다. 지연 프로퍼티는 첫 액세스때 한 번만 계산되고, 이후에는 다시 조정되지 않는다.

Comments