본문 바로가기
IOS App Programming/Swift

[Swift] mutating 키워드란?

by B_Tori 2023. 5. 10.

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함수를 통해 아예 새로운 사람의 정보를 할당하였다.

댓글