제네릭스는 클래스나 함수를 정의할 때 타입을 확실히 정하지 않는 것
Generic 함수를 정의할 때 타입이 정해지지 않은 변수는 함수 이름 앞에 <T>처럼 정의되어야 함
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 변수를 선언해주면 됨
class Circle<T:Number>(val width : T, val height : T){
fun getArea() : T{
return (width.toDouble() * height.toDouble()) as T
}
}
슈퍼 타입이 Number인 경우만 허용

→ 추상 클래스 Number