클래스, 구조체, 열거형과 관련한 값 Swift에서는 3가지 형태로 존재하는데 바로 저장 프로퍼티, 연산 프로퍼티, 타입 프로퍼티로 구성됨
class Human {
let name: String = "hidi"
var age: Int = 200
}
struct Person {
let name: String = "hidi"
var age: Int = 200
클래스는 인스턴스는 스택에는 인스턴스 주소만 저장하고 힙 영역에 instance 정보를 담고있다. 이 점을 생각하면서 비교해보면서 이해해보자!
일단 당연히 인스턴스 자체를 바꾸는 건 안되겠죠? let으로 선언했으니까!
프로퍼티를 let으로 선언한 경우 ⇒ 둘다 let이면 당연히 바뀌지 않겠죠?
프로퍼티를 var로 선언한 경우 ⇒ var이면 바꿀 수 있다! 왜냐??
지금 let으로 잠겨있는건 → 스택에 있는 메모리 주소이지, 인스턴스 값이 아니기 때문
개발자 소들이님의 사진을 활용했습니다!
class Human {
let name: String = "hidi"
var age: Int = 200
}
let hidi: Human? = .init()
hidi?.name = "hidi" // 에러
hidi?.age = 24 // 가능!
// 따라서 인스턴스 값 자체에 nil이 들어가는 건 안됨
hidi = nil // error
var로 선언하면 인스턴스 값 자체를 바꿀 수 있습니다!
프로퍼티를 let으로 선언한 경우 ⇒ 바꿀 수 없다.
인스턴스가 var로 선언이 되어봤자 → 스택에 있는 메모리 주소이지, 인스턴스 값이 아니기 때문
프로퍼티를 var로 선언한 경우 ⇒ 둘 다 var이면 무조건 바꿀 수 있지