<del>CHAPTER 22 제네릭</del>
제네릭을 사용하고자 하는 타입 이름 <타입 매개변수>
제네릭을 사용하고자 하는 함수 이름 <타입 매개변수> (함수의 매개변수...)
Any타입의 두 변수에 어떤 타입의 값이 들어있을지 모릅니다. Int면 Int끼리, String이면 String끼리 교환하고 싶은데, 그런 제한을 줄 수 없는 것
다른 타입인 String 타입의 변수(stringOne, stringTwo)를 전달인자로 전달할 수가 없습니다.
__22.1 제네릭 함수
제네릭 함수는 실제 타입 이름(Int, String 등)을 써주는 대신에 플레이스홀더를 사용
타입 매개변수
플레이스홀더 타입의 이름을 지정하고 명시하는 역할을 하며, 함수의 이름 뒤 홀화살괄호 기호(<>) 안쪽에 위치
함수의 매개변수의 타입으로 사용
함수의 반환 타입으로 사용
함수의 내부 변수의 타입 지정을 위해 사용
호출할 때마다 다른 타입으로 작동
__22.2 제네릭 타입
제네릭 타입을 구현하면 사용자정의 타입인 구조체, 클래스, 열거형 등이 어떤 타입과도 연관되어 동작할 수 있습니다.
스택의 요소로 한 타입을 지정해주면 그 타입으로 계속 스택이 동작하길 바라며, 처음 지정해주는 타입은 스택을 사용하고자 하는 사람 마음대로 지정할 수 있도록 제네릭을 사용
Element의 타입을 정해주면 그 타입에만 동작하도록 제한할 수 있어 더욱 안전하고 의도한 대로 기능을 사용하도록 유도
__22.3 제네릭 타입 확장
익스텐션을 통해 제네릭을 사용하는 타입에 기능을 추가하고자 한다면 익스텐션 정의에 타입 매개변수를 명시하지 않아야 합니다
__22.4 타입 제약
타입 제약은 타입 매개변수가 가져야 할 제약사항을 지정할 수 있는 방법
클래스 타입 또는 프로토콜로만 줄 수 있습니다.
제네릭 타입에 제약을 주고 싶으면 타입 매개변수 뒤에 콜론을 붙인 후 원하는 클래스 타입 또는 프로토콜을 명시
__22.5 프로토콜의 연관 타입
프로토콜에서 사용할 수 있는 플레이스홀더 이름
제네릭의 타입 매개변수와 유사한 기능으로, 프로토콜 정의 내부에서 사용할 타입이 ‘그 어떤 것이어도 상관없지만, 하나의 타입임은 분명하다’라는 의미
제네릭 타입에서는 연관타입과 타입 매개변수를 대응시킬 수도 있습니다.
__22.6 제네릭 서브스크립트
참고
야곰의 스위프트 프로그래밍 https://book.naver.com/bookdb/book_detail.nhn?bid=12571019
댓글