compareTo
객체 간의 순서를 비교하기 위해 사용되는 메서드
Kotlin에서는 Comparable
인터페이스의 일부로 제공
두 객체를 비교해서 정수값을 반환
음수
: 현재 객체가 파라미터로 받은 객체보다 작음0
: 두 객체가 동등함양수
: 현재 객체가 파라미터로 받은 객체보다 큼비교 연산자(>
, <
, ≥
, ≤
)를 사용하면 내부적으로 compareTo
메서드가 호출됨
obj1 > obj2 // obj1.compareTo(obj2) > 0
obj1 < obj2 // obj1.compareTo(obj2) < 0
obj1 >= obj2 // obj1.compareTo(obj2) >= 0
obj1 <= obj2 // obj1.compareTo(obj2) <= 0
compareTo
의 동작 규칙비대칭적 동작
if (a > b) {
b < a
}
연속적 동작
if (a > b && b > c) {
a > c
}
코넥스적 동작
a >= b || b >= a // 항상 true
compareTo
를 따로 정의해야할까?// sortedBy를 사용하면 원하는 키로 정렬 가능
val sorted = names.sortedBy { it.surname }
// sortedWith으로 여러 프로퍼티 기반 정렬도 가능
val sorted = names.sortedWith(compareBy({ it.surname }, { it.name }))
comapareTo
구현하기compareValues
톱레벨 함수를 쓰면 compareTo
를 구현할 때 유용하다. class User (
val name: String,
val surname: String
) : Comparable<User> {
override fun compareTo(other: User): Int =
compareValues(surname, other.surname)
}