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

som·2023년 12월 3일
0

iOS 면접

목록 보기
1/1
post-thumbnail

The Swift Programming Language (5.9.2 beta) 기준 Modifying Value Types from Within Instance Methods
에서 해당 내용을 찾아볼 수 있습니다.

개념

구조체와 열거형은 값 타입입니다.
기본적으로 값 타입의 프로퍼티는 해당 인스턴스 메서드 내에서 수정할 수 없습니다.

엥? 그러면 프로퍼티 수정도 안 되는데 어떡하라는 거지? 싶죠??

이럴 때 사용되는 키워드가 mutating 입니다!
mutating 메서드는 메서드 내에서 해당 속성을 변경(즉, 변경)할 수 있으며 변경된 내용은 메서드가 종료될 때 원래 값 타입(구조체, 열거형)에 다시 기록됩니다.
메서드는 암시적 self 프로퍼티에 완전히 새로운 인스턴스를 할당할 수도 있으며, 이 새 인스턴스는 메서드가 종료될 때 기존 인스턴스를 대체합니다.

열거형에 대한 변경 메서드는 암시적 self 매개변수를 동일한 열거형과 다른 경우로 설정할 수 있습니다.

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

이렇게 function 앞에 mutating 키워드를 붙여주면 사용할 수 있습니다.

간단 정리

Struct는 값타입이기 때문에 Struct의 속성은 기본적으로 인스턴스 메서드 내에서 수정할 수 없습니다. 만약 수정해야할 상황이 생긴다면 mutating을 붙여주면 됩니다.

mutating을 선언한 메서드는 메서드 내에서 프로퍼티를 변경할 수 있고, 메서드가 종료될 때 변경한 모든 내용을 원래 struct에 다시 기록합니다. 또한 메서드는 self property에 새 인스턴스를 할당할 수도 있습니다.

mutating 키워드는 해당 메서드가 호출된다면 실제 복사를 해야한다고 알려주는 역할입니다.

profile
얼레벌레 취준 공부 중인 초보 개발자

0개의 댓글