🔥 컬렉션의 가변성

380자
5분

Swift에서는 배열(Array), 집합(Set), 사전(Dictionary)과 같은 컬렉션을 다룰 때, 해당 컬렉션이 가변(mutable)인지 불변(immutable)인지를 고려해야 합니다. 이는 컬렉션을 변수에 할당하느냐 상수에 할당하느냐에 따라 결정됩니다.

가변 컬렉션

변수에 컬렉션을 할당하면 가변 컬렉션이 생성됩니다. 가변 컬렉션은 생성 후에도 아이템을 추가, 제거, 변경하는 등의 작업을 통해 컬렉션을 변경할 수 있습니다. 아래 코드를 통해 가변 배열의 예시를 살펴볼게요.

var numbers = [1, 2, 3, 4, 5] // 가변 배열 생성
numbers.append(6) // 배열에 6을 추가
numbers[0] = 10 // 첫 번째 요소를 10으로 변경
numbers.remove(at: 2) // 인덱스 2의 요소를 제거
 
print(numbers) // [10, 2, 4, 5, 6] 출력
swift

위 코드에서는 numbers라는 가변 배열을 생성하고, 다양한 연산을 통해 배열을 변경하고 있어요. append(_:)를 사용하여 요소를 추가하고, 인덱스를 통해 특정 위치의 요소를 변경하며, remove(at:)을 사용하여 요소를 제거하는 모습을 볼 수 있습니다.

마찬가지로 집합과 사전도 변수에 할당하면 가변 컬렉션이 되죠.

var set = Set([1, 2, 3]) // 가변 집합 생성
set.insert(4) // 집합에 4를 추가
set.remove(2) // 집합에서 2를 제거
 
var dict = ["A": 1, "B": 2] // 가변 사전 생성
dict["C"] = 3 // 사전에 "C": 3 추가
dict["A"] = 10 // "A" 키의 값을 10으로 변경
dict.removeValue(forKey: "B") // "B" 키와 값을 제거
swift

불변 컬렉션

반면에 상수에 컬렉션을 할당하면 불변 컬렉션이 생성됩니다. 불변 컬렉션은 한 번 생성되면 크기와 내용을 변경할 수 없습니다. 불변 컬렉션의 예시를 보겠습니다.

let immutableNumbers = [1, 2, 3, 4, 5] // 불변 배열 생성
// immutableNumbers.append(6) // 컴파일 에러 발생!
// immutableNumbers[0] = 10 // 컴파일 에러 발생!
 
let immutableSet: Set<Int> = [1, 2, 3] // 불변 집합 생성
// immutableSet.insert(4) // 컴파일 에러 발생!
 
let immutableDict: [String: Int] = ["A": 1, "B": 2] // 불변 사전 생성
// immutableDict["C"] = 3 // 컴파일 에러 발생!
swift

위 코드에서 immutableNumbers, immutableSet, immutableDict는 모두 상수에 할당된 불변 컬렉션입니다. 이들을 변경하려고 하면 컴파일 에러가 발생한답니다.

언제 가변 컬렉션을 사용할까요?

가변 컬렉션은 컬렉션의 내용을 동적으로 변경해야 하는 경우에 사용합니다. 예를 들어, 사용자의 입력에 따라 배열에 요소를 추가하거나 제거해야 할 때, 가변 배열을 사용하는 것이 적절할 것입니다. 또한 알고리즘 구현 시 중간 결과를 저장하기 위해 가변 컬렉션을 활용할 수도 있겠죠.

반면에 컬렉션의 내용이 변경되지 않고 고정된 경우라면 불변 컬렉션을 사용하는 것이 좋습니다. 불변 컬렉션을 사용하면 실수로 컬렉션의 내용을 변경하는 일을 방지할 수 있고, 코드의 안정성과 예측 가능성이 높아집니다.

따라서 상황에 맞게 적절한 컬렉션의 가변성을 선택하는 것이 중요하답니다!