티스토리 뷰
여러분 혹시 스토리보드를 사용하지 않고 코드를 통해 뷰를 작성 해보신 적 있으세요?
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가 보장되었다고 부릅니다.
'iOS' 카테고리의 다른 글
[iOS] AutoLayout을 코드로 작성하는 방법 (0) | 2021.10.11 |
---|---|
[iOS] iOS 면접 질문 정리 (0) | 2021.10.11 |
[iOS] NotificationCenter는 중앙우체국 (0) | 2021.07.27 |
[iOS] Update Cycle: 뷰 업데이트 메소드 (0) | 2021.07.11 |
[Rx] Reusable Cell의 흔적이 남는다 (0) | 2021.05.17 |
- Total
- Today
- Yesterday
- 운영체제
- 알고리즘
- 부스트캠프
- 개발자인턴
- 소프트웨어아카데미
- RxSwift
- nosql
- ios
- C++
- 프로그래머스
- 소프트웨어역량시험
- 부캠
- 졸업작품
- 컴공졸작
- OS
- TableView
- 컴퓨터공학
- firebase
- 데이터분석
- 커넥트재단
- 부스트캠프2020
- 삼성소프트웨어아카데미
- 삼성
- 코테
- 코딩테스트
- 컴과졸작
- SWIFT
- swacademy
- 인턴
- 보안
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |