티스토리 뷰

iOS

[Swift] mutating

Peppo 2021. 12. 11. 16:35
728x90

 

지난시간에 구조체, 클래스를 배웠는데요!

오늘은 구조체 안에 메소드를 변경할 수 있게 해주는 mutating 메소드를 알아볼거에요 !


구조체 mutating

사전적의미

mutate: 돌연변이가 되다. / 돌연변이를 만들다.

 

구조체와 열거형 내부의 데이터를 수정할 때는 mutating 키워드를 선언 해주어야 합니다. 

값 타입 프로퍼티들은 해당 인스턴스 메소드 내에서 수정할 수 없어요. 

 

이걸 가능하게 해주는게 mutating 입니다!!

struct Point {

    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {

        print("beforeX:",x)  // beforeX: 1.0
        print("beforeY:",y)  // beforeY: 1.0
        x += deltaX
        print("afterX",x)    // afterX: 3.0
        y += deltaY
        print("afterY",y)    // afterY: 4.0

    }
}

var somePoint = Point(x: 1.0, y: 1.0)   // x: 1, y: 1

somePoint.moveBy(x: 2.0, y: 3.0)        // x: 3, y: 4

 

만약 mutating이 없다면? 

 

struct Point {

    var x = 0.0, y = 0.0
    func moveBy(x deltaX: Double, y deltaY: Double) {

        x += deltaX     // error!!
        y += deltaY     // error!!

    }
}

var somePoint = Point(x: 1.0, y: 1.0)

somePoint.moveBy(x: 2.0, y: 3.0)

error가 납니다. 왜? 

값 타입 (구조체, 열거형)은 내부에서 수정이 불가능 하니까요!

 

 

NOTE

let somePoint로 선언이 되면 
let으로 선언된 것과 동일한 효과를 가져와 mutating이 있어도 값을 변경하지 못합니다.

 

728x90