카테고리 없음

Protocols as Types

leeyuno 2023. 6. 20. 09:14

프로토콜은 자체적으로 어떤 기능적인 것도 구현하지 않지만 프로토콜은 타입으로도 사용이 가능합니다.

프로토콜을 타입으로 사용하는 일반적인 방법은 프로토콜을 제약조건으로 사용하는 것입니다.

일반적인 제약조건이 있는 코드는 프로토콜을 준수하는 모든 타입에서 사용될 수 있고, 특정 유형은 API를 사용하는 코드에 사용됩니다.

 

예를들어 인자가 있는 함수를 호출하고 인자가 제네릭 타입이면, 호출자는 타입을 선택합니다.

 

이 부분에 대해 잠깐 코드로 보자면, 이렇게 쓰는게 맞는지 모르겠지만 얼추 맞는거 같긴 하니..

RESTFul API 구현시 제약조건으로 프로토콜을 사용하고 있는 예제입니다.

 

Alamofire를 함께 사용중이라고 표시하기 위해 import Alamofire

 

 

이렇게 프로토콜에 API 통신을 위해 구현되어야 하는 제약조건을 추가한다음

각 제약조건의 요구사항을 정의합니다.

 

열거형으로 정의된 SomeAPI에 API통신을 위한 제약조건을 프로토콜을 통해 요구 합니다.

각 케이스별로 호출할 api를 만들고 요구사항을 구현합니다.

 

 

그리고 API를 호출하는 함수를 하나 만듭니다.

제네릭 타입의 api를 함수의 파라미터 중 하나로 설정합니다.

 

 

호출할때는 제네릭 인자로 프로토콜의 요구사항을 만족하는 열거형 케이스를 전달

 

이렇게 해서 열거형을 이용해서 API 목록을 케이스로 만들고 각 케이스가 통신을 위한 프로토콜을 준수하게 합니다.

그리고 제네릭 인자를 포함한 함수를 구현해서 API 통신을 구현합니다.

 

불투명 타입(Opaque Type)은 반환유형을 숨기고 값이 주어진 프로토콜을 준수하는지 확인만 가능한 타입 입니다.

박스형 프로토콜 타입(Boxed protocol type)은 간접적인 수준을 추가, 컴파일시 타입을 알지 못하고 프로토콜에서 요구하는 구성원만 액세스 하도록 하는 타입

 

불투명 타입과 박스형 프로토콜 타입은 따로 정리….