프로퍼티란?
클래스, 구조체, 열거형 등에 값을 할당하는 것을 뜻함
1. 저장프로퍼티
- 변수나 상수를 클래스나 구조체의 일부분으로 저장하는 것
- 구조체, 클래스에서 사용가능
Struct 경우
Person구조체를 인스턴스화 해보겠음
이처럼 인스턴스에 프로퍼티의 값이 저장되는 것을 저장프로퍼티라고함
age를 let으로 선언했기 때문에 변경불가
인스턴스를 생성할때 변수로 people2를 생성하고 값을 변경하고 싶다고 해서 막 바꾸게 되면 ?? 에러남
이유는 구조체는 값타입이기 때문에 저장 프로퍼티들이 Stack영역에 올라가
인스턴스를 let으로 선언하는 순간 구조체의 모든 멤버를 변경불가
구조체 인스턴스를 상수로 선언하면 내부 프로퍼티도 모두 상수가 되어 수정 불가
Class 경우
class 는 참조 타입이기 때문에 인스턴스를 상수로 선언하게 되어도 프로퍼티의 값이 변경 될 수 있음
person이라는 주소값이 상수로 Stack영역에 저장되고
실제 name과 age는 힙영역에 저장 프로퍼티로 저장됨
스택에 있는 person이라는 상수는 힙영역을 참조하고 있는 것임
상수로 선언한 age는 값을 변경할 수 없는 것은 마찬가지임
2. 연산프로퍼티
- 값을 직접 사용(저장)하지 않고 get,set(getter,setter)을 이용해 다른 프로퍼티와 값을 직접 접근할 수 있음
- 구조체, 클래스,열거형에서 시용가능
- 인스턴스의 내외부 값을 연산해 적절한 값을 돌려주는 접근자 역할, 내부의 프로퍼티 값을 간접적으로 설정하는 설정자역할
- set을 사용하지 않고 get만 사용해 읽기전용 프로퍼티로 만들 수 있음 (대신 값은 변경 불가능)
- Rect 구조체에서 사용
용돈(Dragonmoney) 구조체를 만들어 get 과 set을 이용해 다른프로퍼티와 값을 직접 접근해 보았음
.monthMoney에 접근하였을 경우 get 블록 접근하는 것을 볼 수 있음
.monthMoney에 값을 변경할 경우 set 블록에 접근하는 것을 볼 수 있음
이때 set의 매개변수를 지정하지 않으면 다음과 같이 newValue를 사용하면 되고 매개변수 사용할 경우
set(매개변수이름){
블록안에서 매개변수이름을 사용하면됨
}
3. 프로퍼티옵져버
- 프로퍼티 값을 관찰하고 이에 대해 반영함
- 새로운 값이 기존 값과 같더라도 호출됨
- 저장프로퍼티, 상속된 저장,연산프로퍼티에서 사용가능
- 값을 저장하는 것이 아니라 특정 실행한 결과값을 의미함
- 상속된 프로퍼티들은 서브클래스된 프로퍼티에 오버라이딩 함 으로써 프로퍼티 감시자를 사용 할 수 있음
willSet블록은 변경되기 직전호출되는 옵저버
-새로 저장될 프로퍼티의 값을 상수 매개변수로 전달
didSet블록은 변경된 직후 호출되는 옵저버
-프로퍼티의 기존값이 상수매개변수로전달됨
willSet,과 didSet은 매개변수를 이용해 블록에서 사용 할 수 있음
ex)
willSet (hello){
print("영어로 인사할께요.\(hello)")
}
default값(매개변수 만들어주지 않으면)으로 newValue로 사용가능
didSet (bye){
print("영어로 인사할께요.\(bye)")
}
default값(매개변수 만들어주지 않으면)으로 oldValue로 사용가능
4.타입프로퍼티
-인스턴스 생성없이 객체 내에 프로퍼티에 접근을 가능하게 하는 것
- 프로퍼티 타입 자체와 연결하는 것
- 저장프로퍼티, 연산프로퍼티에서만 사용가능
- static 키워드를 사용하여 정의함
- 변수에 클래스를 할당하여 인스턴스를 생성하지 않고도 프로퍼티를 사용할 수 있음
인스턴스를 생성하지 않아도 타입프로퍼티의 이름을 점으로 연결해주면 가능하며 값도 변경 가능함
'Swift랑 친해지기 > Swift문법정리' 카테고리의 다른 글
[Swift] 타입캐스팅 (is, as, as?, as!) (1) | 2022.09.20 |
---|---|
[Swift] 클래스 vs 구조체 (class vs struct) (1) | 2022.09.19 |
(Swift) Class (클래스) 간단히 정리 (0) | 2022.09.18 |
[Swift] 구조체 (간단히 정리) (0) | 2022.09.17 |
[Swift] 옵셔널 해제 간단 정리 (0) | 2022.09.17 |