compareTo 메소드는 Comparable 인터페이스를 구현하는 유일한 메소드이다. Comparable인터페이스를 구현하는 클래스의 객체들은 자연적 순서를 갖게 된다.Comparable을 구현한 객체들의 배열을 정렬하는 것은 아래처럼 아주 간단하다.
마찬가지로 Comparable 인터페이스를 구현한 객체들은 검색하거나 최대/최소치 계산하기도 간단하다. 그러므로
알파벳 순서나 값의 크기, 또는 시간적 선후관계처럼 명확한 자연적 순서를 따르는 값 클래스를 구현할 때는 Comparable 인터페이스를 구현할 것을 고려해봐야 한다.
compareTo 메소드는 이 객체의 값이 인자로 주어진 객체보다 작으면 음수를, 같으면 0을, 크면 양수를 반환한다.
compareTo 규약
-객체 참조를 비교하는 방향을 뒤집어도 객체 간 대소 관계는 그대로 유지되어야 한다. 즉 만일 첫 번째 객체가 두번째 객체봐 작다면, 두 번째 객체는 첫 번째 객체보다 큰 객체여야 한다. ( a.compareTo(b) 가 1이면 b.compareTo(a) 는 -1 이어야 한다.)
-첫 번째 객체가 두 번째 객체보다 크고 두 번째 객체가 세 번째 ㄱ개체보다 클 경우 첫 번째 객체는 반드시 세 번째 객체보다 커야 한다.
(a.compareTo(b) 가 1이고 , b.compareTo(c)가 1이면 , a.compareTo(c) 는 1이다.)
-비교결과 같다고 판정된 모든 객체 각각을 다른 어떤 객체와 비교할 경우, 그 비교 결과는 전부 통일해야 한다.
즉, 반사성, 대칭성, 추이성을 만족해야 한다는 것인데 이는 equals의 규약과 같다.
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[클래스와 인터페이스]규칙14.public 클래스 안에는 public 필드를 두지 말고 접근자 메서드를 사용하라 (0) | 2017.04.22 |
---|---|
[클래스와 인터페이스]규칙13. 클래스와 멤버의 접근 권한은 최소화하라 (0) | 2017.04.22 |
[모든 객체의 공통 메서드]규칙11.clone을 재정의할 때는 신중하라 (0) | 2017.04.19 |
[모든 객체의 공통 메서드]규칙10.toString은 항상 재정의하라 (0) | 2017.04.19 |
[모든 객체의 공통 메서드]규칙9.equals를 재정의 할 때는 반드시 hashCode도 재정의하라 (0) | 2017.04.19 |