Mutating 이란?
5년전에 iOS를 처음 접할때는 Objective-C란 언어를 쓰고 있었다.
Objective-C에는 클래스란 개념이 개념이 없어서 Mutating이란 용어가 없었는데 Swift에는 자바처럼 클래스, 구조체, 열거형이 생기게 되었다.
클래스는 참조 타입이므로 인스턴스 메소드를 이용하여 프로퍼티들의 값을 변경 할 수 있다. 하지만 밸류 타입인 구조체, 열거형은 인스턴스 메소드로 프로퍼티들의 값을 변경 할 수 없는 특징이 있는데, 이는 참조 타입과, 밸류 타입이란것을 생각해 보면 당연한 일일지도 모른다.
구조체나 열거형이 밸류 타입이란것은 이미 자기 자신이 값인데 자기자신을 바꾸라니(?) 어찌보면 이상한 명령일 수 있으나, Mutating이란 키워드는 그것을 가능하게 한다는 것이다.
프로퍼티 변경 불가능한 구조체 부터 살펴 보도록 하자.
struct Name {
var name: String = "박현진"
func changeName(_ changeName: String) {
name = changeName
}
}
var test = Name(name: "헐크코디어")
test.changeName(changeName: "헐크")
xCode님께서 갑자기 화를 내실 것이다..이상한짓 하지말라고…
네…ㅠㅠ 수정하겠습니다
struct Name {
var name: String = "박현진"
mutating func changeName(_ changeName: String) {
name = changeName
}
}
var test = Name(name: "헐크코디어")
test.changeName(changeName: "헐크")
xCode님께서 좋아하시는 코드를 대령 했습니다.
음…좋다…통과
위의 코드는 Enum에서도 똑같이 적용된다.