본문 바로가기
iOS/Swift 문법 심화 학습

mutating

by 황민우 2022. 2. 9.

정의

- 특정 메서드 내에서 구조체 또는 열거형의 프로퍼티를 수정해야 하는 경우 해당 메서드의 동작을 변경하도록 하는 것

- 구조체는 값 타입이기때문에 인스턴스 메서드 내에서 프로퍼티를 수정할 수 없습니다.

- 구조체에서 메서드를 수정하기 위해 mutating 키워드를 사용할 수 있습니다.


예제

- Friend라는 구조체를 하나 생성했습니다.

- Friend구조체는 name과 age 프로퍼티, changeAge 메서드를 가지고 있습니다.

- 현재 코드를 실행해보면 구조체에서 메서드 안의 값을 수정하려고 했기 때문에 오류가 발생합니다.

struct Friend {
    let name: String
    var age: Int
    init(name: String, age: Int) {
        self.name = name.uppercased()
        self.age = age
    }
    
    func changeAge() {
        age = 10
    }
}

 

- 이때, 메서드 앞에 mutating 키워드를 사용해 값 타입 프로퍼티를 수정할 수 있습니다.

struct Friend {
    let name: String
    var age: Int
    init(name: String, age: Int) {
        self.name = name.uppercased()
        self.age = age
    }
    
    mutating func changeAge() {
        age = 10
    }
}

 

실행결과

- man이라는 변수에 arnold라는 name과 24의 age값을 지정해주었습니다.

- 그리고 man 변수에 changeAge() 메서드를 호출해 출력해보았습니다.

- 구조체임에도 불구하고 메서드 내에 10이라는 값이 출력될 것입니다.

struct Friend {
    let name: String
    var age: Int
    init(name: String, age: Int) {
        self.name = name.uppercased()
        self.age = age
    }
    
    mutating func changeAge() {
        age = 10
    }
}

var man = Friend(name: "Arnold", age: 24)
man.changeAge()
print(man.age)

 


내용 출처

https://velog.io/@wook4506/iOS-Swift-Swift-%EB%AC%B8%EB%B2%95%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-18%ED%8E%B8-mutating

https://www.youtube.com/watch?v=0cZJlo6Pga4&list=PLgOlaPUIbynoqbQw_erl3L2w7vfOTCtFD&index=18 

 

'iOS > Swift 문법 심화 학습' 카테고리의 다른 글

옵셔널 체이닝 [ Optional Chaining ]  (0) 2022.02.10
inout  (0) 2022.02.09
제네릭 [ Generic ]  (0) 2022.02.08
고차함수 [ map, filter, reduce ]  (0) 2022.02.07
오류 처리 [ error handling ]  (0) 2022.02.04

댓글