Swift Immutability
Immutability에 대해 이야기를 해보겠다.
한국어로 번역하면 변경불가성이라고 해석할 수 있다.
Swift는 let을 사용해 어떤 것이든 표현할 수 있는데 let keyword는 immutable하다.
let keyword를 사용하여 만든 것은 변경이 불가능하다는 뜻이다.
반면에 var는 mutable하다.
swift에서 self를 작성하지 않아 immutable해서 에러가 났다는 메시지를 종종 볼 수 있는데, self는 항상 method에서 접근할 수 있다.
struct 내에서 self가 백그라운드에서 자동적으로 생성이 되었을 때, 그것은 let keyword로 정의된다.
그래서 self가 immutable하다는 이유이다.
그래서 structure내에서 어떠한 property를 mutate하고 싶다면, mutating이라는 keyword를 적어줘야한다.
예제를 참고하자.
struct Town {
let name: String
var citizens: [String]
var resources: [String : Int]
init(citizens: [String], name: String, resources:[String:Int]) {
self.citizens = citizens
self.name = name.uppercased()
self.resources = resources
}
mutating func harvestRice() { // mutating이라 명시를 해야함!
resources["Rice"] = 100
}
}
myTown.harvestRice()
print(myTown.resources)
정리하자면, struct 내에서 property를 수정하기 위해 method를 생성할 때에는 mutating을 명시해줘야한다.
mutating을 명시함으로써, self는 var로 취급이 되고 struct를 자유롭게 수정할 수 있게 된다!
댓글남기기