본문으로 건너뛰기

수정 가능 속성과 수정 불가 속성의 이해

스위프트에서 타입을 정할 때 수정 가능mutable, 수정 불가능immutable 속성을 별도로 정할 필요가 없다. var 키워드를 사용해 배열, 세트, 딕셔너리 변수를 만들 때 이들 변수는 기본적으로 수정 가능 객체가 된다. 이 경우 컬렉션에서 값의 추가, 삭제, 변경이 가능하다. 만일 let 키워드를 사용해 배열, 세트, 딕셔너리 등을 만든다면 이들은 상수 객체가 되어 컬렉션에 포함된 요소의 값 또한 수정할 수 없다.

컬렉션의 수정가능 속성

컬렉션 타입으로 작업하고자 할 때 스위프트가 구조체와 클래스에서 수정 가능 속성을 어떻게 처리하는지 미리 알고 있어야 한다. 일부 개발자는 (수정 불가능한) 상수 클래스 인스턴스로 작업할 대 그에 속한 프로퍼티는 여전히 수정 가능하므로 혼란을 겪곤 한다.

구조체 인스턴스를 만들거나 이를 상수에 할당할 때, 변수로 선언되었다 하더라도 해당 인스턴스의 프로퍼티는 수정할 수 없다. 그러나 클래스는 레퍼런스 타입이기 때문에 해당 인스턴스의 프로퍼티는 수정 가능하다.

노트

컬렉션을 변경할 필요가 없는 경우, 애플은 모든 컬렉션을 생성할 때 수정 불가 속성으로 만들 것을 권장하며 이 경우 컴파일러가 컬렉션과 관련된 코드를 처리할 때 성능을 최적할 수 있다고 설명한다.