궁금한 내용을 검색해보세요!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
서근 개발노트
티스토리에 팔로잉
SWIFT/Grammar

Swift : 스위프트의 주요 프로토콜 모음(설명)

서근
QUOTE THE DAY

-
Written by SeogunSEOGUN

반응형

스위프트의 주요 프로토콜 모음

기초문법을 알아가면서 궁금했던 각각의 프로토콜의 정의를 살펴보고자 한다. 이 게시글 외에 Swift 문서를 참고하면 프로토콜 간의 상관관계 또한 쉽게 파악할 수 있으니 Swift 문서를 읽어보는 것을 추천한다!

TIP
 
 

스위프트 관련 기술 문서 사이트
스위프트 문서 (영문) 추천
스위프트 블로그
스위프트 Language Guide(한국어)

Swift 표준 라이브러리에 정의된 주요 프로토콜을 알아두면 Swift의 기본 기능을 더욱 편리하게 활용할 수 있다.

프로토콜 이름 설명
AnyObject 모든 클래스 타입이 암시적으로 준수하는 프로토콜
BinaryInteger 스위프트의 정수 타입을 위한 요구사항. 숫자들이 언어 안에서 어떻게 작동되고 있는지 검사하기 위한 함수이다.
CaseIterable 연관값이 없는 열거형인 경우에 CaseIterable 프로토콜을 준수하면 각각의 case를 순화할 수 있다. 순화할 caseallCases 콜렉션으로 제공한다.
Codable CodableEncodableDecodable 프로토콜의 합성 프로토콜이다. Codable 프로토콜을 준수하는 타입은 다른 표현방식으로 상호 변환할 수 있다. 대표적으로 스위프트의 인스턴스를 JSON 문자열로 변환하고, 반대로 JSON 문자열을 스위프트의 인스턴스로 상호 변환할 수 있는 기능을 제공한다.
CodingKey 인코딩과 디코딩의 키로 활용할 타입이다.
Collection 요소에 인덱스와 서브스크립트로 접근할 수 있는 시퀀스 이다.
Comparable 관계 연산자(<. <=, >=, > 등)을 사용해 비교할 수 있는 타입이다. 숫자나 문자열 처럼 순서를 갖는 타입에 사용하기 적합하다. 스위프트 표준 라이브러리의 대부분의 타입Comparable 프로토콜을 준수한다.
CustomStringConvertible 사용자 정의 텍스트 표현을 할 수 있는 타입이다. 사용자 정의 텍스트 표현은 print 등의 함수에서 사용하는 출력 스트림에 쓰일 수 있다.
Equatable ==!= 연산자를 사용해 값이 동일한지 판단할 수 있는 타입이다. 스위프트 표준 라이브러리에 정의된 대부분의 타입Equatable 프로토콜을 준수한다. 사용자 정의 타입에서 Equatable 프로토콜을 채택하면 해당 타입을 위한 == 연산자를 구현해야 한다. 그러면 표준 라이브러리에서 != 연산자를 자동으로 구현해 준다.
Error 던질 수 있는 오류를 표현하는 타입이다. Error 프로토콜을 준수하는 타입은 스위프트의 오류 처리 시스템의 오류를 표현한다. Error 프로토콜은 별다른 요구사항의 정의가 없기 때문에 어떤 타입이든 채택하면 준수 가능하다. 열거형 타입을 활용해 오류를 표현하는데 많이 사용한다.
FixedWidthInteger 정수 오버플로[각주:1] 연산을 지원하기 위한 요구사항이다.
Hashable 정수 해시 값을 제공하고 DictionaryKey가 될 수 있는 타입이다.
IteratorProtocol 시퀀스[각주:2]를 통한 반복을 위해 반복 상태와 인터페이스를 캡슐화 한다.
Sequence for-in 구문을 통해 반복될 수 있는 타입이다.
SignedInteger 스위프트의 부호가 있는 정수 타입을 위한 요구사항이다.
SignedNumeric 뺄셈 연산이 가능하며 음의 표현이 가능하고 0으로 초기화될 수 있는 타입이다.
Numeric 곱셈을 지원하는 값이 있는 유형 타입이다. 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] 값을 갖는 하나의 문자를 갖는 문자열 리터럴을 통해 초기화할 수 있는 타입이다.

 

 

읽어주셔서 감사합니다 🤟

 

 

  1. 정수 오버플로우(Integer Overflow)란 정수형 변수가 연산 중 표현 범위를 넘어 의도와는 다른 값이 저장되는 현상을 말한다. [본문으로]
  2. 시퀀스(Sequence)는 직역하면 연속열이 될 수 있으며, 문자 그대로 개개의 원소들을 순서대로 하나씩 순회할 수 있는 타입을 의미한다. (Swift 기본 타입에 대해서는 사실상 모든 집합 타입이 이에 해당한다.) 시퀀스는 Swift 문법과 밀접한 관련이 있는데, for-in 구문에 사용된다는 점이다. [본문으로]
  3. 유니코드 스칼라는 Character 하나하나를 위한 유니크한 21-bit Number 이다. 예를들어 "\u{1F1FA}\u{1F1F8}" 는 🇺🇸 이다. [본문으로]

잘못된 내용이 있으면 언제든 피드백 부탁드립니다.


서근


위처럼 이미지 와 함께 댓글을 작성할 수 있습니다.