프로토콜
프로토콜을 제외한 다른 타입은 값 타입이거나 참조 타입이다. 이러한 타입 구분의 기준은 인스턴스이다. 그러나 프르토콜은 인스턴스를 생성하지 않기 때문에 값 타입도 참조 타입도 아니다.
프로토콜은 인스턴스를 생성할 수 없지만, 타입으로 사용할 수 있다. 이는 스위프트에서 프로토콜을 1급 객체 취급하기 때문이다.
1급 객체란 무엇인가?
컴퓨터 프로그래밍 언어 디자인에서, 일급 객체(영어: first-class object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다.
1급 객체의 조건
일급 객체가 되기 위해선 아래 3가지 조건을 모두 충족하여야 한다.
- 변수에 저장할 수 있어야 한다.
- 객체(함수)의 인자로 전달할 수 있어야 한다.
- 객체(함수)의 리턴값으로 사용할 수 있어야 한다.
프로토콜은 위 조건을 만족하기에 1급 객체이며, 타입으로 사용할 수 있다. 이 조건은 스위프트의 함수 역시 만족한다. 그러므로 함수 역시 타입으로 사용할 수 있다.