
프로퍼티 관련해서 알아야할게 3가지 정도로 보인다.
Property, KeyPath, Property Observer(빨간색)
Property는 Stored, Computed, Type(파란색)으로 나뉘고 밑의 초록색이 관련해서 알아야할것들이다.
'요약만함'
Property
Stored Property
-
값이 저장됨
-
클래스에서 저장 프로퍼티는 initialize 구현이 필요하나 구조체는 아님.
-
구조체는 initialize를 자동으로 구현해줌
-
클래스에서 initialize 구현하지 않으려면, 초기값을 지정해주거나 옵셔널로 지정하면 됨
-
lazy는 프로퍼티에 접근할 때 한번만 사용되는 인스턴스가 초기화됨(멀티스레드에서 여러번 초기화될수도 있음)
Computed Property
-
값을 저장하지 않고 프로퍼티를 불러오려하면 연산한 값을 반환함
-
get set 구현을 통해 직관적으로 보이게함
Type Property
- 인스턴스를 사용하지 않고 타입으로 값에 접근할 수 있다해서 타입 프로퍼티임
(예를 들면 class A에서 A().x 와 같이 접근하지 않고 A.x로 접근함)
-
static을 붙여서 타입 프로퍼티를 생성하고 유일한 값을 가짐
-
저장 타입 프로퍼티는 lazy 키워드가 없이도 지연연산됨(멀티스레드에서 단한번만 초기화됨이 보장)
KeyPath
KeyPath를 통해 프로퍼티의 위치만 참조할 수 있다.
그리고 이를 Subscript를 통해 프로퍼티에 접근시킬 수 있음.
또한 KeyPath를 통해 map, compactMap, filter에서 클로저 대신 사용해서 가독성 더 좋게할 수 있음.
Property Observer
프로퍼티의 값이 변경될 때 자동으로 함수가 출력되도록 할 수 있음
그 함수들은 willSet과 didSet으로 이루어져 있고,
willSet은 값의 변경 직전에 호출되고
didSet은 변경 직후에 호출됨