Notice
Recent Posts
Recent Comments
Link
大器晩成
구조체와 클래스(let, var) 참고자료 본문
let으로 선언한 객체 (불변 참조)
let으로 객체를 선언하면, 해당 객체의 참조 자체는 변경할 수 없습니다. 즉, 다른 객체를 할당하거나, 해당 객체가 가리키는 인스턴스를 다른 곳에 재할당하는 것은 불가능합니다. 하지만 객체의 내부 속성이나 메서드를 변경할 수 있는지 여부는 객체의 타입에 따라 달라집니다.
class MyClass {
var value: Int
init(value: Int) {
self.value = value
}
}
let myObject = MyClass(value: 10)
myObject.value = 20 // 가능한 작업: 객체의 속성 값 변경
myObject = MyClass(value: 30) // 오류: 'myObject'는 let으로 선언되어 변경할 수 없음
class MyClass {
var value: Int = 10
// init(value: Int) {
// self.value = value
// }
}
let myObject = MyClass()
myObject = MyClass() // 에러 발생, MyClass()는 새로운 객체를 생성하는것과 동일
- let으로 선언된 myObject는 다른 객체를 할당하는 것이 불가능합니다.
- 하지만, myObject의 속성인 value는 변경할 수 있습니다. 이는 클래스 타입이므로, let은 객체 자체의 참조를 불변으로 만들지만, 객체 내부의 속성은 변경 가능하기 때문입니다.
var로 선언한 객체 (가변 참조)
반면에 var로 선언한 객체는 참조 자체도 변경할 수 있습니다. 즉, 같은 변수에 다른 객체를 할당할 수 있습니다.
class MyClass {
var value: Int
init(value: Int) {
self.value = value
}
}
var myObject = MyClass(value: 10)
myObject = MyClass(value: 30) // 가능한 작업: 다른 객체를 할당
class MyClass {
var value: Int = 10
// init(value: Int) {
// self.value = value
// }
}
var myObject = MyClass()
myObject = MyClass()
구조체와 클래스의 차이점
- 클래스는 참조 타입(reference type)입니다. let으로 선언한 클래스 인스턴스의 참조는 변경할 수 없지만, 인스턴스의 속성은 수정이 가능합니다.
- 구조체는 값 타입(value type)입니다. 구조체를 let으로 선언하면, 그 구조체의 모든 속성은 변경할 수 없습니다.
구조체 객체의 불변 참조
struct MyStruct {
var value: Int
mutating func updateValue(newValue: Int) {
self.value = newValue
}
}
let myStruct = MyStruct(value: 10)
myStruct.value = 20 // 오류: 'myStruct'는 let으로 선언되어 속성을 변경할 수 없음
- let으로 선언된 구조체는 속성도 변경할 수 없습니다. 만약 구조체 내에서 속성을 변경하려면, 그 속성을 수정할 메서드가 mutating으로 정의되어 있어야 하고, 이 메서드를 호출할 때는 var로 선언된 인스턴스여야 합니다.
요약
- let으로 클래스 객체를 선언하면 객체의 참조는 변경할 수 없지만, 객체의 속성은 변경할 수 있습니다.
- let으로 구조체 객체를 선언하면 객체의 속성 자체도 변경할 수 없습니다.
728x90
'iOS > Swift 문법' 카테고리의 다른 글
재정의(오버라이딩,Overriding) - 속성(프로퍼티) (0) | 2024.11.26 |
---|---|
클래스의 상속 (Inheritance) (0) | 2024.11.25 |
싱글톤패턴 (Singleton Pattern) (0) | 2024.11.25 |
접근 제어 (Access Control) (0) | 2024.11.25 |
서브 스크립트(Subscripts) (0) | 2024.11.25 |