[Swift] Type Property

Inwoo Hwang·2021년 8월 26일
0

Swift

목록 보기
3/8
post-thumbnail

Warning: 이해한 부분을 최대한 남기고 정리하려 남긴 글 입니다. 틀린 부분이 있을 수 있습니다. 이점 유의하고 읽어주시면 감사할 것 같습니다. 그리고 틀린 부분 알려주시면 바로바로 고치도록 하겠습니다.

Property

Type Property란?

타입 프로퍼티 [Type Property]

타입이면 타입이고, 프로퍼티면 프로퍼티여야 인지상정

도대체 타입 프로퍼티란 무엇인가?

타입 프로퍼티는 클래스, 열거형 또는 구조체의 인스턴스에 속하는 값이 아니라 그 자체에 속하는 값이다.

저장된 값은 모든 인스턴스가 share하여 사용할 수 있습니다.

타입 프로퍼티에는 두 가지 타입 프로퍼티가 있다:

  • 저장 타입 프로퍼티[Stored Type Property]

    • var변수 또는 let상수
    • 반드시 초깃값 설정해야 한다.
    • 지연 연산 된다[lazy와 다름, 다중 스레드라도 한 번만 초기화]
  • 연산 타입 프로퍼티[Computed Type Property]

    • Computed 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 클래스의 프로퍼티를 초깃값으로 받게 된다.

profile
james, the enthusiastic developer

0개의 댓글