Coding Memo

Kotlin 제네릭 본문

Language/Kotlin

Kotlin 제네릭

minttea25 2021. 1. 6. 13:37

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