mutating 키워드에 대해 설명하시오.

이하연·2021년 9월 16일
0

[Swift] 스위프트

목록 보기
15/27

공식문서

Methods - The Swift Programming Language (Swift 5.5)

mutating

사전적 의미 - 변화시키다, 돌연변이

클래스는 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))")

0개의 댓글