iOS) mutating 키워드는 무엇일까?
클래스의 인스턴스 메소드는타입의 구조 자신의 프로퍼티 값을 수정할 때 신경 쓸 필요가 없지만, 값 타입의 구조체나 열거형 등에서는 인스턴스 메소드가 내부 프로퍼티 값을 변경할 수 없습니다.
이러한 경우 오류를 해결하기 위해서 mutating 키워드를 붙여서 명시해야 합니다. 또한, 프로토콜이 요구하는 메소드가 내부의 프로퍼티를 변경해야 한다면 메소드 앞에 mutating 키워드를 붙여 명시해야 합니다.
그렇다면 왜 값 타입의 인스턴스 메소드는 내부 프로퍼티를 변경할 수 없으며 mutating 은 왜 사용해야 하는 것일까?
Swift 에서 값 타입이 복사되었을 때는 같은 주소를 가리키다가 변경이 있을 때는 복사하여 수정하게 되는 COW(Copy on Write)가 있습니다. 값 타입의 인스턴스 메소드로 내부 프로퍼티가 변경될 수 있는지 없는지 알 수 없기 때문에 어느 시점에 복사를 해야하는지 알 수 없습니다.
그래서 mutating 키워드를 가진 메소드가 호출된다면 실제적인 복사를 해야한다고 컴파일러에게 알릴 수 있습니다.