JAVA/Effective Java

모든 객체의 공통 메서드 - 규칙 12 Comparable 구현을 고려하라.

반응형

CompareTo 메서드는 Object 선언되어 있지 않으며, Comparable 인터페이스에 포함된 유일한 메서드이다.
 
Object equals 메서드와 비슷한 특성을 가지고 있으나동치성 검사를 넘어 순서 비교도 가능하다.
 
 
Comparable 인터페이스를 구현한 객체들은 검색하거나정렬최대/최소 구하기 등이 간단하며 
 
정렬도 다음과 같이 간단하게 진행   있다.
 
Arrays.sort(a)
 
그렇기에 알파벳 순서나 값의 크기또는 시간적 선후 관계처럼 명확한 자연적 순서를 가지는 값을 가진 
 
클래스를 구현할 때는 Comparable 인터페이스를 구현하는 것이 좋다.
 


1
2
3
4
Public interface Comparable<T> {
 int compareTo(T t);
}
 
cs





CompareTo 계산 방식은 다음과 같다.
 
현재 객체의 값이 주어진 객체의  보다 작으면 음수같으면 0, 크면 양수를 반환한다.
 
인자로 전달된 값이 계산이 불가능한 경우에는 ClassCast Exception 예외를 던진다.
 
 
CompareTo 규약
 
객체 참조를 비교하는 방향은 뒤집어도 객체간 대소 관계는 유지되어야 한다.
 번째 객체가  번째 객체보다 크고  번째 객체가  번째 객체보다  경우  번째 객체는  번째 객체보다 크다.
Equals메서드와 같이 반사성대칭성추이성이 만족해야 한다.
compareTo 통한 동치성 검사 결과는 equals 메서드의 결과와 같아야 한다.
비교를 진행할 값이 여러 개인 경우 중요한 변수부터 진행한다.
 
 
CompareTo equlas 구현의 차이
Comparable 인터페이스가 자료형을 인자로 받는 제네릭 인터페이스이므로 compareTo 메서드의 인자 자료형은 컴파일 시간에 정적으로 결정된다. Equlas Object 인자로 받는다.
compareTo 메서드의 필드 비교 방식은 동치성 검사라기보다는 순서 비교를 위해 사용된다.
 
 
출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(2014.9.1), 규칙12 인용.
 
 
 

반응형