[Swift 5/부스트 코스] iOS 프로그래밍을 위한 스위프트 기초 - Quiz 2-1 오답 노트
안녕하세요. 개발하는 정주입니다.
오늘은 Quiz 2-1에서 틀린 문항에 대해 포스팅하려고 합니다.
코드를 제대로 보지 않고 제출을 한 것이지만 실수도 안 하는 것이 좋으니 포스팅을 하며 다시 다짐하려고 합니다.
사용자 정의 타입 퀴즈
저는 Quiz 2-1의 Q3을 틀렸습니다. 구조체와 클래스의 차이점에 관한 문제로 var, let으로 property를 정의하고 let 객체를 만들었을 때 객체의 property를 수정할 수 있는가에 대한 내용입니다.
struct MyStruct {
var propertyA: Int = 10
let propertyB: Int = 10
}
class MyClass {
var propertyA: Int = 10
let propertyB: Int = 10
}
let instance = MyStruct()
let object = MyClass()
var instance2 = MyStruct()
var object2 = MyClass()
property가 let으로 정의된 경우엔 구조체와 클래스 모두 수정이 불가합니다. 따라서 아래 두 코드는 모두 에러가 발생합니다.
"Cannot assign to property: 'propertyB' is a 'let' constant" 에러가 발생하며 let 상수이므로 값을 할당할 수 없다고 하네요.
instance.propertyB = 20
object.propertyB = 20
var property일 때는 구조체와 클래스가 다릅니다.
instance.propertyA = 10
object.propertyA = 10
위 두 개 코드 중 하나의 코드에서만 에러가 납니다. 어디에서 에러가 날까요?
바로 첫 번째 줄에서 에러가 납니다. 구조체는 값 타입이기 때문에 property가 var로 정의되어 있을지라도 구조체가 let이라면 변경이 불가합니다. 반대로 클래스는 참조 타입이기 때문에 property가 객체의 let, var 여부와 상관없이 property가 var라면 수정이 가능합니다.
instance2.propertyA = 10
object2.propertyA = 10
instance와 object인 상황에서는 위 코드 모두 정상적으로 동작합니다.
주의할 점은 Struct는 값 타입이기 때문에 Struct 내부에서는 일반 method로는 property 변경이 불가능합니다. 이 때는 mutating 키워드를 이용해야 한다는 점 잊지 말아주세요.
마무리 잡담
감사합니다!
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.