[Swift] Protocol은 타입일까?
먼저, Protocol은 타입이다. (두괄식 글쓰기)
[The Swift Programming Language (Swift 4) - Types]
타입이란?
Swift에는 Named Types와 Compound Types가 있다. 한글로 말하자면 명명된 타입과 복합타입 정도가 되겠다.
Named Types
말 그대로 명명된, 이름이 지어진 타입이다.
우리가 잘 알고 있는
- Class / Struct
- Enum
- 기본 데이터 타입(Int, String, Bool 등등..)
외에도
Protocol이 여기에 속한다.
Compound Types
- function
- tuple
이름이 없는 타입이다. 이 타입의 경우 Named Type과 Compound Type가 포함될 수 있다.
예: (Int, (Int, Int))
-> Tuple은 Compound Type이지만 Named Type과 Compound Type 둘 다 포함할 수 있다.
타입은 이런 것들이 있구나...알아봤고
일급객체이기 때문에 타입으로 사용할 수 있다는 말을 어디서 많이 봤는데..
일급객체는 무엇일까?
일급객체?
일급객체란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다고 한다.
일급객체는 될 수 있는 조건들이 있는데, 이것을 만족한다면 일급객체이다.
1. 런타임에 객체 생성이 가능하다.
2. 데이터 구조 안에 저장할 수 있다.
3. 객체를 함수의 인자 값으로 전달할 수 있다.
4. 객체를 함수의 반환 값으로 전달할 수 있다.
프로토콜은 일급객체이고 타입인 건 알겠는데
그래서 왜 일급객체이면 타입인데요..?
사실 이거까진 못알아냈다.
다만 프로토콜이 타입인 이유는 확실하다.
공식문서에 그렇게 나와있다...
공식문서:
[The Swift Programming Language (Swift 5.6) - Protocol]
다음과 같이 다른 타입이 허용되는 많은 위치에서 프로토콜 역시 사용할 수 있다.
- 함수, 메서드 또는 이니셜라이저에서 매개변수 타입 또는 반환 타입으로 사용
- 상수, 변수 또는 속성의 타입으로 사용
- 배열, 딕셔너리 또는 기타 컨테이너의 타입으로 사용
💡 여기까지 쓰다가 갑자기 이런 생각이 들었다.❗️
일급객체라서 타입인 것이 아니고, 일급객체의 조건들을 만족하기 때문에 타입으로 사용할 수 있는 게 아닐까?
타입으로 사용하기 위해서는, 위의 일급객체 설명에서 썼던 것처럼 일반적으로 적용 가능한 연산을 모두 지원해야하기 때문에, 그 조건을 이미 갖추고 있는 일급객체들은 타입으로 사용할 수 있는 것이다.
일급객체면 -> 타입이다 ❌
일급객체면(일급객체의 조건을 만족한다면) -> 타입으로 사용할 수 있다 ⭕️
라고 정리할 수 있을 것 같다.
더 공부를 해보다가 생각이 바뀌면 다시 수정하러 오겠다...
(화려한 뇌피셜로 마무리)
Author And Source
이 문제에 관하여([Swift] Protocol은 타입일까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@horeng2/Swift-Protocol은-타입일까저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)