티스토리 뷰
우선, 간단하게 lazy, tpye property 가 무엇인지 정리해보면
- lazy property 는 호출할 때 연산을 하는 지연 연산 프로퍼티이다.
- type property 는 인스턴스에서 호출하는 것이 아닌 타입에서 호출될 때 한 번만 메모리에 올라가는 프로퍼티이다.
✅ lazy property
lazy property 는 인스턴스를 생성할 때 초기값이 연산되지 않고, 호출될 때 지연 연산으로 생성이 되면서 메모리에 올라간다. 그래서 var 로만 사용할 수 있다.
이후 재호출할 때는 다시 초기화가 진행되지 않고 이전에 생성된 변수를 그대로 사용한다.
이를 통해 사용하기 전의 프로퍼티에 대한 메모리를 효율적으로 사용할 수 있다.
✅ type property
type property 는 인스턴스를 생성하지 않고도 타입으로 호출할 수 있다.
static
키워드로 선언되고, 저장 타입 프로퍼티의 경우는 선언할 때 항상 초기화 되어 있어야 한다. 초기화를 하지 않으면 initializer expression(값 지정) 혹은 연산 프로퍼티로(getter/setter)가 필요하다고 오류를 알린다.
❓type property 는 인스턴스가 생성될 때 initializer 에 의해서 초기화되지 않는 것일까?
기본 프로퍼티는 인스턴스가 생성될 때마다 매번 생성된다. 반면에 타입 프로퍼티는 한번 메모리에 올라가면 그 뒤로는 생성되지 않는다. 그렇기 때문에 인스턴스가 생성될 때 호출되는 initializer 와 상관없이 초기값을 가져야만 하는 것이다.
저장 프로퍼티는 호출할 때 최초로 한 번 메모리에 올라가는데 이는 lazy 와 동일하게 작동한다.
❓lazy
는 항상 var 로 선언이되어야 하는데 static
은 let 과 var 모두 가능하다. 왜일까?
lazy 프로퍼티는 인스턴스를 생성할 때 값을 가지지 않고, 사용할 때 지연 연산이 되어 프로퍼티를 생성합니다. 그래서 let 으로 선언하게 되면 값을 변경할 수 없기 때문에 var 로만 선언되어야 한다.
반면에, 타입 프로퍼티는 인스턴스를 생성하는 것과 관계 없이 최초 사용할 때 초기화되기 때문에 let 과 var 로 선언이 가능하다.
- 추가적으로,
static
키워드를 사용하는 타입 프로퍼티와 메소드는 subclass 에서 오버라이딩을 할 수 없다. 이때는class
키워드를 사용하면 가능하다. - type property 는 특정 용도로 객체를 하나만 생성하여 공용으로 사용하는 싱글톤 패턴을 구현할 때 사용된다.
출처:
lazy var 정리
Swift) 프로퍼티 정복하기 (3/4) - 타입 프로퍼티(Type Property)
Swift) 싱글톤 패턴(Singleton Pattern)
'iOS' 카테고리의 다른 글
iOS) 프로젝트 배포 환경별 Build Scheme 세팅(.xcconfig 사용) + key 숨기기 (4) | 2022.10.04 |
---|---|
iOS) main.sync 를 사용하면 왜 안될까요? (0) | 2022.10.03 |
iOS) mutating 키워드는 무엇일까? (0) | 2022.09.26 |
iOS) Live Activities 와 Dynamic Island 뉴스 살펴보기 (0) | 2022.09.25 |
iOS) Xcode 14 업데이트 후 KakaoSDKAuth 업데이트(Stored properties cannot be marked potentially unavailable with @available) (0) | 2022.09.15 |
- WWDC22
- SwiftUI
- github
- watchOS
- WidgetKit
- IOS
- Widget
- urlsession
- CloneCoding
- APNS
- UserDefaults
- MVVM
- projectsetting
- 서버통신
- YPImagePicker
- containerBackground
- Notification
- rxswift
- Firebase
- MOYA
- Objective-C
- WWDC
- configurable widget
- RxCocoa
- async/await
- 2022 KAKAO TECH INTERNSHIP
- Protocol
- Swift
- Algorithm
- OpenSourceLibrary
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Total
- Today
- Yesterday