[야우쓰] 4주차(3) 타입 프로퍼티

hello_hidi·2022년 12월 12일
0

야우쓰

목록 보기
19/20
post-thumbnail

타입 프로퍼티(Type Property)

클래스, 구조체, 열거형에서 사용되며
저장 타입 프로퍼티와 연산 타입 프로퍼티가 존재하며
저장 타입 프로퍼티의 경우 선언할 당시 원하는 값으로 항상 초기화가 되어있어야 한다
"static"을 이용하여 선언하며, 자동으로 lazy로 작동한다.(lazy를 직접 붙일 필요 또한 없다.)

정의는 진짜 쉽지 않다....
쉽게 말하자면

저장&연산 프로퍼티 앞에 static 키워드만 붙이면 => 그것은 저장 타입 프로퍼티 & 연산 타입 프로퍼티가 되는 것임

static의 초기화에 대해서...

+) static으로 선언할 경우 초기값을 지정 or 연산 타입 프로퍼티을 만들어야됨
=> 선언과 동시에 저장 타입 프로퍼티 초기화 불가능

class Human {
	static let name: String = "hidi"
    static var nickName: String {
    	return name + "존잘"
    }
}

// 만약 선언과 동시에 저장 타입 프로퍼티를 초기화해주면?
static let name: String //에러

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

Q. 클래스 인스턴스가 생성될 때 initializer에 의해 모든 프로퍼티가 초기화되지 않나여?
A 타입 프로퍼티는 매번 생성되는 기존 프로퍼티와 다름!

인스턴스가 생성된다고 매번 해당 인스턴스의 멤버로 매번 생성 되는게 아니라
=> 언제 한번 누군가 불러서 메메뢰에 올라가면, 그 뒤로 생성되지 않으며 언제 어디서든 이 타입 프로퍼티에 접근할 수 있음 like 전역변수띠

따라서 타입 프로퍼티는 타입이름을 통해서만 접근이 가능!!!

let hidi: Human = .init()
hidi.name // 아니구요

Human.name // 이렇게만 접근 가능!

자동으로 lazy?

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

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

언제 사용하나?

솔직히 지금까진 모르겠는데 블로그 포스팅을 보니까 싱글톤에서 사용한다고 합니당
보통 모든 타입이 공통적인 갑을 정의하는데 유용하다고 하네영!

profile
안뇽희디

0개의 댓글