티스토리 뷰

여러분 혹시 스토리보드를 사용하지 않고 코드를 통해 뷰를 작성 해보신 적 있으세요?

private lazy var titleLabel: UILabel = {
   let label = UILabel()
   return label
}()

UI Component를 만들 때 주로 lazy 키워드를 사용하게 되는데요, 어떤 이유로 사용하는걸까요?

Lazy Stored Property

Lazy 키워드를 통해 변수를 선언하면 변수를 사용하기 전까지 값을 할당하지 않습니다.

다음과 같은 경우에 lazy property를 유용하게 사용할 수 있습니다.

1. Property의 초기값이 외부에 의존 되어 있어서 객체의 초기화가 끝나기 전까지 확실치 않을 때

2. Property의 초기값이 복잡한 계산을 요해서 사용 전까지는 계산하지 않는게 좋을 때

 

첫 번째 경우는 안정성을 위해, 두 번째는 성능을 위한 경우라는 생각이 듭니다.

예를 들어볼까요?

잘생긴 Craig에게 면접을 보게 된 제 이야기입니다. 깔깔 🤣

import UIKit

// 면접관
struct Interviewer {
   var name: String?
}

// 면접자
struct Interviewee {
   var name: String
   lazy var interviewer: Interviewer = {
      return Interviewer()
   }()
}

let craig = Interviewer(name: "Craig")

var candidate1 = Interviewee(name: "Sueaty")
candidate1.interviewer = craig

print("\(candidate1.name)'s interviewer is \(candidate1.interviewer.name!)")

Lazy의 특징

⦾ 반드시 변수

    생각해보면 당연합니다. 바로 값을 계산하지 않으니 선언과 동시에 초기화를 해야하는 상수가 될 순 없겠죠.

⦾ Stored Property (O) vs Computed Property (X)

    Lazy property는 최대한 초기화 작업을 지연시켜서 성능향상을 시키는 것인데,

    접근할 때마다 값을 계산해야 하는 computed property로 사용하는 것은 별 의미가 없어보이죠?

Atomically 초기화되지 않아서 스레드 안정성이 떨어진다

 

** CS에서 atomically란? 

: 어떤 동작의 묶음이 동시에 일어나는 것이 보장됨을 의미합니다. (또는 모두 일어나지 않는 것이 보장되거나)

가령 banking system에서 한 쪽에서 돈을 보내면 반드시 다른 쪽이 돈을 받는다는 action이 보장되는 것을 atomicity가 보장되었다고 부릅니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함