1. mutating
키워드란?
mutating
키워드는 Struct나 Enum에서 프로퍼티 값을 변경할 수 있는 메소드를 정의할 때 사용합니다. Struct는 값 타입이기 때문에, 기본적으로 모든 프로퍼티가 불변(immutable)으로 취급됩니다. 만약 Struct 내에서 프로퍼티를 변경해야 하는 메소드를 정의하고자 한다면, 메소드 앞에 mutating
키워드를 추가하여 변경 가능함을 명시해야 합니다.
2. mutating
키워드가 필요한 이유
Swift는 값 타입(Struct, Enum)과 참조 타입(Class)을 명확히 구분하여 안전하고 예측 가능한 코드를 작성할 수 있도록 합니다. Struct는 값 타입이므로 일반적으로 불변성을 유지하려는 특성이 있습니다. 이는 Struct가 안정적인 데이터를 제공하고, 데이터의 상태가 의도치 않게 변경되는 것을 방지할 수 있기 때문입니다.
그러나 경우에 따라 값 타입의 상태를 변경해야 하는 메소드가 필요할 수 있습니다. 예를 들어, Struct의 프로퍼티 값을 업데이트하거나, 계산 결과에 따라 프로퍼티 값을 바꾸는 등의 작업이 필요할 때입니다. 이때 Swift는 mutating 메소드를 통해 변경이 가능함을 명확하게 표시하도록 요구합니다.
3. mutating
키워드의 사용 예시
mutating
키워드를 실제로 어떻게 사용하는지 아래의 예시 코드를 통해 알아보겠습니다.
예제 1: 위치 좌표 업데이트하기
struct Point {
var x: Int
var y: Int
mutating func moveBy(x deltaX: Int, y deltaY: Int) {
x += deltaX
y += deltaY
}
}
var point = Point(x: 0, y: 0)
point.moveBy(x: 5, y: 5)
print(point) // Output: Point(x: 5, y: 5)
- 설명: 이 예제에서
Point
Struct는x
와y
좌표를 나타냅니다.moveBy
메소드는x
와y
값을 변경하여 위치를 이동시키는 역할을 합니다. 여기서moveBy
메소드가 Struct의 프로퍼티 값을 변경하므로,mutating
키워드를 사용하여 해당 메소드가 Struct의 값을 변경할 수 있도록 명시해 주어야 합니다.
예제 2: Enum에서 상태 전환
enum LightSwitch {
case off, on
mutating func toggle() {
switch self {
case .off:
self = .on
case .on:
self = .off
}
}
}
var light = LightSwitch.off
light.toggle()
print(light) // Output: on
- 설명:
LightSwitch
Enum에서는toggle
메소드를 통해 상태를 전환합니다. Enum도 기본적으로 값 타입이기 때문에toggle
메소드에mutating
키워드를 추가하여 값을 변경할 수 있도록 합니다.
4. Struct와 Class에서의 메소드 변경 차이
Class와 달리 Struct에서는 메소드 내에서 인스턴스의 프로퍼티를 직접 변경할 수 없습니다. Class는 참조 타입이므로, 메소드 내에서 인스턴스의 프로퍼티를 자유롭게 변경할 수 있지만, Struct는 기본적으로 불변성을 유지하기 때문입니다. 따라서, Struct에서 값이 변하는 메소드를 만들고자 할 때 mutating
키워드를 필수적으로 사용해야 합니다.
- Class: 참조 타입으로,
mutating
없이도 메소드 내에서 인스턴스의 상태를 변경할 수 있습니다. - Struct: 값 타입으로, 기본적으로 불변성을 유지하지만
mutating
키워드를 통해 값 변경이 가능한 메소드를 작성할 수 있습니다.
5. 요약 및 결론
Swift의 mutating
키워드는 값 타입(Struct, Enum)에서 프로퍼티를 변경할 수 있는 메소드를 작성할 때 필수적으로 사용됩니다. Swift의 값 타입은 기본적으로 불변성을 유지하려는 성격이 있지만, mutating
키워드를 통해 값 타입의 인스턴스가 내부 상태를 변경할 수 있는 메소드를 작성할 수 있습니다. 이로써 안정성과 예측 가능성을 높이면서도 필요한 경우 데이터의 변경을 허용할 수 있습니다.
초보자라면 값 타입의 변경이 필요할 때는 mutating
을 사용하여 Swift 코드의 안정성을 유지할 수 있도록 하는 것이 좋습니다. 이 가이드를 통해 mutating
의 필요성과 사용법을 쉽게 이해하고, 상황에 맞는 사용법을 익힐 수 있기를 바랍니다.
'프로그래밍공부(Programming Study) > IOS 개발' 카테고리의 다른 글
Swift 개발자라면 알아두면 좋은 Xcode 단축키 모음 (0) | 2024.11.13 |
---|---|
SwiftUI에서 View를 `var`, `struct`, `class`로 선언하는 올바른 방법 (0) | 2024.11.11 |
SwiftUI에서 Class와 Struct, 언제 어떻게 사용해야 할까? Swift 초보자를 위한 가이드 (1) | 2024.11.11 |
Swift에서 클래스의 강한 참조, 약한 참조, unowned 참조 완벽 가이드 (2) | 2024.11.10 |
Swift 클로저와 콜백 함수의 모든 것 - 개념, 문법, 특징, 코드 예제 완벽 정리 (4) | 2024.11.09 |
댓글