클래스, 구조체, 열거형에서 사용된다.
static을 이용하여 선언하며, 자동으로 lazy로 작동한다!
인스턴스 프로퍼티라고 불리기도 한다.
저장 타입 프로퍼티와 연산 타입 프로퍼티가 존재한다.
⇒ static + 저장 프로퍼티 / 연산 프로퍼티 + static
저장 타입 프로퍼티인 경우 선언할 당시 원하는 값으로 항상 초기화 되어있어야 한다.
static + 저장 프로피티 = 저장 타입 프로퍼티 static + 연산 프로퍼티 = 연산 타입 프로퍼티 이고 static으로 선언할 경우 초기값을 지정 or 연산 타입 프로퍼티을 만들어야된다. 안 그러면 오류가 생기는데 왜 그런 것일까?
class Human {
static let name: String // 저장 타입 프로퍼티
static var nickName: String { // 연산 타입 프로퍼티
return name + "존잘"
}
// static으로 선언하고 초기값을 설정하지 않으면 에러가 발생한다!
static var age: Int
// static let' declaration requires an initializer expression or an explicitly stated getter
}
Q. 이게 무슨 말인가? 클래스 인스턴스가 생성될 때 초기화 과정으로 모든 프로퍼티가 초기화 되지 않나염?
A 타입 프로퍼티는 매번 생성되는 기존 프로퍼티와 다름!
인스턴스가 생성된다고 매번 해당 인스턴스이 멤버로 매번 생성되는게 아니라
=> 언제 한번 누군가 불러서 메모리에 올라가면, 그 뒤로 생성되지 않으며 언제 어디서든 이 타입 프로퍼티에 접근할 수 있음 like 전역변수띠
따라서 인스턴스 초기화랑 별개로 초기값을 설정해줘야된다!
타입프로퍼티는 인스턴스 생성과는 전혀 관계가 없고, 누가 불러줬을 때 한번 메모리에 올라가고! 그 뒤로는 어디서든 해당 프로퍼티를 공유가능하다!
여기서 주목할 부분 누가 불러줬을 때 메모리에 올라간다! => lazy와 동일, 타입 프로퍼티의 경우 기존 속성이 lazy기 때문에 최초 호출 전까진, 초기화되지 않음!