Tori의 개발 공부

[Swift] mutating 키워드란? 본문

IOS App Programming/Swift

[Swift] mutating 키워드란?

B_Tori 2023. 5. 10. 21:02

Swift의 타입 분류

  • 스위프트의 타입은 참조 타입과 값 타입으로 분류된다.
    - 참조 타입 : 클래스
    - 값 타입 : 구조체, 열거형, 튜플
    또한 스위프트의 기본 타입은 모두 구조체로 구현됐다. 즉 값 타입이다.
  • 참조 타입과 값 타입의 차이는 값을 복사하는 과정에 있다.
    - Value Type(값 타입) : 새로운 복사본을 생성해 할당한다. 기존 인스턴스와 별개의 인스턴스가 생성됨 (깊은 복사가 이루어짐)
    - Reference Type (참조 타입) : 원본 데이터의 참조 값이 복사된다. 즉 기존의 인스턴스와 연결되어 있음 (얕은 복사가 이루어짐)
  • Value Type(값 타입)의 인스턴스는 기본적으로 타입 내부 메서드에서 프로퍼티를 수정할 수 없다.
    => 이를 해결하기 위해 mutating이 사용됨

 

mutating이란?

  • 특정 메서드 내에서 구조체 or 열거형의 프로퍼티를 수정해야 하는 경우 이를 가능하도록 하는 키워드
  • 값을 변경할 메서드 맨 앞에 mutating 키워드를 명시하여 값을 변경할 수 있도록한다.
    mutating func 함수(){}
  • mutating의 또 다른 기능으로는 self를 통해 새로운 인스턴스를 할당할 수 있다.

 

mutating 사용하기

mutating을 사용하지 않았을 때

프로퍼티를 변경하려고 하면 오류가 발생한다. 따라서 mutating키워드를 사용한다.

ageUp함수는  age프로퍼티를 한 살 올려주는 함수로 mutating의 첫 번째 기능인 프로퍼티 변경을 보여준다.

changePerson함수는 self와 함께 사용하여 mutating의 두 번째 기능인 새로운 인스턴스로 할당해 주는 함수이다.

 

따라서 인스턴스를 생성할 때는 이름은 swift이고 age는 20으로 할당했지만 ageUp함수를 통해 21살로 age가 바뀌게 된다.

또한 다시 changePerson함수를 통해 아예 새로운 사람의 정보를 할당하였다.