그냥 가끔의 기록장

1. Comparable 본문

Android/Kotlin

1. Comparable

the phoenix 2021. 7. 19. 17:38

  클래스의 인스턴스를 비교하는 방법으로 자바에서는 Comparable 인터페이스가 compareTo() 함수를 제공한다. 코틀린에서는 이걸  Comparable 인터페이스로 제공하고, 함수 extension도 가능하다. 

 

Function

1. compareTo()

abstract operator fun compareTo(other: T): Int

  호출 객체와 전달된 객체(passed object)를 비교하는 함수로, 둘이 같으면 0을, 전달된 객체 (passed object)가 더 크면 음수를, 전달된 객체가 더 작으면 양수를 반환한다. 

 

 

Extension Function

1. coerceAtLeast

fun <T : Comparable> T.coerceAtLeast(minimumValue: T): T

  호출된 객체가 특정 개체보다 큰지 아닌지를 확인해준다. 호출된 객체가 더 크면 객체 자체를 반환하고 그렇지 않으면 최소 객체를 반환한다. 

2. coerceAtMost

fun <T : Comparable> T.coerceAtMost(maximumValue: T): T

  호출된 객체가 특정 개체보다 작은지 아닌지를 확인해준다. 호출된 객체가 더 작으면 객체 자체를 반환하고 그렇지 않으면 최대 객체를 반환한다. (coercAtLeast랑 반대)

3. coerceIn

fun <T : Comparable> T.coerceIn(
    minimumValue: T?, 
    maximumValue: T?
): T

  호출된 객체가 특정 최소값과 최대값 사이, 범위 내에 있는지 여부를 판단한다. 범위 내에 있으면 객체를 반환하고, 범위내에 없으면서 객체가 최소값보다 작으면 최소값을 반환하고, 범위내에 없으면서 최대값보다 크면 최대값을 반환한다. 

4. rangeTo

fun main(args : Array<String>) {
    val range = 1..1000
    println(range)
  
    println("Is 55 within the range? ${55 in range}") // true
    println("Is 100000 within the range? ${100000 in range}") // false
}

  위와 같이 rangeTo함수는 값이 범위내에 있으면 true를, 없으면 false를 반환한다.

 

 

코드에서 Comparable <T>를 쓰다 둘다 뭔지 제대로 모르는거 같아 정리를 하려했는데..Comparable은 대강 비교하는 함수, 인터페이스라는건 알겠지만 T는 제네릭과 관련되어 매우 매우 매우 내용이 어렵고 길다는 점을 깨달았다. 따라서 제네릭을 다음에 다시 정리하는걸로 다짐..! 

Reference

https://www.geeksforgeeks.org/comparable-interface-in-kotlin/ 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-comparable/

Comments