Warning: 이해한 부분을 최대한 남기고 정리하려 남긴 글 입니다. 틀린 부분이 있을 수 있습니다. 이점 유의하고 읽어주시면 감사할 것 같습니다. 그리고 틀린 부분 알려주시면 바로바로 고치도록 하겠습니다.
타입이면 타입이고, 프로퍼티면 프로퍼티여야 인지상정
도대체 타입 프로퍼티란 무엇인가?
타입 프로퍼티는 클래스, 열거형 또는 구조체의 인스턴스에 속하는 값이 아니라 그 자체에 속하는 값이다.
저장된 값은 모든 인스턴스가 share하여 사용할 수 있습니다.
타입 프로퍼티에는 두 가지 타입 프로퍼티가 있다:
저장 타입 프로퍼티[Stored Type Property]
var
변수 또는 let
상수연산 타입 프로퍼티[Computed Type Property]
var
(변수) 프로퍼티로만 선언된다.static let/ var 프로퍼티이름 = 초기값
static
키워드를 사용하여 정의할 수 있다:static property
enum
에서도 사용될 수 있다.기존에는 구조체, 열거형, 클래스의 인스턴스를 만든 뒤 해당 인스턴스를 통해서 프로퍼티를 접근 했지만.
타입 프로퍼티는 타입이름 뒤에 점(.)을 통해서 프로퍼티의 접근이 가능하다.
아래와 같이 과일타입과 주스타입을 static property
로 구현 해 보았다.
class Fruit {
private(set) var fruitStock = 32
func addStock() {
fruitStock += 1
}
func useStock(amount: Int) {
fruitStock -= amount
}
}
enum FruitType {
static let strawberry = Fruit()
static let banana = Fruit()
static let kiwi = Fruit()
static let pineapple = Fruit()
static let mango = Fruit()
}
enum JuiceType {
static let strawberryJuice = Juice()
static let bananaJuice = Juice()
static let kiwiJuice = Juice()
static let pineappleJuice = Juice()
static let strawberryBananaJuice = Juice()
static let mangoJuice = Juice()
static let mangoKiwiJuice = Juice()
}
위와 같이 과일타입 프로퍼티를 각 과일별로 선언한 뒤 초기값으로 Fruit()을 정해주면 Fruit 클래스의 프로퍼티를 초깃값으로 받게 된다.