구조체의 가변성은 속성의 가변성에 영향을 준다.

NOAH·2021년 8월 23일
0

SWIFT

목록 보기
4/7
post-thumbnail

구조체의 가변성은 속성의 가변성에 영향을 준다.

class Person {
 let name: String = "John Back"
 var age: Int = 33
}

Person 클래스는 var를 이용한 변수 저장 속성, let을 이용한 상수 저장 속성으로 표현되어 있다.

상수 저장 속성은 인스턴스 초기화가 완료된 후에는 변경 할 수 없다.
그래서 상수 저장 속성은 선언시에 할당해주고, 다른 매개변수에 따라서
새로운 인스턴스를 만들 때 선언해준다.


let p = Person()
p.name
p.age = 20

이렇게 생성된 인스턴스를 .을 이용하여 표현하는 것을 Dot Syntax 점 문법 또는 스위프트에서는 Explicit Member Espression 이라고 표현한다.

name 은 상수 저장 속성으로 점문법으로 변경이 불가능 하지만
age는 다른 값을 초기화 후에도 다른 값을 저장할 수 있다.

struct Person {
 let name: String = "John Back"
 var age: Int = 33
}

let p = Person()
p.name
p.age = 20 // 에러!!!! 

그러나 클래스가 아닌 구조체(struct)를 인스턴스를 상수에 저장하면 구조체에 표현된 모든 저장 속성이 상수가 된다.

즉, 구조체의 가변성은 속성의 가변성에도 영향을 준다.

지연 저장 속성 (Lazy Stored Properties)

lazt var name: Type = DefaultValue

저장 되는 시점이 지연된다는 것인데, 어떤 것이 지연되는 지 파악하는 것이 중요하다.

지연 저장 속성은 초기화를 지연시킨다.
인스턴스가 생성되는 시점이 아니라
처음 인스턴스가 지정되는 시점에 독립적으로 초기화 된다.

따라서, 변수 저장 속성(var)만을 사용해야하고, 선언 시점에 저장하지 않기 때문에 기본값(DefaultValue)가 필요하다. 하지만 표현식이 리턴 하는 값이 속성형식과 모두 동일하다면 가능하다.


0개의 댓글