Swift 표준 라이브러리에 정의된 주요 프로토콜을 알아두면 Swift의 기본 기능을 더욱 편리하게 활용할 수 있다.
프로토콜 이름
설명
AnyObject
모든 클래스 타입이 암시적으로 준수하는 프로토콜
BinaryInteger
스위프트의 정수 타입을 위한 요구사항. 숫자들이 언어 안에서 어떻게 작동되고 있는지 검사하기 위한 함수이다.
CaseIterable
연관값이 없는 열거형인 경우에 CaseIterable 프로토콜을 준수하면 각각의 case를 순화할 수 있다. 순화할 case는 allCases 콜렉션으로 제공한다.
Codable
Codable은 Encodable과 Decodable 프로토콜의 합성 프로토콜이다. Codable 프로토콜을 준수하는 타입은 다른 표현방식으로 상호 변환할 수 있다. 대표적으로 스위프트의 인스턴스를 JSON 문자열로 변환하고, 반대로 JSON 문자열을 스위프트의 인스턴스로 상호 변환할 수 있는 기능을 제공한다.
CodingKey
인코딩과 디코딩의 키로 활용할 타입이다.
Collection
요소에 인덱스와 서브스크립트로 접근할 수 있는 시퀀스 이다.
Comparable
관계 연산자(<. <=, >=, > 등)을 사용해 비교할 수 있는 타입이다. 숫자나 문자열 처럼 순서를 갖는 타입에 사용하기 적합하다. 스위프트 표준 라이브러리의 대부분의 타입은 Comparable 프로토콜을 준수한다.
CustomStringConvertible
사용자 정의 텍스트 표현을 할 수 있는 타입이다. 사용자 정의 텍스트 표현은 print 등의 함수에서 사용하는 출력 스트림에 쓰일 수 있다.
Equatable
== 및 != 연산자를 사용해 값이 동일한지 판단할 수 있는 타입이다. 스위프트 표준 라이브러리에 정의된 대부분의 타입은 Equatable 프로토콜을 준수한다. 사용자 정의 타입에서 Equatable 프로토콜을 채택하면 해당 타입을 위한 == 연산자를 구현해야 한다. 그러면 표준 라이브러리에서 != 연산자를 자동으로 구현해 준다.
Error
던질 수 있는 오류를 표현하는 타입이다. Error 프로토콜을 준수하는 타입은 스위프트의 오류 처리 시스템의 오류를 표현한다. Error 프로토콜은 별다른 요구사항의 정의가 없기 때문에 어떤 타입이든 채택하면 준수 가능하다. 열거형 타입을 활용해 오류를 표현하는데 많이 사용한다.
곱셈을 지원하는 값이 있는 유형 타입이다. Numeric정수 및 부동 소수점 숫자와 같은 스칼라 값에 대한 산술에 적합한 기반을 제공한다. Numeric프로토콜을 일반 제약 조건으로 사용하여 스위프트 표준 라이브러리의 모든 숫자 형식에서 작동하는 일반 메서드를 작성할 수 있다.
TextOutputStreamable
텍스트 스트리밍 기능을 실행할 수 있는 타입이다. TextOutputStreamable 인스턴스는 어떤 출력 스트림이든 쓰일 수 있다. TextOutputStreamable 프로토콜을 준수하는 대표적인 타입은 String, Character, UnicodeScalar 등이 있다.
UnsignedInteger
스위프트의 부호가 없는 정수 타입을 위한 요구 사항이다.
ExpressibleByOOOLiteral
리터럴(Literal)은 코드에 쓰기 값의 타입대로 그 타입의 인스턴스를 생성할 수 있도록 하는표현이다.
ExpressibleByOOOLiteral 종류의 프로토콜은, 코드에 쓰이는 그대로 자신의 타입으로 인스턴스를 초기화하고 생성할 수 있는 타입의 프로토콜을 의미한다.
한 가지 예로 ExpressibleByArrayLiteral 프로토콜을 준수한다면, 배열 리터럴로 자신의 인스턴스를 초기화할 수 있는 타입이 된다는 것을 뜻한다.
대표적으로 Set 타입은 ExpressibleByArrayLiteral 프로토콜을 준수한다. 그렇기 때문에 let someSet: Set <Int> = [1, 2, 3]처럼 표현할 수 있는 것이다.
프로토콜 이름
설명
ExpressibleByArrayLiteral
배열 리터럴을 통해 초기화할 수 있는 타입이다.
ExpressibleByBooleanLiteral
불리언 리터럴을 통해 초기화할 수 있는 타입이다.
ExpressibleByDictionaryLiteral
딕셔너리 리터럴을 통해 초기화할 수 있는 타입이다.
ExpressibleByFloatLiteral
부동소수 리터럴을 통해 초기화할 수 있는 타입이다.
ExpressibleByIntegerLiteral
정수 리터럴을 통해 초기화할 수 있는 타입이다.
ExpressibleByNilLiteral
nil을 통해 초기화할 수 있는 타입이다.
ExpressibleByStringLiteral
문자열 리터럴을 통해 초기화할 수 있는 타입이다.
ExpressibleByUnicodeScalarLiteral
유니코드 스칼라[각주:3] 값을 갖는 하나의 문자를 갖는 문자열 리터럴을 통해 초기화할 수 있는 타입이다.
읽어주셔서 감사합니다 🤟
정수 오버플로우(Integer Overflow)란 정수형 변수가 연산 중 표현 범위를 넘어 의도와는 다른 값이 저장되는 현상을 말한다. [본문으로]
시퀀스(Sequence)는 직역하면 연속열이 될 수 있으며, 문자 그대로 개개의 원소들을 순서대로 하나씩 순회할 수 있는 타입을 의미한다. (Swift 기본 타입에 대해서는 사실상 모든 집합 타입이 이에 해당한다.) 시퀀스는 Swift 문법과 밀접한 관련이 있는데, for-in 구문에 사용된다는 점이다. [본문으로]
유니코드 스칼라는 Character 하나하나를 위한 유니크한 21-bit Number 이다. 예를들어 "\u{1F1FA}\u{1F1F8}" 는 🇺🇸 이다. [본문으로]