PHpullh
학습 라이브러리/Kotlin/제네릭 클래스 (Generic Classes)

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 를 활용하세요.