[Swift] Type Properties

어흥·2024년 5월 12일

Swift

목록 보기
12/28

안녕하세요! 오늘은 속성 3편으로 돌아왔습니다. 바로 Type Properties입니다.
지금까지 소개했던 속성은 모두 인스턴스에 속한 속성이었습니다. 새로운 인스턴스를 생성할 때 마다 각 인스턴스에 속한 속성 값이 생겼습니다.

이와 다르게 타입 속성은 타입 자체에 속한 속성입니다.
자세히 알아보겠습니다!

Type Properties

You can also define properties that belong to the type itself, not to any one instance of that type. There will only ever be one copy of these properties, no matter how many instances of that type you create. These kinds of properties are called type properties. (공식문서)

자 이제 해석타임입니다!
타입 속성은 인스턴스가 아닌 타입에 속한 속성입니다. 따라서 얼마나 많은 인스턴스를 생성하든간에 타입에 하나만 존재하는 속성인 것이죠.

타입 속성은 'static'(class는 일부만 가능) 키워드를 추가하여 사용하면 됩니다. 타입 속성 값을 이용할 때는 타입 이름과 접근 연산자를 써서 사용하면 됩니다.

앞에서 말했다시피 타입 속성은 타입에 속하는 속성이므로 힙이나 스택 영역에 저장되지 않고 데이터 영역에 저장된다는 거 !!! 매우 중요합니다.

class Circle { 
    static var pi: Double = 3.141526

}

Circle.pi // 3.141526

그럼 어떨 때 사용하면 좋을까요?

  • 특정 타입의 모든 인스턴스에게 공통적으로 사용되는 보편적인 속성일 때

실생활에 예시를 들어보면, 원주율 값인 pi 값이나 환율 값이 될 수 있겠습니다.
이처럼, 어떤 인스턴스인지 상관없이 공통적으로 사용할 수 있는 값인 경우 타입 속성을 사용하기 적합합니다.

앞 포스팅에서 저장 속성과 계산 속성에 대해서 배웠습니다. 타입 속성은 저장 속성이 될 수 있고 계산 속성이 될 수 있습니다. 각각에 대해서 특징을 알아보겠습니다.

타입 저장 속성 특징

class Circle { 
    static var: Double = 3.141526

}
  • static 키워드만 사용할 수 있습니다.
  • 상속 시 재정의가 불가능합니다.
  • var, let 모두 사용 가능합니다. (저장 속성)
  • 생성자에 의해서 초기화할 수 없으므로 선언에 기본값이 포함되어야 합니다.
    • 인스턴스 속성은 생성자에 의해서 값이 초기화될 수 있지만 타입 속성은 그렇지 않습니다. 한번 초기화한 후, 쭉 다른 인스턴스에 의해서 사용되기 때문에 반드시 초기값을 지녀야합니다.
  • lazy 속성 성격을 가집니다.
    • lazy 속성은 해당 변수에 접근할 때 초기화되고 메모리 할당됩니다.(lazy stored property 편 참고)

타입 계산 속성 특징

class Circle { 
    static var: Double = 3.141526
    static var multiPi: Double {
    	return pi * 2
    }
}
  • static, class 키워드 모두 사용가능합니다.
    • static 키워드: 상속시 재정의 불가능
    • class 키워드: 상속시 재정의 가능
  • var 키워드만 사용 가능합니다. (계산 속성 특징)
  • 메서드이기 때문에 타입에 메모리 공간이 할당되어 있지 않습니다.(계산 속성 특징)

0개의 댓글