8.2 프로퍼티
클래스와 구조체를 구성하는 요소 중 하나인 프로퍼티는 우리 말로 번역하면 '속성'으로, 값을 저장하기 위한 목적으로 정의된 변수나 상수라고 배웠습니다. 사실 프로퍼티가 하는 정확한 역할은 값을 제공하는 것입니다.
값을 제공하는 것과 저장하는 것 사이에 차이가 없다고 생각하실 수 있습니다. 저장이 아니라 제공에 목적이 있다고 하는 것은, 프로퍼티 일부는 값을 저장하지는 않지만 값을 제공하는 특성을 갖기 때문입니다.
설명한 것처럼 프로퍼티는 값에 대한 저장 여부를 기준으로 두 가지 종류로 나눌 수 있습니다. 이를 저장 프로퍼티와 연산 프로퍼티라고 합니다. 두 프로퍼티의 차이는 다음과 같습니다.
저장 프로퍼티
입력된 값을 저장하거나 저장된 값을 제공하는 역할
상수 및 변수를 사용해서 정의 가능
클래스와 구조체에서는 사용이 가능하지만, 열거형에서는 사용할 수 없음
연산 프로퍼티
특정 연산을 통해 값을 만들어 제공하는 역할
변수만 사용해서 정의 가능
클래스, 구조체, 열거형 모두에서 사용 가능
저장 프로퍼티와 연산 프로퍼티는 대체로 클래스나 구조체를 바탕으로 만들어진 개별 인스턴스에 소속되어 값을 저장하거나 연산 처리하는 역할을 합니다. 따라서 프로퍼티를 사용하려면 인스턴스가 필요합니다. 인스턴스를 생성한 다음 이 인스턴스를 통해서 프로퍼티를 참조하거나 값을 할당해야 합니다. 예외적으로 일부 프로퍼티는 클래스와 구조체 자체에 소속되어 값을 가지기도 합니다. 이런 프로퍼티들을 타입 프로퍼티(Type Properties)라고 합니다. 타입 프로퍼티는 인스턴스를 생성하지 않아도 사용할 수 있습니다
스위프트에서는 프로퍼티 값을 모니터링하기 위해 프로퍼티 옵저버(Property Observer)를 정의하여, 사용자가 정의한 특정 액션과 반응하도록 처리할 수 있습니다. 프로퍼티 옵저버는 우리가 직접 정의한 저장 프로퍼티에 추가할 수 있으며 슈퍼 클래스로부터 상속받은 서브 클래스에서도 추가할 수 있습니다.
Last updated