Properties(프로퍼티) 란?
클래스, 구조체 또는 열거형 등에 관련된 값을 뜻한다.
프로퍼티는 세가지 종류가 있습니다.
저장 프로퍼티 - 인스턴스의 변수 또는 상수를 의미
연산 프로퍼티 - 값을 저장하는 것이 아니라 특정 연산을 실행하는 결과 값을 의미
타입 프로퍼티 - 특정 인스턴스에서 사용되는 것이 아닌 특정 타입에서 사용되는 프로퍼티
//저장프로퍼티
struct Dog {
var name: String
var gender: String
}
var dog = Dog(name: "gunter", gender: "Male") //Dog
print(dog) //"Dog(name: "gunter", gender: "Male")\n"
dog.name = "홍길동" //Dog
let dog2 = Dog(name: "gunter", gender: "male") //Dog
//dog2.name = "홍길동" //구조체가 값 타입이라 Cannot assign to property: 'dog2' is a 'let' constant
class Cat {
var name: String
let gender: String
init(name: String, gender: String) {
self.name = name
self.gender = gender
}
}
//cat 인스턴스의 name이라는 프로퍼티가 gunter로 변경, 구조체는 값 타입이라 상수로 선언하게면 변수로 선언된 프로퍼티여도 값 변경 안됨 클래스는 참조타입이라 상수로 선언해도 프로퍼티의 값이 변경 가능, 상수로 선언된 젠더 프로퍼티는 값 변경 안됨
let cat = Cat(name: "json", gender: "male") //Cat
cat.name = "gunter" //Cat
print(cat.name) //"gunter\n"
//연산프로퍼티 - 클래스 구조체 열거형에서 사용 가능, 값을 직접적으로 저장안하고 게터세터를 이용해 다른 프로퍼티와 값들을 직접적으로 접근
struct Stock {
var averagePrice: Int
var quantity: Int
var purchasePrice: Int {
get {
return averagePrice * quantity //6900
}
set(newPrice) {
averagePrice = newPrice / quantity //Stock
}
}
}
var stock = Stock(averagePrice: 2300, quantity: 3) //Stock
print(stock) //"Stock(averagePrice: 2300, quantity: 3)\n"
stock.purchasePrice //6900
stock.purchasePrice = 3000 //Stock
stock.averagePrice //1000
//프로퍼티 옵저버 - 프로퍼티 값의 변화를 관찰하고 반응, 새로운 값이 기존 값과 같더라도 프로퍼티 옵저버 호출 프로퍼티가 셋될때마다 호출, 3가지 경우에만 사용가능 - 저장, 오버라이딩된 저장계산 프로퍼티
class Account {
var credit: Int = 0 {
//소괄호 이름 지정
willSet { //값이 저장되기 직전에 호출되는 옵저버, 새로 저장될 프로퍼티의 값을 상수 매개변수로 전달
print("잔액이 \(credit)원에서 \(newValue)원으로 변경될 예정입니다.") //"잔액이 0원에서 1000원으로 변경될 예정입니다.\n"
}
didSet { //값이 저장된 직후에 호출되는 옵저버, 프로퍼티의 기존 값을 상수 매개변수로 전달
print("잔액이 \(oldValue)원에서 \(credit)원으로 변경되었습니다.") //"잔액이 0원에서 1000원으로 변경되었습니다.\n"
}
}
}
var account = Account() //Account
account.credit = 1000 //Account
//타입 프로퍼티 - 인스턴스 생성없이 객채내에 프로퍼티에 접근을 가능하게 함, 프로퍼티 타입 자체와 연결
struct SomeStructure {
static var storedTypeProperty = "Some value." //스토어
static var computedTypeProperty: Int { //컴퓨티드
return 1 //1
}
}
SomeStructure.computedTypeProperty //1
SomeStructure.storedTypeProperty //"Some value"
SomeStructure.storedTypeProperty = "hello"
SomeStructure.storedTypeProperty //"hello"
'개발 > Ios(Swift)' 카테고리의 다른 글
IOS 스위프트(Swift) 문법 - 상속 (0) | 2021.08.19 |
---|---|
IOS 스위프트(Swift) 문법 - 클래스와 구조체의 차이 (0) | 2021.08.19 |
IOS 스위프트(Swift) 문법 - 초기화 구문 init (0) | 2021.08.17 |
IOS 스위프트(Swift) 문법 - 클래스 (0) | 2021.08.17 |
IOS 스위프트(Swift) 문법 - 구조체 (0) | 2021.08.17 |