본문 바로가기

Reading Record/이펙티브 코틀린

[이펙티브 코틀린] Item22. 일반적인 알고리즘을 구현할 때 제네릭을 사용하라

제네릭 함수 : 타입 아규먼트를 사용하는 함수 즉, 타입 파라미터를 갖는 함수를 얘기한다.

  • 타입 파라미터는 컴파일러에 타입과 관련된 정보를 제공하여 컴파일러가 타입을 조금이라도 더 정확하게 추측할 수 있게 해준다.
  • 컴파일 과정에서 타입 정보는 사라지지만 개발 중에는 특정 타입을 사용하게 강제할 수 있다.

제네릭 제한

  • 타입 파라미터의 기능 중 하나로 구체적인 타입의 서브타입만 사용하게 타입을 제한한다.
public fun <T, C : MutableCollection<in T>> Iterable<T>.toCollection(destination: C): C {
    for (item in this) {
        destination.add(item)
    }
    return destination
}
  • Any를 이용하여 nullable이 아닌 타입을 나타내는 케이스
public inline fun <T, R : Any> Iterable<T>.mapNotNull(transform: (T) -> R?): List<R> {
    return mapNotNullTo(ArrayList<R>(), transform)
}

※ where 키워드

java의 upper bounds 와 비슷한 기능, 

where T : CharSequence, T : Comparable<T>
// T 타입은 CharSequence와 Comparable을 모두 구현해야한다.

https://kotlinlang.org/docs/generics.html#upper-bounds