테크과학! DiMo
개발 환경: play.kotlinlang.org
제네릭
클래스나 함수에서 사용하는 자료형을 외부에서 지정할 수 있는 기능
함수나 클래스를 선언할 때 고정적인 자료형 대신 실제 자료형으로 대체되는 타입 파라미터를 받아
사용하는 방법
fun<T>genericFunc(param:T): T
class GenericClass<T>(var pref: T)
fun<Int>genericFunc(param:T): T
class GenericClass<Int>(var pref: T)
'T'를 사용하는 것이 관례.
여러 개일 경우 <T, U, V...>
특정한 수퍼 클래스를 상속받은 클래스 타입으로만 제한하려면 <T: SuperClass>
fun main() {
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가 소리침")
}
}
class UsingGeneric<T: A> (val t: T) {
fun doShouting() {
t.shout()
}
}
Output:
A가 소리침
B가 소리침
C가 소리침
B가 소리침
제네릭을 사용하지 않고 생성자에서 수퍼클래스로 캐스팅하여 함수를 호출해도 동작은 같지만 제네릭을 사용할 경우
제네릭이 자료형을 대체하게 되어 캐스팅을 방지함으로써 성능을 높일 수 있다.
'Kotlin > 기본 문법' 카테고리의 다른 글
코틀린 강좌 #20 문자열을 다루는 법 (0) | 2020.12.20 |
---|---|
코틀린 강좌 #19 리스트 (0) | 2020.12.20 |
코틀린 강좌 #17 클래스의 다형성 (0) | 2020.12.19 |
코틀린 강좌 #16 익명객체와 옵저버 패턴 (0) | 2020.12.19 |
코틀린 강좌 #15 오브젝트 (0) | 2020.12.19 |