[Swift] 인덱스 범위 체크를 Swifty하게 하는 방법

Swiftios
avatar
2025.03.09
·
3 min read

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>)이므로 다른 자료형에서는 호환이 어려울 수 있음







- 컬렉션 아티클