티스토리 뷰
private lazy var dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
코드를 보다보면 lazy 라는걸 한번쯤 보셨을거에요.
오늘은 Lazy Property에 대해 알아 보려고해요 !
단어뜻으로 보면 게으르다는 뜻인데 어떤 뜻인지 같이 알아보겠습니다 :)
Lazy Stored Properties (지연 저장 프로퍼티 )
값이 사용되기 전에는 계산되지 않는 프로퍼티입니다.
불려지기 전에는 가만히 있는 애인가 보네요.
선언
프로퍼티의 선언 앞에 lazy 키워드를 붙이면 됩니다.
아래처럼 말이죠.
// lazy var 변수명: 타입 = 초기값
// ex)
lazy var age: Int = 1000
⚠️ 주의
1. 반드시 변수 (var)로 선언해야 합니다.
지연 프로퍼티는 처음 사용되기 전엔 값을 갖지 않는 프로퍼티이기 때문이에요.
글로만 보기엔 이해하기 역시 어렵네요.
예제로 같이 보시죠 !
눈으로 보는것보단 Playground에 같이 따라하는게 더 이해가 잘갑니다 :)
class Poop {
init() {
print("💩 ")
}
}
class Stomachache {
lazy var success = Poop()
init() {
print("하늘이 그레이 색이야, 제발 좀 나와~ 😫")
}
}
let goToToilet = Stomachache()
먼저 Poop과 Stomachache라는 Class를 만들었어요.
위의 코드를 실행해보면 아래와 같이 나옵니다.
💩 이게 왜 안나오는지 의아하시죠!?
앞서 정의에서 말씀드렸듯이 var 앞에 lazy가 붙으면 해당 프로퍼티가 불려지기 전에는 아무 응답이 없어요 !!
그럼 쾌변을 봐볼까요 !!
class Poop {
init() {
print("💩 ")
}
}
class Stomachache {
lazy var success = Poop()
init() {
print("하늘이 그레이 색이야, 제발 좀 나와~ 😫")
}
}
쾌변을 보기 위해선 Stomachache 안에 있는 success라는 변수에 접근을 해야해요.
접근은 어떻게 한다 ?
dot(.) 으로 한다.
let goToToilet = Stomachache()
goToToilet.success // Stomachache Class 안에 success 프로퍼티에 접근!!
그럼 이제 접근해서 쾌변을 봐봅시다.
그럼 lazy가 없는상태도 어떻게 나오는지 한번 봐볼게요 !
class Poop {
init() {
print("💩 ")
}
}
class Stomachache {
var success = Poop() // lazy 삭제
init() {
print("하늘이 그레이 색이야, 제발 좀 나와~ 😫")
}
}
let goToToilet = Stomachache()
// goToToilet.success .success에 접근하는것도 삭제
본의아니게 순서가 좀 그러네요..
어떠신가요 ?? lazy가 있고 없고의 차이점이 조금은 감이 잡히셨나요??
조금더 이해를 돕기 위해 예제를 하나더 해볼게요.
예를들어 height를 불러오고싶지 않을때
class Peppo {
let name: String
var age: Int
var gender: String
lazy var peppoPrivate = PeppoPrivate() // lazy 확인 !!
init() {
self.name = "peppo"
self.age = 500
self.gender = ""
}
}
class PeppoPrivate {
var height: Int
init() {
self.height = 200
}
}
let peppo = Peppo()
이렇게 height가 호출되지않아요.
그럼 키를 불러오려면?
위에서 했으니 이제 불러오실수 있겠죠 ?
peppo.peppoPrivate
이렇게 !!
지연 저장 프로퍼티는 이럴때 쓰여요.
계산이 오래걸리는 프로퍼티가 필요하거나, 필요한 경우에만 사용할 때
복잡한 클래스나 구조체를 구현할때 등등
잘 활용하면 불필요한 메모리 낭비도 줄일수 있어요!
'iOS' 카테고리의 다른 글
[Swift] The Basics (0) | 2021.12.08 |
---|---|
[Swift] 기본 연산자 (Basic) (0) | 2021.12.05 |
[iOS] DatePicker, DateFormatter (0) | 2021.11.25 |
[Swift] 프로퍼티 (Properties) (0) | 2021.11.24 |
[Swift] 인스턴스 (instance) / 메서드 (methods) (0) | 2021.11.17 |
- Total
- Today
- Yesterday
- Swift ModernRIBs
- 원티드 프리온보딩
- Swift joined
- Swift joined()
- RTCCameraVideoCapturer
- Swift Error Handling
- Class
- Swift init
- swift protocol
- iOS error
- Combine: Asynchronous Programming with Swift
- Swift Leetcode
- Swift 알고리즘
- Swift RIBs
- CS 네트워크
- Swift final
- removeLast()
- swift 고차함수
- Swift 프로그래머스
- swift programmers
- Swift 내림차순
- swift reduce
- Swift 프로퍼티
- ios
- Swift inout
- swift property
- Swift
- RIBs tutorial
- swift (programmers)
- 2023년 회고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |