## Array & String 공통으로 채택하고 있는 프로토콜 - [BidirectionalCollection](https://developer.apple.com/documentation/swift/array/bidirectionalcollection-implementations) : 순차적으로 앞뒤로 이동할 수 있는 컬렉션 - [Collection](https://developer.apple.com/documentation/swift/array/collection-implementations) : 컬렉션에 대한 일반적인 동작을 추상화하는 프로토콜 - [CustomDebugStringConvertible](https://developer.apple.com/documentation/swift/array/customdebugstringconvertible-implementations) : 디버깅 시 변수나 객체의 상태를 확인하기 쉽도록 사용자 정의된 문자열 표현을 제공 - [CustomReflectable](https://developer.apple.com/documentation/swift/array/customreflectable-implementations) : 사용자 정의 리플렉션 정보를 제공하기 위해 사용 - [CustomStringConvertible](https://developer.apple.com/documentation/swift/array/customstringconvertible-implementations) : 사용자 정의 문자열 표현을 제공하기 위해 사용 - [Decodable](https://developer.apple.com/documentation/swift/decodable) : 자기 자신을 외부 표현으로 decode 할 수 있는 타입 - [Encodable](https://developer.apple.com/documentation/swift/encodable) : 자기 자신을 외부 표현으로 encode 할 수 있는 타입 - [Equatable](https://developer.apple.com/documentation/swift/equatable) : 값이 같은지 비교할 수 있는 형식 - [Hashable](https://developer.apple.com/documentation/swift/hashable) - dictionary의 key의 타입으로 사용할 때 - set의 타입으로 사용할 때 - Hashable을 채택하면 hash Value를 구할 수 있게 되는데, hash Value는 요소들의 위치를 찾는 수단이 된다![](https://hackmd.io/_uploads/Sy6Y7Fyqn.png) - [참고자료 - 블로그](https://velog.io/@dev_jane/t1qqngub) - [MLDataValueConvertible](https://developer.apple.com/documentation/createml/mldatavalueconvertible?changes=late_7_5) - 자신을 데이터 값으로 변환하거나 데이터 값에서 변환할 수 있는 형식 - [RangeReplaceableCollection](https://developer.apple.com/documentation/swift/rangereplaceablecollection) - 요소의 임의 하위 범위를 다른 컬렉션의 요소로 대체하는 것을 지원하는 컬렉션 - [Sequence](https://developer.apple.com/documentation/swift/sequence) - 해당 요소에 대한 순차적이고 반복적인 액세스를 제공하는 형식 - [_IntentValue](https://developer.apple.com/documentation/swift/array/_intentvalue-implementations)