Item 14
Comparable을 구현할지 고려하라
Comparable
인터페이스 에는 유일한 메서드인 compareTo
가 존재- 이 메서드는 두 객체의 순서를 비교할 수 있음
Comparable
을 구현했다는 뜻은, 객체 간의 순서가 있음을 의미- 즉,
Comparable
이 구현된 객체들의 배열은 Arrays.sort
메서드 사용 가능
Comparable
을 구현하면, 이 인터페이스를 활용하는 수많은 제너릭 알고리즘과 컬렉션의 효과를 볼 수 있음
규약
a.compareTo(b)
를 하는 경우, 다음 규칙을 만족해야 함- a가 b보다 작은 경우 음의 정수를, 같으면 0을, 크면 양의 정수를 반환해야 함
a.compareTo(b)
와 b.compareTo(a)
의 부호는 서로 반대a.compareTo(b) > 0
이고 b.compareTo(c) > 0
이면, a.compareTo(c) > 0
a.compareTo(b) == 0
이면 a.compareTo(c)
의 부호는 b.compareTo(c)
와 동일(a.compareTo(b) == 0) == (a.equals(b))
를 만족해야 함- 이 이유는 정렬된 컬렉션에서 동치성 비교시 compareTo를 사용하기 때문
주의점
- 해시코드 값의 차이로 비교하는 compareTo 메서드는 추이성을 위배하므로, 사용 금지
- 이 방식을 사용한다면
Integer.compare(o1.hashCode(), o2.hashCode())
를 사용하자
References
- 조슈아 블로크 - Effective Java 3/E