Link
Notice
HIT해
[Swift 기초문법 - 23] lazy 키워드 본문
728x90
Lazy란?
메모리에 바로 올리지 않고 사용할 떄 올리게 하는 키워드다.
예시코드
import UIKit
struct Pet {
init(){
print("Pet 이 생성되었다.")
}
}
struct Friend {
var name: String
var pet : Pet = Pet ()
init(_ name: String){
self.name = name
print("Friend 가 생성됨")
}
}
var myFriend = Friend("자우림")
Friend에서 Pet이 생성이 되면 메모리에 올라가고 init이 실행되어 아래와 같은 실행 순서를 보이게 된다.
Pet 이 생성되었다.
Friend 가 생성됨
변수 앞에 lazy를 붙여보자
import UIKit
struct Pet {
init(){
print("Pet 이 생성되었다.")
}
}
struct Friend {
var name: String
lazy var pet : Pet = Pet ()
init(_ name: String){
self.name = name
print("Friend 가 생성됨")
}
}
var myFriend = Friend("자우림")
myFriend.pet
실행 결과
Friend 가 생성됨
Pet 이 생성되었다.
정리하자면
lazy는 인스턴스가 생성될때 메모리에 올리는게 아니라 접근했을때 메모리에 올리는 것이다.
프로젝트 사용예시
1.UIKit에서는
메모리에 올리지 않고 사용할때 메모리에 올리겠다!
2.Combine에서는
@Published var tempArray : [String] = []
lazy var arrayCount : AnyPublisher<Int, Never> $tempArray.map{ (array : [String]) -> Int in
return array.count
}.eraseToAnyPublisher() // 자료형을 바꾸기 위해서
lazy를 붙였기 때문애 tempArray값이 들어올 때 발동이 된다
var disposableBag = Set<AnyCancellable>()
self.viewModel.arrayCount.sink { arrayCount in
print("ViewController - arrayCount :", arrayCount)
self.nagicationItem.title = "배열 갯수 : \(arrayCount)"
}.store(in:&disposableBag)
최초에 메모리에 올라갈때 값을 내뱉는데 빈 배열이라 처음에는 0이 보이고
배열값이 늘어나거나 줄어들때 변수에 접근해서 변하게 된다!
정리하자면
메모리 접근제어를 통해 사용자에게 보다 가벼운 서비스를 제공하는데에 유용할 것 같다!
'Swift > 기초문법' 카테고리의 다른 글
[Swift 기초문법 - 25] 고차함수 sort, sorted 정렬 (0) | 2024.08.14 |
---|---|
[Swift 기초문법 - 24] 고차함수 Higher Order Function (0) | 2024.08.14 |
[Swift 기초문법 - 22] 별칭 typealias (0) | 2024.08.14 |
Extenstion (0) | 2024.08.07 |
[Swift 기초문법 - 21] 프로토콜 (0) | 2024.07.16 |