728x90
반응형
프로퍼티란?
클래스, 구조체, 열거형 등에 관련된 값이다.
저장 프로퍼티, 연산 프로퍼티, 타입 프로퍼티에 대해 알아보자.
1. 저장 프로퍼티
- 인스턴스의 변수 또는 상수를 의미한다.
- 변수나 상수로 선언된 클래스나 구조체의 일부분으로 저장되는 것
- 인스턴스가 상수(let)로 선언되었다면, 구조체 내에 저장 프로퍼티는 변경 불가능하다.
- 구조체가 값 타입이고, 구조체 내부의 프로퍼티들이 모두 상수가 되기 때문
- But, 클래스는 참조 타입이어서 인스턴스를 상수로 선언해도 프로퍼티의 값을 변경할 수 있다.
struct Dog {
var name: String
let gender: String
}
var dog = Dog(name: "iku", gender: "Male")
dog.gender = "Female" // 에러 - 프로퍼티가 상수이기 때문에
let dog2 = Dog(name: "mojji", gender: "Male")
dog2.name = "nara" // 에러 - 인스턴스가 상수이기 때문에
2. 연산 프로퍼티
- 값을 직접적으로 저장하지 않는 대신, getter와 setter를 사용해 다른 프로퍼티에 직접적으로 접근한다.
- 인스턴스 내,외부의 값을 연산해서 적절한 값을 돌려주는 접근자 역할이나
- 내부의 프로퍼티의 값을 간접적으로 설정하는 설정자 역할을 할 수 있다.
- set 말고 get 만 쓰면 읽기 전용 프로퍼티가 된다.
- set 매개변수를 설정해주지 않으면 디폴트로 newValue로 값이 설정된다.
struct Stock {
var averagePrice: Int
var quantity: Int
var purchasePrice: Int {
get {
return averagePrice * quantity
}
set(newPrice) {
averagePrice = newValue / quantity
}
}
}
var stock = Stock(averagePrice: 2300, quantity: 3)
3. 타입 프로퍼티
인스턴스 생성 없이 객체 내에 프로퍼티에 접근을 가능하게 하는 것
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 1
}
}
SomeStructure.computedTypeProperty
SomeStructure.storedTypeProperty
4. 프로퍼티 옵저버
- 프로퍼티의 값의 변화를 관찰하고 반영한다.
- 새로운 값이 기존 값과 같더라도 프로퍼티 옵저버는 호출된다.
- 프로퍼티가 set 될 때마다 호출된다고 생각하면 된다.
willSet 옵저버
- 새로 저장될 프로퍼티의 값을 상수 매개변수로 전달한다.
- 이 값을 willSet 구문 안에서 사용할 수 있고, 지정하지 않으면 디폴트로 newValue로 사용한다.
didSet 옵저버
- 프로퍼티의 기존 값이 상수 매개변수로 전달된다.
- 이 변수를 didSet 구문안에서 사용할 수 있으며, 지정하지 않으면 디폴트로 oldValue로 사용한다.
class Account {
var credit: Int = 0 {
willSet {
print("잔액이 \(credit)원에서 \(newValue)원으로 변경될 예정입니다.")
}
didSet {
print("잔액이 \(oldValue)원에서 \(credit)원으로 변경되었습니다.")
}
}
}
var account = Account()
account.credit = 1000
// Prints "잔액이 0원에서 1000원으로 변경될 예정입니다."
// Prints "잔액이 0원에서 1000원으로 변경되었습니다."
출처: [패스트캠퍼스] 30개 프로젝트로 배우는 iOS 앱 개발 with Swift 초격차 패키지 Online.
728x90
반응형