Languages

kotlin의 제네릭 타입 파라미터 (generic, property)

!쪼렙조햄 2020. 6. 3. 17:51
반응형

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?를 상한으로 정한 파라미터와 같다
  • 여기까지의 내용은 자바 제네릭스와 비슷하다
반응형