클래스, 구조체 또는 열거형 등에 관련된 값을 뜻한다.
인스턴스에 소속된 변수 및 속성이라고 생각하면 된다.
struct Person {
var name: String
let gender : String
}
var person = Person(name: "Duhyeon", gender: "male")
print(person)
// Person(name: "Duhyeon", gender: "male")
선어한 person을 만약 상수로 바꾼다면 ?
let person2 = Person(name: "Hong", gender: "male")
person2.name = "HongDuhyeon"
//error : cannot assign to property: 'person2' is a 'let' constant
처음에 구조체에 선언될 때 상수로 지정이 되어 있어서 person2에서 값을 바꾸려하면 내부 프로퍼티가 모두 상수가 되어서 에러가 난다.
class는 참조 타입이여서 구조체와 다른 결과값이 나오게 된다.
class는 상수로 선언했더라도 프로퍼티의 값을 바꿀 수 있다.
프로퍼티 값의 변화를 관찰하고 반응한다. 새로운 값이 기존 값과 같더라도 호출 된다. 저장 프로퍼티, 오버라이딩이 된 저장/계산 프로퍼티에서만 사용이 가능하다.
2가지 속성
willSet
: 값이 저장 되기 직전에 호출되는 옵저버, 새로 저장될 프로퍼티의 값을 상수 매개변수로 전달한다. 이 매개변수를 willSet안에서 사용될 수 있도록 정할 수 있다. 만약 매개변수를 사용하지 않는다면 newValue를 사용할 수 있다.
didSet
: 값이 저장 된 직후에 호출되는 옵저버, 프로퍼티의 기본 값이 상수 매개변수로 전달된다. 이 매개변수를 didSet안에서 사용될 수 있도록 정할 수 있다. 만약 매개변수를 사용하지 않는다면 oldValue를 사용할 수 있다.
위 사진에서도 보다시피 값이 저장되기 전,후로 실행이 된다.
특정 인스턴스에서 사용되는게 아닌 특정 타입에서 사용되는 값을 의미하고 인스턴스의 생성없이 객체내의 프로퍼티의 접근을 가능하게 한다. 프로퍼티 타입 자체와 연결하는 것을 말한다.