티스토리 뷰

반응형

 

 


RandomAccessCollection
랜덤 접근 컬렉션

랜덤 접근 컬렉션(RandomAccessCollection)은 첨자 접근 등에 있어서 효율적인 랜덤접근을 지원하는 컬렉션입니다. 랜덤 접근 컬렉션은 프로토콜로 되어있습니다. 

 

 


Declaration
RandomAccessCollection 선언 형태

앞서 말했듯이, RandomAccessCollection은 프로토콜로 되어있으며 해당 프로토콜을 채택한 객체는 Indices, SubSequence에 대해서 RandomAccessCollection의 형태를 준수해주어야합니다. 

 


Overview
개요

랜덤 접근 컬렉션(Random-Access-Collection)은 어느 위치에 있던, 임의의 인덱스 접근을 단 O(1)의 시간복잡도 만으로 수행합니다. 단적인 예로, 스위프트의 기본적인 배열에서 사용하는 랜덤 접근 컬렉션과, String 타입 등에서 사용하는 양방향 접근 컬렉션의 근본적 차이는 이러한 접근 첨자로 이동하는 인덱스의 이동 방식에 따라 달라집니다. 이로인해, 양방향 접근 컬렉션은 첨자접근시 해당 인덱스에 이동하는 동안 모든 위치를 순회해야 하므로 복잡도가 O(N)인 반면, 랜덤 접근 컬렉션은 복잡도가 O(1)이 됩니다.

또 다른 예로, 랜덤 접근 컬렉션(Random-Access-Collection)의 count 프로퍼티 연산 속도는 O(1)이지만, 양방향 접근 컬렉션(Bidirection)의 count 프로퍼티 연산 속도는 O(N)가 됩니다.

 

 


Conforming to the RandomAccessCollection Protocol
RandomAccessCollection 프로토콜 사용하기

랜덤 접근 컬렉션(Random Access Collection)을 준수하기 위해서는 Indices, SubSequence 타입에 관련 된 제약을 충족해야합니다. 그와 반대로 양방향 접근 컬렉션(Bidirectional Access Collection)은 이러한 제약이 필요하지 않습니다. 

그러나 만약 랜덤 접근 컬렉션의 이점을 취하기 위해서는 Indices, SubSequence에 대한 제약을 지켜야 합니다. 또한 랜덤 접근 컬렉션의 인덱스 접근 성능을 보장받기 위해서는 해당 컬렉션을 충족할 커스텀 타입은 Strideable 프로토콜을 반드시 준수하거나, index(_:offsetBy:), distance(from:to:) 메서드를 O(1)의 시간복잡도로 구현해야 합니다. 

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함