본문 바로가기
공부/이펙티브자바

14. Comparable을 구현할지 고려하라

by JERO__ 2022. 3. 18.

Comparable 인터페이스의 유일한 메서드

  • compareTo : 두 가지 성격을 빼면 Object의 equals와 같음
    • 단순동치성 비교(equals)에 순서까지 비교 가능
    • 제네릭

→ Comparable을 구현했다는 것 : 클래스의 인스턴스에 자연적인 순서가 있음을 뜻함

  • Comparable을 구현한 객체들의 배열은 다음과 같이 정렬가능
Arrays.sort(a);

장점

  • 제네릭 알고리즘과 컬렉션의 힘을 누릴 수 있다
    • 좁쌀만 한 노력으로 코끼리만 한 큰 효과!
  • 자바 플랫폼 라이브러리의 모든 값 클래스와 열거 타입이 Comparable을 구현했음
  • 알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 인터페이스를 구현하자.

인터페이스 구현

public interface Comparable<T> {
    int compareTo(T t);
}

compareTo 메서드의 일반 규약

  1. 두 객체 참조의 순서를 바꿔 비교해도 예상한 결과가 나와야 함
    • a > b라면, b < a 도 같은 결과
  2. 첫번째 > 두번째 / 두번째 > 세번째 라면, 첫번째 > 세번째
  • equals 규약과 비슷하다.
  • 모든 객체에 대해 전역 동치관계를 부여하는 equals 메서드와 달리, compareTo는 타입이 다른 객체를 신경 쓰지 않아도 된다.

댓글