ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • lazy var
    Swift 2021. 3. 17. 10:25

    안녕하세요. 그린입니다!

    이번 포스팅에서는 lazy var에 대해 알아보겠습니다😃

     

    lazy var???

     : lazy 직역하여 생각해볼때 '게으른'이라는 뜻이있다. 처음 접할때 게으른일까? 늦게 해주는걸까? 라는 의문이 들었습니다.

     

    lazy var의 역할

    : lazy var 우선 메모리와 관련이 있습니다.

      메모리를 보다 효율적으로 관리하기 위해 공식문서에서는 처음 사용되기 전까지는 메모리를 잡아먹는 연산이 이뤄지지 않는다고합니다.

     이걸 생각해보면 해당 변수가 필요하여 사용되기 전에는 메모리를 차지하지 않고 해당 변수를 사용하려할때 로드되어 메모리를 차지 하는것입니다.

     처음 의문을 가진 부분에 답이 되었습니다. "게으른 저장? 처럼 필요할때 한다~" 이런 게으른 느낌이 들었습니다.

     

    lazy var의 코드 구현 및 활용

     : 아래처럼 Item 3개가 Items에 묶여 있으며 Items 변수는 선언하는 동시에 리턴 값을 주었습니다.

       그런데 3개의 Item이 생성되지 않아 데이터가 없어 Items 변수에 lazy 키워드가 없다면 에러가 납니다.

       즉, Items 변수가 필요할때 생성되도록하여 초기 실행 에러가 나지 않게 됩니다.

    let item1 = Item()    
    let item2 = Item()    
    let item3 = Item()    
    lazy var items: [Item] = {        
    	return [item1, item2, item3]    
    }()

     -> 이렇게 분명 생성되어 필요하지만 처음부터 메모리를 잡아먹지 않아도되는것에 대해 lazy 선언해주는것 !!!

    lazy 사용을 위한 필수적인 사항

    1. lazy 키워드는 var 사용
      : lazy
      선언한 변수는 초기값이 존재하지 않고 이후 값이 생김으로 let으로 선언할 없음으로 당연한 사항
    2. struct / class
      : lazy
      두가지 타입안에서만 사용
    3. lazy 연산 프로퍼티에서는 사용할 없음
      : lazy
      변수는 처음 불러지면 메모리를 잡게되고 추후 메모리에 잡힌 값을 사용함으로 불려질때마다 연산을 하게되는 연산 프로퍼티에서는 사용할 없음
      -> lazy
      변수에 연산 값을 넣기위해서는 closure 사용

    [참고자료]

    https://baked-corn.tistory.com/45

     

    'Swift' 카테고리의 다른 글

    Optional Chaining  (0) 2021.04.12
    GCD & Operation  (0) 2021.04.09
    Swift Performance  (0) 2021.03.01
    ARC 심화  (0) 2021.02.17
    Type Casting  (0) 2021.01.29
Designed by Tistory.