240523_디모의 코틀린 강의 #19강. 제너릭

2024. 5. 23. 15:34TIL(Today I Learned)

유튜브 - 디모의 코틀린 문법 강의 정리

 

#19강. 제너릭

 

1. 제너릭: 함수나 클래스 선언 시 고정적인 자료형 대신 실제 자료형으로 대체되는 타입 파라미터(<T>, <U>, <V> 등)를 받아 사용하는 방법

  - 캐스팅연산을 통해서도 같은 작업이 가능하지만, 캐스팅연산 시 속도가 저하될 수 있다는 문제가 존재함.

  - 타입 파라미터에 특정 자료형이 할당되면 제너릭을 사용하는 모든 코드가 할당된 자료형으로 대체됨 => 

    캐스팅연산 없이도 자료형 그대로 사용 가능

  * 특정한 수퍼클래스를 상속받은 클래스 타입으로만 제너릭을 제한하려면 => < T:SuperClass명> 꼴로 작성하기.

 

for main(){
	UsingGeneric(A()).doShouting() // A가 소리친다
    UsingGeneric(B()).doShouting() // B가 소리친다
    UsingGeneric(C()).doShouting() // C가 소리친다
    doshouting(B())기 // 함수 적용 예시, 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가 소리친다")
    }
}

class UsingGeneric <T:A> (val t:T){ // 생성자의 제너릭 T에 맞는 인스턴스를 속성 t로 받기
	fun doShouting(){
    	t.shout()
    }
}