1. 타입 프로퍼티(Type Property)

2. 타입 프로퍼터 초기화

i) 초기값을 지정 or 연산 타입

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
}

why? static으로 선언되는 저장 타입 프로퍼티의 경우 초기화할 때 값을 할당할 initializer가 없기 때문

Q. 이게 무슨 말인가? 클래스 인스턴스가 생성될 때 초기화 과정으로 모든 프로퍼티가 초기화 되지 않나염?

A 타입 프로퍼티는 매번 생성되는 기존 프로퍼티와 다름!

인스턴스가 생성된다고 매번 해당 인스턴스이 멤버로 매번 생성되는게 아니라

=> 언제 한번 누군가 불러서 메모리에 올라가면, 그 뒤로 생성되지 않으며 언제 어디서든 이 타입 프로퍼티에 접근할 수 있음 like 전역변수띠

따라서 인스턴스 초기화랑 별개로 초기값을 설정해줘야된다!

ii) 자동 lazy

타입프로퍼티는 인스턴스 생성과는 전혀 관계가 없고, 누가 불러줬을 때 한번 메모리에 올라가고! 그 뒤로는 어디서든 해당 프로퍼티를 공유가능하다!

여기서 주목할 부분 누가 불러줬을 때 메모리에 올라간다! => lazy와 동일, 타입 프로퍼티의 경우 기존 속성이 lazy기 때문에 최초 호출 전까진, 초기화되지 않음!