일반적인 알고리즘 구현 시 제네릭을 써라
제네릭 함수
타입 아규먼트를 사용하는 함수 즉, 타입 파라미터를 갖는 함수를 얘기한다. 타입 파라미터는 컴파일러에 타입과 관련된 정보를 제공하여 컴파일러가 타입을 조금이라도 더 정확하게 추측할 수 있게 해준다.
컴파일 과정에서 타입 정보는 사라지지만 개발 중에는 특정 타입을 사용하게 강제할 수 있다.
제네릭 제한
타입 파라미터의 기능 중 하나로 구체적인 타입의 서브타입만 사용하게 타입을 제한한다.
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을 모두 구현해야한다.
Last updated