비교를 하기 위해서 유용하다.
Comparable은 자기 자신과 매개변수 객체를 비교할 수 있도록 만들어주는 인터페이스이다. 이 인터페이스를 채택하여 구현하면 compareTo메서드를 통하여 객체간에 비교가 가능해진다.
Comparable과 비슷한 기능을 하는 인터페이스로 Comparator가 있다. 둘의 차이점은 다음과 같다.
1) 구현해야 하는 메서드의 차이
Comparable은 compareTo(T o1)을 구현해야 한다.
Comparator는 compare(T o1, T o2)를 구현해야 한다. 매개변수가 2개이다.
2) 사용 방법의 차이
Comparable은 자기 자신과 다른 객체를 비교한다.
Comparator는 매개변수로 들어오는 두 객체를 비교한다.
3) package
Comparable은 lang 패키지에 존재하기에, import를 하지 않아도 된다.
Comparator은 util 패키지에 있기에 따로 import를 해줘야 한다.
기본적으로 Comparable이 조금더 일관적인 것 같다.
Node<String>을 상속한 Genre의 비교
class Genre extends Node<String> implements Comparable<Genre> {
public Genre(String name) {
super(name);
}
@Override
public int compareTo(Genre o) {
return super.getItem().compareTo(o.getItem());
// 스스로가 크면 1 같으면 0 작으면 -1
}
}
SuperClass인 Node의 getItem()은 Node가 가진 item을 반환하는 메서드로, String이기에 String에 구현된 compareTo 메서드를 사용할 수 있다. 따라서 위와 같이 구현하는 것이 가능했다.