-
Swift - Type PropertyProgramming/Swift 2021. 10. 27. 12:13
안녕하세요 Beepeach 입니다 :)
오늘은 Type Property에 대해서 공부해보겠습니다.
지금까지 봤던 프로퍼티는 Instance property(인스턴스 프로퍼티)입니다.
Instance property란 인스턴스에 속하는 속성입니다. 그래서 각 인스턴스마다 고유한 값을 가지고 있었습니다.
예시를 보면 각각의 인스턴스마다 고유한 값을 가지는 것을 확인할 수 있습니다.
그리고 이 값들은 각각 메모리를 차지하고 있습니다.
그럼 Type property란 무엇일까요??
인스턴스가 아니라 Type에 속하는 프로퍼티입니다.
인스턴스가 아무리 많아도 type property는 하나의 고유한 값을 가지고 공유합니다.
쉽게 말해서 Instance property의 값은 인스턴스가 100개이면 100개의 값을 가지고 있지만 type property는 인스턴스가 100만 개 있어도 1개의 값을 공유합니다.
Syntax
Type Property는 class, struct, enum에서 사용 가능합니다.
그리고 lazy 프로퍼티와 마찬가지로 접근할 때 초기화가 이루어집니다.
문법은 기존 프로퍼티 생성하는 문법에서 앞에 static 키워드를 추가해주면 됩니다.
저장 프로퍼티와 연산 프로퍼티 모두 Type Property로 선언할 수 있습니다.
주의할 점은 Stored property에서 사용할 경우 DefalutValue를 꼭 할당해줘야 합니다.
그 이유는 Type 자체는 생성자가 없기 때문입니다.
그럼 간단한 예시를 보겠습니다.
Math 타입에 pi라는 type property를 선언했습니다.
그럼 어떻게 값에 접근할까요??
InstanceProperty는 인스턴스를 생성했어야하지만 TypeProperty는 Type의 이름으로 접근합니다.
Math.pi로 접근하면 우리가 지정한 3.14가 나오는 것을 확인할 수 있습니다.
좀 더 다양한 예시를 보겠습니다.
Struct, Enum, Class에 type property를 모두 선언해보았습니다.
Class에서 static 대신 class 키워드를 사용한 부분을 자세히 봐주세요!
Class에서 static 키워드 대신 class 키워드를 사용한다면 해당 type property는 overide가 가능해집니다.
(이 개념은 class의 상속에 대해서 알고 있어야 이해가 가능합니다. 상속에 대해서 아직 모르신다면 넘어가주세요!)
static으로 선언한 type property는 상속 후 override가 불가능합니다.
하지만 class로 선언한 type property는 상속 후 override가 가능합니다.
참고자료
여러분의 새로운 도전을 응원합니다 | KxCoding
Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기
kxcoding.com
https://docs.swift.org/swift-book/LanguageGuide/Properties.html
Properties — The Swift Programming Language (Swift 5.6)
Properties Properties associate values with a particular class, structure, or enumeration. Stored properties store constant and variable values as part of an instance, whereas computed properties calculate (rather than store) a value. Computed properties a
docs.swift.org
728x90'Programming > Swift' 카테고리의 다른 글
Swift - Property Wrapper Projecting Value (0) 2021.11.05 Swift - Property Wrapper (0) 2021.10.28 Swift - Property Observer (0) 2021.10.26 Swift - Computed Property (0) 2021.10.25 Swift - Stored Property (0) 2021.10.24