Swift

Swift) Struct와 Class: mutating의 역할

Sonny Cucumber 2024. 1. 30. 17:38

Swift에서는  struct와 class라는 중요한 두가지 타입이 있는데

mutating 키워드 사용에 중요한 영향을 미친다!

 

 

mutating:  돌현변이, 변하게 만들다

뜻에서 부터 딱 감이 잡히지 않는가???

 

뭔가 안의 내용물을 바꿔준다는 느낌을 준다.

 

먼저 아래 코드를 살펴보자

 

class SimpleClass: ExampleProtocol {
    var simpleDescription: String = "A very simple class."
    var anotherProperty: Int = 69105
    func adjust() {
        simpleDescription += "  Now 100% adjusted."
    }
}
var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescription

struct SimpleStructure: ExampleProtocol {
    var simpleDescription: String = "A simple structure"
    mutating func adjust() {
        simpleDescription += " (adjusted)"
    }
}
var b = SimpleStructure()
b.adjust()
let bDescription = b.simpleDescription

 

값 타입과 참조 타입

대체 왜 Struct에서만 쓰이는거냐???

이건 class와 struct의 타입을 먼저 살펴봐야한다.

 

Swift에서 struct는 값 타입이고 class는 레퍼런스, 즉

참조 타입이다. 

 

그렇기 때문에 struct의 메서드는 해당 struct의

속성, 즉 프로퍼티 값들을 변경할 수가 없다. 

 

Mutating의 역할

즉 이 변경할 수 없는 값들을

바꿔주기 위해서 mutating을 써주는건데

 

마치 공장에서 똑같이 찍어내는

공산품들 중 몇가지 수정해서 찍어내고 싶을 때

mutating을 써준다고 생각하면 된다.

 

추가로 class에선 참조 타입이기 때문에

mutating이 필요가 없는거지

 

주의사항!

하지만 class는 참조가 전달되기 때문에

속성 값을 변경하면 참조가 가리키는

객체가 변경되기 때문에 주의해야한다 !!