본문 바로가기

Swift

[Swift] Lazy 키워드

안녕하세요 태태입니다. 💜 이번 포스팅은 lazy 키워드에 대해 학습해보려 합니다. 👀

 

학습보단, 예전에 학습했던 내용을 상기하려는 목적이 강한 글으로 봐주셨으면 합니다.

 

처음 Lazy 라는 키워드를 보았을때, 게으른..? 뭔가 느린건가? 라는 생각을 했던 기억이 나네요.

 

그럼 애플 공식문서에서는 어떻게 정의하고 있을까요?

"A lazy stored property is a property whose initial value is not calculated until the first time it is used"


즉, lazy 저장 프로퍼티는 처음으로 사용되기 전까지 초기 값이 연산되지 않는다. 라고 해석해 볼 수 있습니다.

그럼 어떤 경우에 lazy를 사용하면 될까요?

앱이 실행되었을때, 항상 사용되는 것은 아니지만 가지고 있기 무거운 녀석을 lazy를 사용하면 되지 않을까요? 
이해를 돕기 위한 예시를 들자면, 메인화면에 유튜브의 쇼츠 같은 기능이 있다고 해볼게요.

그러면 앱을 처음 실행 했을때 쇼츠에 해당하는 모든 영상을 다 가져온다면, 아주 큰 작업이겠죠..? 
이 기능은 항상 사용되는 것은 아니지만 메인화면에서 가지고 있어야하는데요. 만약 사용자가 이 기능에 접근하지 않는다면 쓸데없이 메모리만 차지 하고 있을거란 말이죠.
따라서, 해당 영상은 사용자가 직접 해당 기능을 실행 했을때만 서버로부터 로드되어 보여주는게 좋을 것 같아요.

이처럼 가지고 있어야 하지만 지금 당장 필요하지 않은 무언가들을 lazy를 통해 선언해주는 것이죠.


그렇다면 Lazy를 사용하는데 있어서 고려해야할 사항들은 무엇이 있을까요?

  • Lazy는 Class 또는 Struct에서만 사용가능합니다.
  • Lazy는 let과 함께 사용할 수 없습니다.
    즉, var와 함께 사용해야하는데요. 이는 lazy는 초기에 값이 정해져 있지 않고 이후에 값이 할당 되기 때문입니다. 
  • 연산 프로퍼티(computed property)에도 lazy를 사용할 수 없습니다. 
    lazy는 처음 사용될 때 메모리에 올려두고 그 후 해당 메모리에 올라온 값을 사용하지만, 연산 프로퍼티는 사용할 때 마다 연산해주기 때문에 사용할 수 없습니다.
  • lazy는 Thread Safety 하지 않습니다. 
    lazy는 변수를 자동으로 초기화하지 않아요. 처음 요청 될때만 초기화를 하고 그 이후로는 그 값을 저장합니다. 따라서 처음 값을 유지 합니다. 

참고 자료) 

https://docs.swift.org/swift-book/LanguageGuide/Properties.html#ID257

'Swift' 카테고리의 다른 글

[Swift] @propertyWrapper ?  (0) 2023.12.10
[Swift] UISwitch 크기 변경하기  (0) 2022.02.16