HulkCodeer의 기술 블로그

Mutating 이란?

May 13, 2019 | 1 Minute Read

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에서도 똑같이 적용된다.