프로퍼티는 속성이라고도 불린다.
객체의 일부로, 이름과 값 사이의 연결을 의미힌다.
즉, 프로퍼티는 객체를 구성하는 블록(내부의 속성)들이다.
프로퍼티의 종류는 5가지로 나눌 수 있다.
- 인스턴스 저장 프로퍼티
- 타입 저장 프로퍼티
- 인스턴스 연산 프로퍼티
- 타입 연산 프로퍼티
- 지연 저장 프로퍼티
저장 프로퍼티
저장 프로퍼티는 단순히 값을 저장하고 있는 프로퍼티 입니다.
let 키워드로 불변, var 키워드로 가변 프로퍼티를 만들 수 있습니다.
struct Coordinate{
//불변 프로퍼티로 선언 후 변경 불가
let x: Int
//가변 프로퍼티로 값 변경이 자유로움
var t: Int
}
var pointA = Coordinate(x: 0, y: 4)
pointA.x = 2 //error 불변 프로퍼티는 변경 불가능.
porintA.y = 9
타입 프로퍼티
타입 프로퍼티 선언을 위해 static 및 class의 두가지 형태를 사용합니다.
class 형태는 static과 달리 자식클래스에서 상속받아 재정의가 가능합니다.
물론 값 타입인 열거형과 구조체에서는 상속이나 재정의가 불가능하니,
class의 기능은 무용지물입니다 ㅠ
class Intro {
static var name: String{
return "녹색하늘"
}
class var age: Int{
return 20
}
func print(){
Swift.print(" \(Intro.name)은 \(Intro.age)살 입니다. ")
}
}
class Intro2 : Intro {
override class var age: Int{
return 25
}
/*
static 타입 변수는 재정의가 불가능합니다.
override class var name: Int{
return "푸른하늘"
}
*/
override func print(){
Swift.print(" \(Intro.name)은 \(Intro2.age)살 입니다. ")
}
}
var a : Intro = Intro()
var b : Intro2 = Intro2()
a.print() // 녹색하늘은 20살 입니다.
b.print() // 녹색하늘은 25살 입니다.
연산 프로퍼티
연산 프로퍼티는 실제 값을 저장하고 있는게 아니라, getter와 옵셔널한 setter값을 제공해서
값을 탐색하고 다른 프로퍼티값 또한 설정할 수 있니다.
연산 프로퍼티는 var로만 선언이 가능합니다.
struct Exchange {
var rate: Double = 1200
var dollar: Double = 0
var won : Double{
get{
return dollar * rate
}
set{
//set (매개변수명)을 입력하지 않았을시 자동으로 newValue사용가능
dollar = newValue / rate
}
}
}
var myMoney = Exchange()
//won을 직접 입력하는것도 가능합니다.
myMoney.won = 10000
print (myMoney.won) //10000.0
myMoney.dollar = 11
print(myMoney.won) //13200.0
저장 프로퍼티와 연산 프로퍼티의 기능은
함수, 메서드, 클로저, 타입 등 외부에 위치한 지역/전역 변수에도 모두 사용가능합니다.
var rate = 1000
var dollar = 40
var exchange: Int{
return rate * dollar
}
print(exchange) // 40000
프로퍼티 감시자
프로퍼티의 값이 변경될 때 동작합니다.
값의 변경전엔 willSet 블럭이, 직후엔 didSet이 호출됩니다.
변경 전후로 모두 암시적 매개변수 newValue, oldValue를 사용가능합니다.
struct Exchange {
var rate: Double = 1200 {
willSet{ print("환율이 \(rate)에서 \(newValue)로 변경될 예정입니다.")}
didSet{ print("환율이 \(oldValue)에서 \(rate)로 변경됬습니다.") }
}
var dollar: Double = 0
var won : Double{
get{ return dollar * rate }
set{ dollar = newValue / rate }
}
}
var myMoney = Exchange()
myMoney.rate = 1100
//환율이 1200.0에서 1100.0로 변경될 예정입니다.
//환율이 1200.0에서 1100.0로 변경됬습니다.
공부에 도움을 준 사이트들
전반적인 공부 가이드라인
애플 공식 스위프트 언어 가이드 한국어 변역 사이트
https://jusung.gitbook.io/the-swift-language-guide/language-guide/10-properties
property에 대한 추가 이해
https://m.blog.naver.com/magnking/220966405605
'Language > Swift' 카테고리의 다른 글
Swift 타입캐스팅 (형변환) (0) | 2021.03.13 |
---|---|
Swift 인스턴스의 생성과 소멸 (0) | 2021.03.12 |
Swift 클로저 (0) | 2021.03.11 |
Swift 사용자 정의 타입 - 값타입과 참조 타입 [추가정리] (0) | 2021.03.11 |
Swift 사용자 정의 타입 - enum (0) | 2021.03.11 |