반응형
struct의 immutability
struct는 한 번 생성자를 초기화하면 struct 내부에서는 var 로 선언되더라도 프로퍼티의 값을 바꿀 수 없게된다. 예를 들어 아래와 같이 struct Person에 addAge를 하는 코드를 넣어본 후 실행해보자.
struct Person {
let name: String
var age: Int
let temperature: Float
init(_name: String, _age: Int, _temperature : Float) {
name = _name
age = _age
temperature = _temperature
}
func addAge() {
age += 1
}
}
아래와 같이 age가 immutable 하다는 warning이 뜬다. 이유는 초기화 후에는 struct의 self가 immutable이 되어서 내부에서는 self.age로 접근하게 되면 오류가 생기는 것이다.
이를 해결하는 방법은 다음과 같이 mutating 키워드를 func의 앞에 붙이는 것이다. 그러면 해당 func은 struct의 self의 var 프로퍼티들을 바꿀 수 있게된다.
struct Person {
let name: String
var age: Int
let temperature: Float
init(_name: String, _age: Int, _temperature : Float) {
name = _name
age = _age
temperature = _temperature
}
mutating func addAge() {
age += 1
}
}
아래와 같이 오류가 안나는 것을 확인할 수 있다.
주의할 점은 아래 3가지를 모두 만족시켜야 struct 내부 프로퍼티 변경이 struct내부 함수에서 동작한다는 점이다.
- struct의 프로퍼티(age)가 var로 선언이되어야 한다.
- 바깥에서 초기화하는 변수(person)가 var로 선언되어야 한다.
- struct 내부 함수에 mutating이 붙어야 한다
이는 불변성에 대한 안전장치로 보인다.
반응형
'IOS > Swift' 카테고리의 다른 글
[Swift] protocol이란 무엇인가? (0) | 2021.12.22 |
---|---|
[Swift] Struct와 Class의 차이는 무엇인가? (0) | 2021.12.20 |
[Swift] struct 한 번에 정리하기 (1) | 2021.12.19 |
[Swift 제어문] switch case 사용해 다중 조건 처리하기 (0) | 2021.12.19 |
[Swift 제어문] if 문 다루는 방법 한 번에 정리하기 (0) | 2021.12.19 |