오늘은 어제에 이어서 남은 타입 속성 프로퍼티와 속성 감시자에 대해서 공부해보았다.
타입 프로퍼티는 타입 자체에 속한 프로퍼티로, 클래스나 구조체, 열거형의 모든 인스턴스가 공유하는 프로퍼티이다. 즉, 특정 인스턴스에 속하는게 아닌 타입 전체에 속한다.
모든 인스턴스가 같은 타입 프로퍼티에 접근할 수 있으며, 그 값이 변경되면 모든 인스턴스에서 공유가 된다.
내/외부에서 접근이 가능하며, 인스턴스를 생성하지 않아도 타입 이름으로 바로 접근할 수 있다.
-> Type.property로 접근해야한다.
두가지의 타입이 존재하는데 하나는 저장 타입 속성, 다른 하나는 계산 타입 속성이 있다.
저장 타입 속성 : 타입에 속하며 초기값이 저장되고 이후 필요에 따라 수정할 수 있다.
static 키워드를 사용해서 선언let, var 선언이 둘다 가능하고, 항상 기본값(초기값)을 할당해줘야 한다.계산 타입 속성 : 계산된 결과를 반환하며, 항상 최신 상태의 값을 제공한다.
static 키워드 또는 class 키워드를 사용해서 선언 (class 키워드는 subClass에서 재정의 할 수 있다.)var만 사용이 가능하다 (계산 속성이기에) 
프로퍼티의 값이 변경되는지 관찰하고 응답한다. 프로퍼티 관찰자는 프로퍼티의 현재 값이 새로운 값과 같더라도 프로퍼티의 값이 설정될 때 호출된다. 즉, 저장 프로퍼티의 값이 변경될 때 실행되는 코드 블록이다.
var로만 선언 가능하다. -> let은 관찰할 필요가 없고, 지연저장 속성은 관찰이 안되기 때문이다.willSetnewValue라는 매개변수로 전달된다.didSet oldValue는 매개변수로 전달된다.lazy 저장 프로퍼티에서는 관찰자를 사용할 수 없다.(값이 설정되기 전까지 초기화되지 않기 때문)willSet, didSet을 호출되지 않는다. didSet은 값이 변경된 후에 호출을 하기에 변경된 값을 기반으로 작업을 하기에 값을 강제로 원래 상태로 되돌리거나, 에러르 던지는 작업에 적합하지 않는다. willSet은 값이 변경되기 직전에 가능하지 않을까 했지만, 조건을 검사하고 특정 동작을 하게 해줄 순 있지만 이미 값은 변경이 되어서 되돌릴 수가 없기 때문에 부적절하다.
오... 스테틱,, 아직도 스테틱이랑 private 볼 때마다 낯설어요