본문 바로가기
Languages/Swift

사당 iOS 스터디 5주차 - 제네릭

by 탄이. 2018. 8. 17.

<del>CHAPTER 22 제네릭</del>

제네릭을 사용하고자 하는 타입 이름 <타입 매개변수>

제네릭을 사용하고자 하는 함수 이름 <타입 매개변수> (함수의 매개변수...)

타입마다 다른 함수를 쓰지 않으려면 Any타입을 사용하면 되지 않을까?

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

댓글