티스토리 뷰
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)의 시간복잡도로 구현해야 합니다.
'iOS 개발 > 개발자문서 정보' 카테고리의 다른 글
스위프트 문법, Generic Where 절 특징 및 사용방법 (0) | 2020.07.27 |
---|---|
스위프트의 기본 컬렉션 타입 특징 및 사용방법 (0) | 2020.07.26 |
Swift 문법, Extension 확장 역할 및 사용방법 (0) | 2020.07.21 |
Swift 문법 Error Handling, 에러처리 특징 및 사용법 (0) | 2020.07.20 |
스위프트 Opaque Types 1) 불투명타입의 필요성 (0) | 2020.07.19 |
- Total
- Today
- Yesterday
- uikit
- createML
- 김프매매
- SwiftUI
- 백준알고리즘
- swift문제
- Swift 알고리즘
- 스위프트
- Collection
- swift string
- 프로그래머스swift
- swift알고리즘
- 개발자문서
- CoreML
- 백준swift
- 부스트코스
- 자연어처리
- 프로그래머스
- swift reduce
- swift
- 프로토콜
- publisher
- 알고리즘문제
- swift 문자열
- swift언어
- 알고리즘
- swift 기초
- Protocol
- ios
- 컬렉션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |