[Swift] - Lazy(지연 저장 프로퍼티)

longlivedrgn·2023년 1월 5일
0

swift문법

목록 보기
23/36
post-thumbnail

Lazy (지연 저장 프로퍼티)

  • 처음 사용되기 전까지 초기값이 계산되지 않는 프로퍼티
  • 항상 변수로 선언되어야한다.
    • 처음에는 값이 없다가 초기화가 되면 값이 생기게 되기에
  • structclass에서만 사용이 가능합니다.
  • computed property와는 사용을 할 수가 없다.
    • lazy는 호출된 처음에 메모리에 값을 올리고 계속해서 그 값을 쓴다. 반면 computed property는 호출될 때마다 지속적으로 연산을 진행해야되므로.
  • closure내에서의 self를 통해서 접근이 가능하다.

closure내에서의 self를 통해서 접근이 가능하다.

  • 아래와 같은 코드를 통하여 위의 말을 이해해보자.(연산 프로퍼티 아니다!)
class Person {
    var name:String
    
    lazy var greeting:String = {
        return "Hello my name is \((self.name))"
    }()
  
    init(name:String){
        self.name = name
    }
}
  • 그리고 아래와 같이 객체를 생성하고 greeting 변수를 호출해보자! 그러면 lazy의 특성이 나오게 된다.
var me = Person(name:"John")

print(me.greeting) // Hello my name is John

me.name = "James"

print(me.greeting) // Hello my name is John // 변화지 않는다!!!

→ 위에서와 greeting이 한번 메모리에 올라가게 되면 변하지 않기에 이름을 “James”로 변경해도 me.greeting은 변하지 않는다.

또 다른 예)

  • viewcontroller안에서 UILabelviewDidLoad()이후에 생성이된다. 따라서 viewDidLoad()가 되기전에 접근을 할 수 없다. 이럴 때 호출이될 때 생성이될 수 있게 lazy를 통해서 호출 전에 접근을 가능하게 할 수 있다.
lazy var fruitUILabelDictionary: [Fruit:UILabel] = [Fruit.strawberry : strawberryStockLabel, 
Fruit.pineapple : pineappleStockLabel,
 Fruit.kiwi : kiwiStockLabel,
  Fruit.banana : bananaStockLabel, Fruit.mango : mangoStockLabel]

📚참고자료

[Swift] lazy Variables

0개의 댓글