티스토리 뷰
제네릭(Generics) 혹은 제네릭 타입(generic type)은 인자로 사용하는 타입에 따라 구체화되는 클래스나 인터페이스를 말합니다
1. 제네릭 클래스/인터페이스 정의
// java
class Car {
...
}
// 항목을 담거나 뺄 수 있는 제네릭 인터페이스 Container 정의
interface Container<T> {
void put(T item);
T take();
}
// 자동차(Car)를 담거나 뺄 수 있는 클래스 Garage 정의
class Garage implements Container<Car> {
@Override
public void put(Car item) {
...
}
@Override
public Car take() {
...
}
}
// kotlin
class Car {
...
}
// 항목을 담거나 뺄 수 있는 제네릭 인터페이스 Container 정의
interface Container<T> {
fun put(item: T)
fun take() : T
}
// 자동차(Car)를 담거나 뺄 수 있는 클래스 Garage 정의
class Garage : Container<Car> {
override fun put(item: Car) {
...
}
override fun take(): Car {
...
}
}
다음은 Container 인터페이스가 받을 수 있는 타입을 Car 클래스 및 그 하위 클래스로 제한하는 예입니다
// java
interface Container<T extends Car> {
void put(T item);
T take();
}
// kotlin
interface Container<T: Car> {
fun put(item: T)
fun take() : T
}
2. 제네릭을 인자로 받는 함수
// java
// 호출시점에 타입이 정해지는 제네릭을 인자로 받는 예
<T> void processItems(List<T> items) {
...
}
// kotlin
// 호출시점에 타입이 정해지는 제네릭을 인자로 받는 예
fun <T> void processItems(items: List<T>) {
...
}
또한, 자바에서의 ? super T, ? extends T는 코틀린에서 각각 in T, out T로 사용합니다
// java
class Car { ... }
class Sedan extends Car { ... }
// dst로 받은 목록을 dest에 추가합니다
<T> void append(List<? super T> dest, List<? extends T> dst) {
dest.addAll(dst);
}
List<Sedan> sedans = ...;
List<Car> cars = ...;
append(cars, sedans);
// kotlin
open class Car { ... }
class Sedan : Car { ... }
// dst로 받은 목록을 dest에 추가합니다
fun <T> append(dest: MutableList<in T>, dst: List<out T>) {
dest.addAll(dst)
}
val sedans: List<Sedan> = ...
val cars: MutableList<Car> = ...
append(cars, sedans)
3. inline 함수에서 사용하는 reified 키워드
inline fun <reified T>printT(any: Any): Unit {
if (any is T)
println("I am a tree: $any")
}
printT<Int>(123)
[출처] [Kotlin] 코틀린의 제네릭(Generics)|작성자 조원호의 행복한 인생
'코틀린' 카테고리의 다른 글
[코틀린] 코틀린의 코루틴(Coroutine) (0) | 2019.05.17 |
---|---|
[코틀린] 코틀린의 리플렉션(Reflection) (0) | 2019.05.17 |
[코틀린] 카카오톡의 서버 사이드 코틀린, if kakao 개발자 컨퍼런스 (0) | 2019.05.17 |
- Total
- Today
- Yesterday
- 개발
- google I/O
- Kotlin
- 카카오톡
- 과제
- 신규기능
- 안드로이드 9.0
- ScrollView
- KAKAO
- 안드로이드Q
- 대학교
- 코틀린
- Java
- 백그라운드
- 앱
- 안드로이드
- 유니티
- 백준
- ScrollView in ScrollView
- 자바
- 알고리즘
- 중첩
- kakaotalk
- Unity
- Android
- Material
- 구글IO
- NestedScrollView
- 액티비티
- 카톡
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |