
1. 저장 프로퍼티
- 입력된 값을 저장하거나 저장된 값을 제공하는 역할이다.
- 상수 및 변수를 사용해서 정의 가능하다.
- 클래스와 구조체에서는 사용이 가능하지만, 열거형에서는 사용할 수 없다.
class PropertyInit {
var value01: String! = {
print("value01 execute")
return "value01"
}()
let value02: String! = {
print("value02 execute")
return "value02"
}()
}
2. 연산 프로퍼티
- 특정 연산을 통해 값을 만들어 제공하는 역할이다.
- 변수만 사용해서 정의가 가능하다.
- 클래스, 구조체, 열거형 모두에서 사용이 가능하다.
import Foundation
struct UserInfo {
var birth: Int!
var thisYear: Int! {
get {
let df = DateFormatter()
df.dateFormat = "yyyy"
return Int(df.string(from: Date()))
}
}
var age: Int {
get {
return (self.thisYear - self.birth) + 1
}
}
}
let info = UserInfo(birth: 1980)
print(info.age)
37
3. 프로퍼티 옵저버
- 특정 프로퍼티를 계속 관찰하고 있다가 프로퍼티의 값이 변경되면 이를 알아차리고 반응하며, 프로퍼티의 값이 설정되면 무조건 호출되며, 동일한 값이 재할당되더라도 호출된다.
4. 타입 프로퍼티
- 타입 프로퍼티는 인스턴스를 생성하지 않고 클래스나 구조체 자체에 저장하게 되며, 저장된 값은 모든 인스턴스가 공통으로 사용할 수 있다.
- 모든 인스턴스들이 공유해야 하는 값을 정의할 때 유용하다.
static let/var 프로퍼티명 = 초기값