제네릭스는 클래스나 함수를 정의할 때 타입을 확실히 정하지 않는 것

Generic 함수 정의

Generic 함수를 정의할 때 타입이 정해지지 않은 변수는 함수 이름 앞에 <T>처럼 정의되어야 함


Generic 클래스 정의

class Rectangle<T>(val width : T, val height : T){

}

제네릭 클래스를 정의할 때는 <T> 를 붙여야 함

val rec = Rectangle(10.0, 20.0)
val rec1 = Rectangle<String>("aa", "bb")

코틀린은 자동 타입 추론을 지원하기 때문에 굳이 쓰지 않아도 됨

class Rectangle<T, K>(val width : T, val height : T, val name : K){}

두개 이상의 다른 타입의 변수를 Generic으로 정의하려면 두 개의 Generic 변수를 선언해주면 됨


Constraints

class Circle<T:Number>(val width : T, val height : T){
    fun getArea() : T{
        return (width.toDouble() * height.toDouble()) as T
    }
}

슈퍼 타입이 Number인 경우만 허용

스크린샷 2022-12-12 오전 7.26.22.png

→ 추상 클래스 Number


2개 이상의 Constraints