Methods - The Swift Programming Language (Swift 5.5)
사전적 의미 - 변화시키다, 돌연변이
클래스는 reference 타입이고 struct와 enum
는 value type입니다.
값 타입의 속성은 기본적으로 인스턴스 메서드 내에서 수정할 수 없습니다.
만약 수정해야하는 경우 mutating
을 붙여주면 됩니다.
mutating을 선언한 메서드는 메서드 내에서 프로퍼티를 변경할 수 있고, 메서드가 종료될 때 변경한 모든 내용을 원래 struct에 다시 기록합니다. 또한 메서드는 self property에 새 인스턴스를 할당할 수도 있습니다.
mutating 키워드는 해당 메서드가 호출된다면 실제 복사를 해야한다고 알려주는 역할입니다.
Point struct에 Point 인스턴스를 이동하는 mutating func moveBy()를 정의했는데 이는 새로운 Point를 반환하는 대신 실제로 호출 된 Point를 수정합니다. 만약 let으로 선언된 인스턴스는 프로퍼티가 변수여도 속성을 변경할 수 없기 때문에 mutating 메서드를 호출할 수 없습니다.
struct Point {
var x = 0.0, y = 0.0
mutating func moveBy(x deltaX: Double, y deltaY: Double) {
x += deltaX
y += deltaY
}
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")