[Kotlin] 제너릭(Generic) 설명 & 예제
- Language/Kotlin
- 2021. 2. 9.
728x90
제너릭
클래스나 함수에서 사용하는 자료형을 외부에서 지정할 수 있는 기능을 말함
ex)
Class A -> Class B(상속 받음)
이 두 클래스의 인스턴스를 공용으로 사용하는 하나의 함수에
패러미터로 받으러면?
Class A(Super Class)
A의 자료형으로 받으면 B를 넣어도 A로 캐스팅 됨, 따라서 두 클래스 모두 함수의 패러미터로 사용 가능함
fun castingExam(var a: A)
But, 캐스팅 연산은 프로그램의 속도를 저하시킬 수 있다는 단점이 있다 -> 제너릭 등장
제너릭은 함수나 클래스를 선언 할 때 고정적인 자료형 대신 실제 자료형으로 대체되는 타입 패러미터를 받아 사용하는 방법입니다.
- 일반적으로 'Type'의 이니셜인 T를 사용
- T -> U -> V 순으로 사용
fun main() {
//UsingGeneric<A>(A()).doShouting() 처럼 수동으로 전달 할 수도 있지만
//생성자의 파라미터를 통해 클래스 A라는 것을 알 수 있기 때문에 생략
//class UsingGeneric(val t: A) 로 캐스팅해도 결과 같겠지만 캐스팅 함으로써 성능저하되기 때문에 제너릭 사용한 것
UsingGeneric(A()).doShouting()
UsingGeneric(B()).doShouting()
UsingGeneric(C()).doShouting()
//캐스팅 없이 B의 객채 그대로 함수에서 사용
doShouting(B())
}
//제너릭을 함수에 사용
//슈퍼클래스를 A로 제한한 T 선언
//패러미터로는 T에 맞는 인스턴스 t로 받음
fun <T : A> doShouting(t: T) {
t.shout()
}
//Super Class
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()
}
}
728x90
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 문자열을 다루는 여러가지 방법 설명 & 예제 (0) | 2021.02.11 |
---|---|
[Kotlin] 리스트(List) 설명 & 예제 (0) | 2021.02.09 |
[Kotlin] 클래스의 다형성(+as, is) 설명 & 예제 (0) | 2021.02.08 |
[Kotlin] Observer 패턴(옵저버 패턴) 설명 & 예제 (0) | 2021.02.04 |
[Kotlin] 싱글턴 패턴 & Object 설명 & 예제 (0) | 2021.02.04 |