8.2 프로퍼티

클래스와 구조체를 구성하는 요소 중 하나인 프로퍼티는 우리 말로 번역하면 '속성'으로, 값을 저장하기 위한 목적으로 정의된 변수나 상수라고 배웠습니다. 사실 프로퍼티가 하는 정확한 역할은 값을 제공하는 것입니다.

값을 제공하는 것과 저장하는 것 사이에 차이가 없다고 생각하실 수 있습니다. 저장이 아니라 제공에 목적이 있다고 하는 것은, 프로퍼티 일부는 값을 저장하지는 않지만 값을 제공하는 특성을 갖기 때문입니다.

설명한 것처럼 프로퍼티는 값에 대한 저장 여부를 기준으로 두 가지 종류로 나눌 수 있습니다. 이를 저장 프로퍼티와 연산 프로퍼티라고 합니다. 두 프로퍼티의 차이는 다음과 같습니다.

저장 프로퍼티

  • 입력된 값을 저장하거나 저장된 값을 제공하는 역할

  • 상수 및 변수를 사용해서 정의 가능

  • 클래스와 구조체에서는 사용이 가능하지만, 열거형에서는 사용할 수 없음

연산 프로퍼티

  • 특정 연산을 통해 값을 만들어 제공하는 역할

  • 변수만 사용해서 정의 가능

  • 클래스, 구조체, 열거형 모두에서 사용 가능

저장 프로퍼티와 연산 프로퍼티는 대체로 클래스나 구조체를 바탕으로 만들어진 개별 인스턴스에 소속되어 값을 저장하거나 연산 처리하는 역할을 합니다. 따라서 프로퍼티를 사용하려면 인스턴스가 필요합니다. 인스턴스를 생성한 다음 이 인스턴스를 통해서 프로퍼티를 참조하거나 값을 할당해야 합니다. 예외적으로 일부 프로퍼티는 클래스와 구조체 자체에 소속되어 값을 가지기도 합니다. 이런 프로퍼티들을 타입 프로퍼티(Type Properties)라고 합니다. 타입 프로퍼티는 인스턴스를 생성하지 않아도 사용할 수 있습니다

스위프트에서는 프로퍼티 값을 모니터링하기 위해 프로퍼티 옵저버(Property Observer)를 정의하여, 사용자가 정의한 특정 액션과 반응하도록 처리할 수 있습니다. 프로퍼티 옵저버는 우리가 직접 정의한 저장 프로퍼티에 추가할 수 있으며 슈퍼 클래스로부터 상속받은 서브 클래스에서도 추가할 수 있습니다.

Last updated