반응형
9.1 제네릭 타입 파라미터
- 제네릭스를 사용하면 타입 파라미터를 받는 타입을 정의할 수 있다
- Map<String, Person>
- map의 key, value 값의 타입을 명시해 줄 수 있다
- kotlin은 llistOf("Dumitry", "asdfa") 이런 리스트를 받으면 type을 string으로 알아서 추론해 준다
val readers : MutableList<String> = mutableListOf()
val readers = mutableListOf<String>()
// 위 두 선언은 동등하다
9.1.1 제네릭 함수와 프로퍼티
- 리스트를 다루는 함수를 작성하는 경우
- 모든 타입의 리스트를 잘 다루고 싶다
- 컬렉션을 다루는 라이브러리 함수는 대부분 제네릭 함수이다
- ex.slice
9.1.2 제네릭 클래스 선언
- 표준 자바 인터페이스인 List를 코틀린으로 정의
interface List<T>{
operator fun get(index: Int): T
// ...
}
- 제네릭 클래스를 확장하는 클래스를 정의하려면, 기반 타입의 제네릭 파라미터에 대해 타입 인자를 지정해야 한다
- 심지어 클래스가 자기 자신을 타입 임자로 참조할 수도 있다
- ex. Comparable interface
- 심지어 클래스가 자기 자신을 타입 임자로 참조할 수도 있다
9.1.3 타입 파라미터 제약
- 클래스나 함수에 사용할 수 있는 타입 인자를 제한
- ex. 리스트 원소의 합 sum()
- List<String>의 경우에 적용 불가
- 이러한 경우에 숫자 타입만 가능하도록 제약을 건다
- 어떤 타입을 제네릭 타입의 타입 파라미터에 대한 상한(upper bound)로 지정
- 두 파라미터 사이에서 더 큰 값을 찾는 제네릭 함수
- 서로를 비교할 수 있어야 함
- 함수 시그니처에도 두 인자를 서로 비교할 수 있어야 한다는 사실을 지정해야 한다
- 이런경우에 상한 타입은 Comparable
9.1.4 타입 파라미터를 널이 될 수 없는 타입으로 한정
- 아무런 상한을 정하지 않은 타입 파라미터는 결과적으로 Any?를 상한으로 정한 파라미터와 같다
- 여기까지의 내용은 자바 제네릭스와 비슷하다
반응형
'Languages' 카테고리의 다른 글
kotlin 고차함수에서의 흐름제어 (return, @label) (0) | 2020.05.27 |
---|---|
kotlin의 inline 함수 (고차함수, synchronized) (0) | 2020.05.26 |
kotlin의 고차함수 (lambda) (0) | 2020.05.26 |
kotlin의 구조분해 선언과 component 함수 (0) | 2020.05.18 |
kotlin 의 비교 연산자 오버로딩 (equals, compareTo) (0) | 2020.05.18 |