[Swift] Properties(4)

상 원·2022년 7월 14일
0

Swift

목록 보기
18/31
post-thumbnail
post-custom-banner

드디어 프로퍼티 마지막!

Type Property

수업들을 때 진짜진짜진짜 이해 안됐던 개념 중 하나...
왜 프로퍼티가 있는데 타입 프로퍼티도 있는거지? 하면서 개념을 읽고 또 읽어도 이해가 안됐삼,,

일단 공식 개념부터 살펴보자면,

타입 자체에 속하는 프로퍼티로, 어느 한 인스턴스에 속하는 것이 아님.

지금까지 봐왔던 저장 프로퍼티나 계산 프로퍼티는 어떤 타입의 인스턴스에 속하는 거였음.
그니까

let myNumber: Int = 10
var myString: String = "수입푸드 조아요"

여기서 선언한 myNumber, myString 은 각각 Int, String 타입의 인스턴스에 속하는 것들이다.
Int, String 자체의 값이 아님!

근데 타입 프로퍼티는 그 타입 자체의 프로퍼티임. 이 타입으로 돼 있는 건 다 내가 설정한 값으로 유지돼야 하는, 약간 전역변수같은 개념인듯?
요 값은 이 타입의 인스턴스들이 공통으로 사용하는 값임!

저장 타입 프로퍼티 는 상수나 변수로 선언 가능하지만,
계산 타입 프로퍼티 는 무적권 변수로만!!

저장 타입 프로퍼티는 무조건 초기값을 줘야함!
글구 lazy 형태로 초기화돼서 여러 스레드에서 접근해도 딱 한번만 초기화됨.

Type Property Syntax

타입 프로퍼티 만드는 건 쉬움! static 키워드를 프로퍼티 앞에 붙여주면 됨!

C처럼 전역 static 변수로 만들어지는 건 아니고, outer 중괄호에서만 효력이 있음.
요런식으로 쓰면 됨.

struct SomeStructure {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 1
    }
}
enum SomeEnumeration {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 6
    }
}
class SomeClass {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 27
    }
    class var overrideableComputedTypeProperty: Int {
        return 107
    }
}

만약에 static 키워드 대신 class 를 넣어 계산 타입 프로퍼티를 만들었다면 해당 프로퍼티를 오버라이딩 할 수 도 있음!

overrideableComputedTypeProperty 계산 타입 프로퍼티는 subclass에서 오버라이딩이 가능하다!

class SubClass: SomeClass {
	override class var overrideableComputedTypeProperty: Int {
    	return 109
    }
}

이런식으로 subclass에서 오버라이딩 할 수 있음!
근데 static으로 선언된 계산 타입 프로퍼티는 오버라이딩이 불가능!!

접근은 어떻게 하죠??

print(SomeStructure.storedTypeProperty)
// Prints "Some Value"

이렇게 그냥 .(dot) syntax를 쓰면 되지만!!
인스턴스를 만들어서 접근하는 게 아니고 타입 이름으로 접근해야 한다는 걸 명심해야 됨!

profile
ios developer
post-custom-banner

0개의 댓글