일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 음식리뷰앱
- quadtree
- vm
- 네이버지도
- NaverMap
- 프로퍼티
- Firebase
- 1002
- MVVM
- StaticLib
- 백준
- clustering
- Oracle
- 섯다족보앱
- JJGram
- 먹튜브
- xcframework
- SwiftUI
- 섯다족보
- IOS
- 클러스터링
- property
- acmicpc
- 음식지도
- cluster
- 프로퍼티 종류
- 먹방지도
- MeTal
- 먹튜브로드
- Swift
- Today
- Total
아반떼오우너의 개발블로그 ㅋㅋ
[iOS] 프로퍼티의 종류 본문
Swift에는 프로퍼티라는 개념이 있다.
흔히 타 언어에서 말하는 지역변수라는 개념으로 보면 되는데,
프로퍼티의 종류에는 크게 5가지로 분류가 가능하겠다.
1. 저장 프로퍼티
2. 지연 저장 프로퍼티
3. 연산 프로퍼티
4. 타입 프로퍼티
5. 프로퍼티 옵저버
각각의 종류에 대해서 간단하게 정리해본다.
1. 저장 프로퍼티
저장 프로퍼티는 가장 일반적인 프로퍼티이다.
말 그대로 값을 저장하는 용도로 사용되는데, 초기값을 설정할수있고, 클래스 구조체에서는 인스턴스와 연관된 값을 저장한다.
let name = "HeoKyuJin"
var age = 30
2. 지연 저장 프로퍼티
지연 저장 프로퍼티는 프로퍼티가 최초로 사용되기 전까지 초기값이 계산되지 않는 특징을 가진다.
lazy키워드를 앞에 붙여 사용할수있고, let을 통해 상수 프로퍼티로의 선언이 불가능하다.
lazy var name: String = "HeoKyuJin"
3. 연산 프로퍼티
실제로 값을 저장하지는 않지만, get/set을 사용하여 값을 간접적으로 설정하거나 받는 프로퍼티이다.
연산 프로퍼티 내에서 연산 프로퍼티를 참조하면 무한 순환이 발생하여 이슈가 발생한다.
var account: Int = 1000
var wallet: Int {
get {
return account
}
set(money) {
account += money
}
}
4. 타입 프로퍼티
타입 프로퍼티는 타입에 따른 속성을 정의할수있다.
static 키워드를 사용해서 값 타입의 타입 프로퍼티를 설정할수있고
class 키워드를 사용하여 클래스 타입에서 타입 프로퍼티를 설정할수있다.
값을 참조할때는 클래스의 이름을 통해 가져온다.
struct AudioChannel {
static let level = 10
static var maxLevel = 0
}
print(AudioChannel.level)
print(AudioChannel.maxLevel)
5. 프로퍼티 옵저버
프로퍼티 옵저버는 프로퍼티의 값이 변경될때 지정된 코드블럭을 실행시켜준다.
Lazy에는 사용이 불가능하고, 저장 프로퍼티에서만 사용이 가능하다.
프로퍼티의 값이 변경되기 직전에 willSet이 호출되고,
프로퍼티의 값이 변경된 직후에는 didSet이 호출된다.
willSet에서는 newValue가, didSet에서는 oldValue가 전달된다.
class Account {
var credit: Int = 0 {
willSet {
print("잔액이 \(credit)에서 \(newValue)으로 변경될 예정입니다.")
}
didSet {
print("잔액이 \(oldValue)에서 \(credit)으로 변경되었습니다.")
}
}
}
let myAccount = Account()
myAccount.credit = 1000
이렇게 Swift의 프로퍼티에 대해 알아보았따.
'iOS' 카테고리의 다른 글
[iOS] Then에 대한 고찰 (0) | 2022.08.26 |
---|---|
[iOS] StaticLibrary를 이용하여 XCFramework 만들기 (0) | 2022.06.29 |
[iOS] 네이버지도 클러스터링 라이브러리 제공하기 (0) | 2022.06.29 |
[iOS] GoogleMap에 적용된 클러스터링 알고리즘 with 네이버지도 (0) | 2022.06.17 |
[iOS] 네이버지도 클러스터링 구현 (0) | 2022.06.16 |