## 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://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)