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를 자유롭게 수정할 수 있게 된다!

태그:

카테고리:

업데이트:

댓글남기기