Kotlin/포스팅

코틀린 바운드와 제약

짜집퍼박사(짜박) 2024. 1. 2. 21:24

코틀린에서 제네릭을 사용할 때, 타입 파라미터에 제약을 가하는 기능을 "바운드"라고 합니다. 이를 통해 특정 타입이나 특정 조건을 만족하는 타입만을 사용할 수 있도록 제한할 수 있습니다.

 

상한(Upper Bound) 바운드

상한 바운드는 타입 파라미터가 특정 상위 타입이나 인터페이스의 서브 타입이어야 함을 나타냅니다. where 키워드를 사용하여 제약을 추가할 수 있습니다.

fun <T : Comparable<T>> max(first: T, second: T): T {
    return if (first > second) first else second
}

위의 예제에서 T : Comparable<T>는 T가 Comparable<T> 인터페이스의 서브 타입이어야 한다는 제약을 나타냅니다. 따라서 max 함수를 호출할 때 T는 Comparable을 구현한 타입으로 제한됩니다.

 

하한(Lower Bound) 바운드

하한 바운드는 타입 파라미터가 특정 타입의 슈퍼 타입이어야 함을 나타냅니다. 주로 in 키워드를 사용하여 표현됩니다.

fun <R> process(list: List<in R>) {
    // 리스트를 처리하는 로직
}

위의 예제에서 in R은 R이나 R의 상위 타입을 받을 수 있음을 나타냅니다. 이렇게 하한 바운드를 사용하면, 리스트 내부의 요소를 안전하게 읽을 수 있습니다.

 

상한과 하한 바운드 함께 사용하기

타입 파라미터에 동시에 상한과 하한 바운드를 설정할 수도 있습니다.

fun <T> processAndPrint(item: T) where T : CharSequence, T : Comparable<T> {
    println(item.length)
    println(item.compareTo(item))
}

위의 예제에서 T : CharSequence, T : Comparable<T>은 T가 CharSequence와 Comparable<T>의 서브 타입이어야 한다는 제약을 나타냅니다.

이러한 바운드를 통해 코틀린에서 제네릭을 사용할 때 안전성을 확보하고, 특정 기능을 사용하거나 특정 조건을 만족하는 타입을 제한할 수 있습니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코틀린 변성  (0) 2024.01.02
코틀린 타입 소거와 구체화  (0) 2024.01.02
코틀린 제네릭 선언  (0) 2024.01.02
코틀린 타입 파라미터  (0) 2024.01.02
코틀린 제네릭스  (0) 2024.01.02