Coding Memo
Kotlin 제네릭 본문
Generic (제네릭)
코틀린은 Java와 동일하게 Generic 기능을 제공한다.
사용 방법은 단순하게 <> 안에 알파벳을 넣으면 되는데, 보통은 'T'를 사용한다.
물론 T 외에도 U, V, ... 를 추가적으로 사용해도 된다.
제네릭에서도 타입추론을 하기 때문에 자료형을 명시할 때 중복해서 굳이 쓸 필요가 없다.
특정한 슈퍼 클래스를 상속받은 클래스 타입으로만 제한하고 싶을 때는 <T:(super class name)>을 사용한다.
fun <T: A> doPrintClass(type: T) {
type.printClass()
}
fun main() {
//위의 함수 이용
doPrintClass(A())
doPrintClass(B())
//맨 아래 class 이용
GenericTest(A()).doPrintClass2()
GenericTest(B()).doPrintClass2()
}
open class A {
open fun printClass() {
println(this.hashCode())
}
}
class B : A() {
override fun printClass() {
println(this.hashCode())
}
}
class GenericTest<T: A> (private val type: T) {
fun doPrintClass2() {
type.printClass()
}
}
함수에서 T를 쓸 경우 이름 앞에 T의 클래스를 명시해주고,
클래스에서 T를 쓸 경우 이름 뒤에 T의 클래스를 명시해준다.
fun main() {
Cal.printT("1", 2)
}
object Cal {
fun <T> printT(a: T, b: T) {
println(a)
println(b)
}
}
이렇게 T 만 써서 superclass의 타입으로 제한하지 않아도 된다.
(무시) 제네릭과 템플릿에 관해서...(Java, C#, C++, Kotlin...)
'Language > Kotlin' 카테고리의 다른 글
Kotlin 함수 파라미터 (0) | 2021.01.06 |
---|---|
Kotlin null 값 (0) | 2021.01.06 |
Kotlin 캐스팅 (0) | 2021.01.06 |
Kotlin 문자열 (0) | 2021.01.05 |
Kotlin 옵저버 패턴 (0) | 2021.01.03 |