Kotlin 강좌 19 - 제너릭

dyeon-dev·2023년 10월 15일
0

Kotlin

목록 보기
13/17

제너릭의 배경

캐스팅 연산을 거치는 것은 프로그램 속도를 저하시키는 단점이 있다.

제너릭

함수나 클래스를 선언할 때 고정적인 자료형 대신 실제 자료형으로 대체되는 타입 파러미터를 받아 사용하는 방법이다.
타입 파라미터에 특정 자료형이 할당되면 제너릭이 사용되는 모든 코드는 할당된 자료형으로 대체되어 컴파일 된다.


할당된 자료형으로 대체되어 컴파일

제너릭 선언

<T / U / V>
함수에 제너릭을 선언한 경우 파라미터나 반환형을 통해 자동 추론
특정한 수퍼클래스를 상속받은 클래스 타입으로만 제한하려면
<T: SuperClass>

fun main() {
    // 파라미터로 클래스A의 인스턴스를 넘겨주고 doShouting 수행
    UsingGeneric(A()).doShouting()
    UsingGeneric(B()).doShouting()
    UsingGeneric(C()).doShouting()
    
    doShouting(B())
}

// 제너릭을 함수에 사용하는 법
fun <T:A> doShouting (t:T){
    t.shout()
}

open class A {
    open fun shout() {
        println("A가 소리칩니다")
    }
}

class B: A() {    
    override fun shout() {
        println("B가 소리칩니다")
    }
}
class C: A() {
    override fun shout() {
        println("C가 소리칩니다")
    }
}

// 수퍼클래스를 A로 제한한 제너릭 T를 선언하고, 생성자에서는 제너릭 T에 맞는 인스턴스를 속성 t로 받는다
class UsingGeneric <T:A>(val t:T) {
    fun doShouting() {
        t.shout()
    }
}

A가 소리칩니다
B가 소리칩니다
C가 소리칩니다
B가 소리칩니다

0개의 댓글