수행하려는 작업 목적에 맞춰 적절한 컬렉션을 선택하세요. Array<T>는 요소의 순서를
보존합니다. Map<K, V>는 고유한 키를 값에 연결합니다. Set<T>은 중복
없는 원소를 저장합니다. 각 메서드는 이러한 역할을 지키며, 호스트
컨테이너의 임의적인 동작을 따르지 않습니다.
작업에 맞는 연산 고르기
| 하려는 일 | 권장 기능 | 결과와 위험 |
|---|---|---|
| 존재하지 않을 수 있는 배열 인덱스 읽기 | items.get(index) | Option<T> 반환, 인덱스가 없어도 런타임 오류 없음 |
| 배열 인덱스 존재를 전제로 한 접근 | items[index] | T 반환, 잘못된 인덱스는 런타임 오류 발생 |
| 존재하지 않을 수 있는 맵 키 검색 | values.get(key) | Option<V> |
| 맵 키 부재 시 기본값 사용 | values.getOr(key, default) | V |
| 세트에 값이 포함되어 있는지 확인 | values.contains(value) | bool |
| 후속 변경과 격리된 맵 순서 확인 | keys, values, entries | 삽입 순서를 복사한 스냅샷 |
| 변환된 컬렉션 생성 | map, filter, sorted, 집합 대수 | 새 컬렉션 |
| 기존 컬렉션 변경 | let mut 대상의 문서화된 변경 메서드 | 제자리 변경 |
Array, Map, Set 함께 사용하기
let 과제들 = ["draft", "check", "ship"]
let 선택 = 과제들.get(1)
let mut 점수들: Map<string, int> = Map.new()
점수들.insert("ada", 10)
점수들.insert("lin", 12)
let mut 레이블들 = Set.of("docs")
레이블들.add("tests")
print("{선택}:{점수들.get("lin")}:{점수들.keys}:{레이블들.toArray()}")Some(check):Some(12):[ada, lin]:[docs, tests]두 조회 연산은 값이 없을 수도 있는 위치에 접근하므로 Some을 반환합니다.
점수들.keys와 레이블들.toArray()는 삽입 순서를 유지합니다. 나중에
점수들이나 레이블들을 변경하더라도 이미 생성된 스냅샷은 변하지 않습니다.
안전한 조회, 변경, 실행 오류
Array의 get, indexOf, pop, removeAt 메서드는 Option을 반환합니다.
pop과 removeAt은 대상 자체를 변경하므로 수신자 루트가 let mut으로
선언되어 있어야 합니다. slice는 반열린 범위를 유효한 범위로 맞춘 새 배열을
반환합니다. 반면 직접 인덱싱과 잘못된 위치에 대한 insert 호출은 계약
위반이므로 런타임 오류가 발생합니다.
Map의 get과 remove는 Option을 반환하고, containsKey는 bool을
반환합니다. insert, clear, update는 대상을 직접 변경합니다. mapValues와
filter는 남은 키의 순서를 유지하는 새 맵을 반환합니다.
Set의 contains와 remove는 bool을 반환합니다. add, remove,
clear는 대상을 직접 변경합니다. union, intersection, difference는
정해진 순서를 갖는 새 집합을 반환합니다.
핵심 Array, Map, Set 연산에는 Result를 반환하는 메서드가 없습니다.
복구 가능한 외부 실패 처리는 값을 생성하는 파서, 디코더, 파일 입출력 작업 등의
몫입니다. 해당 Result를 처리하거나 전달한 뒤 컬렉션 연산을 적용하세요.
흔한 수정: x in map은 키 존재 여부를 확인하는 올바른 표현이 아닙니다.
map.containsKey(x) 또는 x in map.keys를 사용하세요. 문자열은 배열이
아니며 .length 속성도 없습니다. 스칼라 수가 필요한 경우
text.scalars().length를 사용하세요.
정확한 경계
- Map 키와 Set 원소는 재귀적으로 키가 될 수 있는 타입이어야 하며, 올바르지 않은 타입은 정적으로 거부됩니다.
- 불변 바인딩으로 값을 변경하려 하면 정적 진단 오류가 출력됩니다.
- 기존 맵 값을 갱신해도 위치는 그대로 유지되며, 삭제 후 다시 삽입하면 맨 뒤로 이동합니다.
- Map과 Set은 메서드를 사용하더라도 범용 동등성을 획득하지 않습니다.
- 콜백은 컬렉션에 명시된 순회 순서에 따라 호출됩니다.
컬렉션과 컴프리헨션, Null·Option·결과·fault, 표준 라이브러리 개요로 이어서 살펴보세요.