프로퍼티란?
클래스, 구조체, 열거형 등의 타입 내부에 선언되는 변수 또는 상수 이름
저장 프로퍼티는 클래스 또는 구조체 내부에 변수 또는 상수로 선언된다.
값을 인스턴스 내에 저장하고, 인스턴스가 생성될 때 초기값을 할당할 수 있다.
초기값을 지정하지 않으면 옵셔널 타입으로 자동으로 초기화된다.
let name = ""
var age = 25
연산 프로퍼티는 실제 값을 저장하지 않고, 특정 계산 로직을 실행하여 값을 반환한다.
get 블록을 사용하여 값을 읽고, set 블록을 사용하여 값을 설정할 수 있다.
var wallet: Int = 1000
var counter: Int {
get {
return wallet
}
set(money) {
wallet += money
}
}
프로퍼티 옵저버는 프로퍼티의 값이 변경될 때 특정 동작을 수행하는 기능을 제공한다.
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
지연 저장 프로퍼티는 프로퍼티가 처음으로 사용될 때까지 초기화되지 않고, 처음 접근될 때 초기화된다.
주로 초기화 비용이 많이 드는 프로퍼티에 사용 -> 불필요한 성능 저하나 공간 낭비 줄일 수 있다.
lazy 키워드를 사용하고, let은 지연 저장 프로퍼티로 사용할 수 없다 -> 무조건 var
class SomeClass {
lazy var expensiveProperty: Int = {
// 초기화 코드
return 4
}()
}
타입 프로퍼티는 특정 타입 자체에 속하는 프로퍼티로, 모든 인스턴스가 공유한다.
일반적인 값 타입의 경우 static 키워드를 사용하여 선언하고,
클래스의 경우 class 키워드를 사용하여 상속 가능한 타입 프로퍼티를 선언할 수 있다.
struct Math {
static let pi = 3.14159265359
}