본문 바로가기
프로그래밍 놀이터/Kotlin, Coroutine

[Effective Kotlin] Item 42 : Respect the contract of compareTo

by 돼지왕 왕돼지 2022. 5. 28.
반응형

이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서
Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다.

 

#
compareTo 는 Any 에 속해있는 녀석이 아니다.
해당 함수 호출이 필요할 경우 Comparable interface 를 구현해야 한다.

 

#
compareTo 는 다음과 같은 특정을 가져야 한다.

  1. Antisymmetric. ( a>=b & b>=a 이면 a==b)
  2. Transitive. (a>=b & b>=c 이면 a>=c)
  3. Connex. 모든 2개 이상의 element 들이 관계를 가져야만 한다.

 

 

Do we need a compareTo?

#
Kotlin 에서는 compareBy 등의 함수가 지원되기 때문에 직접 compareTo 등을 구현할 일이 거의 없다.

 

 

Implementing compareTo

#
compareValues, compareValuesBy 등의 함수를 통해 쉽게 비교할 수 있다.

 

#
직접 구현할 경우 아래 규칙을 따르자.

  1. 둘이 동일할 때에는 0 return
  2. receiver 가 other 보다 더 크면 양수 return
  3. receiver 가 other 보다 작을 경우 음수 return
    그리고 antisymmetric, transitive, connex 가 지켜지는지 확인해보자.

 

 

 

반응형

댓글