Swift에서 컬렉션의 인덱스를 안전하게 체크하는 방법은 여러 가지가 있다. 안전한 인덱스 접근은 크래시를 방지하고 코드의 안정성을 높이는 중요한 요소이다. 이 글에서는 여러 가지 방식을 비교하여 가장 Swifty한 방식이 무엇인지 살펴보겠다.
contains(_ :)
를 활용한 범위 체크
(0..<arr.count).contains(index)
장점
간결하고 읽기 쉬움
contains(_ :)
를 사용하여 직관적인 표현 가능범위 연산자를 활용하여 Swift 다운 표현이 가능함
단점
arr.count
가 매번 평가되므로 큰 배열에서는 성능에 영향을 줄 수 있음
~+
연산자를 활용한 범위 체크
index ~= (0..<arr.count)
장점
~=
연산자는contains(_ :)
를 대체할 수 있으며, Swift의 패턴 매칭 기능을 활용- 코드가 더 짧아지고, 범위를 체크하는 목적이 명확해짐
단점
~=
연산자가 일반적으로 자주 사용되지 않아 가독성이 떨어질 수 있음contains(_ :)
와 마찬가지로count
를 평가해야 함
직접 비교 연산자로 체크
index >= 0 && index < arr.count
장점
가장 명확한 표현으로 직관적
count
를 여러번 평가하지 않으므로 성능 면에서 유리
단점
다소 기본적인 방식이라 Swifty한 느낌이 덜함
가독성이 위의 두 방식보다는 떨어질 수 있음
indices.contains(_ :)
를 활용한 방법
arr.indices.contains(index)
장점
indeices
프로퍼티를 사용하여 배열의 유효한 인덱스 범위를 직접 확인Siwft의 컬렉션 기능을 활용한 가장 자연스러운 방법
count
를 직접 참조하지 않아 코드가 깔끔해짐
단점
indices
가 Range 형식(Range<Int>
)이므로 다른 자료형에서는 호환이 어려울 수 있음