[TIL] 10.25

Junyoung_Hong·2023년 10월 25일
0

TIL_10월

목록 보기
16/20
post-thumbnail

1. mutating

mutating 키워드는 struct의 메서드 내에서 인스턴스 자체의 프로퍼티를 수정할 때 사용한다. 값 타입인 구조체에서는 인스턴스 메소드 내에서 프로퍼티들을 수정할 수 없기 때문이다.

struct Point {
    var x: Int
    var y: Int

    // 이 메서드는 인스턴스의 프로퍼티를 변경하기 때문에 `mutating`으로 표시되어야 함
    mutating func moveBy(x deltaX: Int, y deltaY: Int) {
        self.x += deltaX
        self.y += deltaY
    }
}

var point = Point(x: 1, y: 1)
point.moveBy(x: 2, y: 3) // point는 이제 (3, 4)

Point 구조체에는 moveBy(x:y:)라는 메서드가 있다. 이 메서드는 구조체의 x와 y 프로퍼티를 변경한다. 메서드가 mutating으로 표시되어 있기 때문에, 이 메서드는 var로 선언된 인스턴스에서만 호출할 수 있다. let으로 선언된 인스턴스에서는 mutating 메서드를 호출할 수 없다.

만약 let으로 선언된 인스턴스에 대해 mutating 메서드를 호출하려고 하면 컴파일 에러가 발생한다.

let constantPoint = Point(x: 1, y: 1)
constantPoint.moveBy(x: 2, y: 3) // 컴파일 에러

let으로 선언된 인스턴스는 불변(immutable)이기 때문이다.

profile
iOS 개발자를 향해 성장 중

0개의 댓글