KOTLIN · 객체지향
제네릭 클래스 (Generic Classes)
타입 파라미터를 사용하여 다양한 타입을 처리하는 범용 클래스를 설계합니다. 타입 제약으로 안전성을 확보합니다.
객체지향중급genericstype-constrainttype-parameterbounded
핵심 설명
타입 파라미터를 사용하여 다양한 타입을 처리하는 범용 클래스를 설계합니다. 타입 제약으로 안전성을 확보합니다.
Kotlin code
// 타입 제약이 있는 제네릭 클래스
class SortedList<T : Comparable<T>> {
private val items = mutableListOf<T>()
fun add(item: T) {
items.add(item)
items.sort()
}
fun getAll(): List<T> = items.toList()
fun min(): T? = items.firstOrNull()
fun max(): T? = items.lastOrNull()
}
// 여러 타입 파라미터
class Result<out S, out E>(
val value: S? = null,
val error: E? = null
) {
val isSuccess get() = value != null
fun <R> map(transform: (S) -> R): Result<R, E> =
if (isSuccess) Result(value = transform(value!!))
else Result(error = error)
}
fun main() {
val list = SortedList<Int>()
listOf(5, 2, 8, 1).forEach { list.add(it) }
println(list.getAll()) // [1, 2, 5, 8]
val ok: Result<String, Exception> = Result(value = "성공")
val mapped = ok.map { it.uppercase() }
println(mapped.value) // 성공
}학습 팁
T : Comparable처럼 상한 바운드를 설정하면 타입 파라미터의 기능을 보장하면서 안전하게 사용할 수 있습니다.
주의할 점
제네릭 타입은 런타임에 소거됩니다. list is List 같은 검사는 불가능합니다. reified를 활용하세요.
자주 묻는 질문
제네릭 클래스 (Generic Classes)란 무엇인가요?
타입 파라미터를 사용하여 다양한 타입을 처리하는 범용 클래스를 설계합니다. 타입 제약으로 안전성을 확보합니다.
제네릭 클래스 (Generic Classes) 학습 시 주의할 점은 무엇인가요?
제네릭 타입은 런타임에 소거됩니다. list is List 같은 검사는 불가능합니다. reified 를 활용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.