Swift

mutating

삼쓰 웅쓰 2019. 11. 19. 10:18
728x90

구조체를 정의할 때

메서드가 구조체 내부의 데이터를 수정할 때는 mutating 키워드를 선언 해주어야 한다.

mutate란 사전적으로 변화시키다, 돌연변이  의 뜻을 갖는다.
뜻을 잘 생각하면 어떻게 쓰이는지 쉽게 이해할 수 있는데,
말 그대로 원래는 되지 않는 어떤 것을 되게 만드는, 돌연변이로 만드는 것이다.

Swift에서 class 는 reference type 임에 반해 structenumvalue type 이다.

 

value type 일 때 자신의 인스턴스 메서드 안에서는 property를 수정할 수 없다.

이때 수정이 필요하다면 mutating 키워드를 사용해야 한다.

struct Point {
    var x = 0.0, y = 0.0
    
    // value type인 struct에서
    // 자신의 property인 x와 y를 변화시키기 위해서는
    // mutating을 붙여주어야 한다.
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        x += deltaX
        y += deltaY
    }
}