티스토리 뷰

반응형

 

 


Traversing a Collection
컬렉션 순회하기

비록 Collection이 채택하고 있는 Sequence 프로토콜 또한 순회하는 역할로서 사용되어지지만, Collection 은 멀티패스(MultiPass)를 보장합니다.

어떠한 요소(element)라도 그들의 인덱스가 저장 됨으로서 반복적으로 접근될 수 있습니다. 무엇보다도, Collection의 색인 범위는 내부 요소들의 위치에 대한 유한한 범위를 갖고 있습니다. 즉, Collection이 유한한 색인 범위를 보장한다는 것은 많은 Sequence 작업을 함에 있어 안전을 보장함을 의미합니다. 예를들면 Collection이 특정 요소를 가지고 있는지 확인하는데 사용하는 contains(_:) 메서드가 있습니다. 

그들의 위치에 따라 Collection의 요소들을 반복하여, 반복자를 사용해서 Collection 상에서 동일한 위치의 동일한 값을 생성하게 됩니다.

아래의 예시는 String에 속해있는 Character타입의 character가 반복자에 의해 String 내의 동일 요소들을 동일한 순서로 반환하는 예시입니다. 


String 타입 또한 Collection 프로토콜을 준수하고 있습니다. 그러므로 반복자를 통한 순회가 가능합니다.

String의 Element는 Character 타입을 갖고 있습니다. 위의 for 문 루프에서는 Character 타입의 character 반복자를 통해 순차적으로 word문자열의 문자를 출력하게 됩니다. 그 출력 결과는 아래와 같습니다. 

 

 

 

String의 반복자 출력 예시

 

 


Conforming to the Collection Protocol
Collection Protocol 준수하기 

요소들에 대한 반복되는 접근을 제공하는 커스텀 Sequence를 만들고 싶다면, 해당 Sequence가 Collection 프로토콜을 준수하도록 해주어야 합니다. Collection 프로토콜을 채택해야 더욱 유용하고 효율적인 Sequence, Collection 연산 인터페이스를 설정할 수 있습니다. 

당신의 타입에 Collection 성능을 부여하기 위해, 아래와 같은 요구사항을 준수해야합니다. 

- startIndex, endIndex 프로퍼티
- 타입 요소에 첨자접근에 대한 읽기전용 접근 제공
- 당신의 Collection index에 접근하기 위한 index(after:) 메서드

 

 

 


Expected Performance
컬렉션의 예상 성능

Collection 프로토콜을 준수하는 타입들은 startIndex, endIndex 프로퍼티를 제공해야합니다. 또한 일반적으로 O(1)의 시간복잡도로 요소(element)들을 첨자접근 할 수 있어야 합니다.

이러한 성능을 보장하지 않는 경우에는 그 부분에 대해 문서화해야 합니다. 왜냐하면 많은 Collection 연산들은 첨자방식 접근 시 O(1)의 시간복잡도를 갖고 있으며 이를 보장하고 있기 때문입니다. 

Collection 연산의 성능은 Collection이 제공하는 인덱스의 타입에 의존합니다. 예를들면, 일반 Array등의 랜덤접근컬렉션(random-access collection)의 경우 두 인덱스 간 거리, Collection의 길이를 구할때(count) 시간복잡도는 O(1) 이지만, String등에서 준수하는 양방향컬렉션(bidirectional collection)의 경우 Collection의 길이를 구하기 위해 모든 요소를 순회해야하며 count의 시간복잡도는 O(N)이 됩니다.

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
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
글 보관함