[kotlin] 코틀린(Kotlin) 제네릭(Generic)

코틀린에서 제네릭을 사용하면 타입을 파라미터로 받아들일 수 있는 클래스, 함수, 인터페이스를 작성할 수 있습니다. 이로써 코드의 재사용성과 안정성을 향상시킬 수 있습니다. 코틀린의 제네릭은 자바의 제네릭과 매우 유사하지만, 몇 가지 차이점이 있습니다. 제네릭을 사용하여 어떻게 클래스와 함수를 작성하는지 알아보겠습니다.

클래스에서의 제네릭 사용

클래스에서 제네릭을 사용하려면 클래스 이름 뒤에 꺽쇠 괄호(< >) 안에 제네릭 파라미터를 선언합니다. 예를 들어, 다음은 Box 클래스를 제네릭으로 작성하는 예제입니다.

class Box<T>(val item: T) {
    fun getItem(): T {
        return item
    }
}

위의 코드에서 T는 어떤 타입이든 될 수 있는 제네릭 파라미터를 나타냅니다.

함수에서의 제네릭 사용

함수에서도 제네릭을 사용할 수 있습니다. 아래 예제는 제네릭을 사용하여 두 요소를 교환하는 함수를 보여줍니다.

fun <T> swap(list: MutableList<T>, index1: Int, index2: Int) {
    val temp = list[index1]
    list[index1] = list[index2]
    list[index2] = temp
}

위의 예제에서 <T>는 함수의 제네릭 파라미터를 나타냅니다.

제네릭 제약(Constraints)

제네릭 파라미터에 대한 제약을 걸고 싶을 때는, 콜론 뒤에 타입으로 제약을 걸어줄 수 있습니다.

fun <T : Number> convertAndPrint(value: T) {
    val result = value.toInt()
    println(result)
}

위의 코드에서 T : NumberTNumber 클래스를 상속받는 타입이어야 한다는 제약을 나타냅니다.

요약

제네릭을 사용하면 코드의 재사용성과 타입 안정성을 향상시킬 수 있습니다. 이를 통해 컴파일 시점에 타입 안정성을 보장하고 불필요한 타입 캐스팅을 줄일 수 있습니다. 제네릭은 코틀린에서 강력한 기능이며, 적절하게 활용하면 코드의 품질을 향상시킬 수 있습니다.

더 많은 정보를 원하시면 코틀린 공식 문서를 참고하시기 바랍니다.