Comparable과 Comparator
일단 둘 다 인터페이스(interface)임.
즉, Comparable 혹은 Comparator을 사용하고자 한다면 인터페이스 내에 선언된 메서드를 '반드시 구현' 해야함.
Comparable 공식 문서
Comparable (Java Platform SE 8 )
공식 API 문서임. Comparable을 보면 Comparable 인터페이스에는 compareTo(T o) 메서드 하나가 선언되어있는 것을 볼 수 있는데, 이 말은 만약 Comparable을 사용하고자 한다면 compareTo 메서드를 재정의(Override/구현)을 해주어야 한다는 것임.
Comparator 공식 문서
Comparator (Java Platform SE 8 )
Comparator는 보면 선언 된 메서드가 많지만, 실질적으로 구현해야 하는 것은 단 하나 → compare(T o1, T o2) 다.
얘네 둘은 보통 많은 사람들이 ‘객체를 정렬하기 위해 쓴다’고 하지만, 정확히 말하면 그건 용도에 불과함.
💡 “객체를 비교할 수 있도록 만든다.”
이거임!!!
primitive 타입의 8개의 타입(기본 자료형)은 자바 자체에서 제공되기에 별다른 처리없이 부등호를 가지고 쉽게 두 변수를 비교할 수 있지만, 예를 들어 String 타입의 경우는 그렇지 않다.
예를 들어서,
public class Test {
public static void main(String[] args) {
Student a = new Student(17, 2); // 17살 2반
Student b = new Student(18, 1); // 18살 1반
/*
어떻게 비교..?
if(a > b) ..?
*/
}
}
class Student {
int age; // 나이
int classNumber; // 학급
Student(int age, int classNumber) {
this.age = age;
this.classNumber = classNumber;
}
}
이런 경우에는 나이로 비교를 해야할지, 학급으로 비교를 해야할지 기준을 정해야 함. → 이런 문제점을 해결하기 위한 것이 Comparable과 Comparator!!!!! 객체를 비교하게 해준다!!!!!
Comparable과 Comparator의 차이점
왜 Comparable의 compareTo(T o) 메서드는 파라미터(매개변수)가 한 개이고, Comparator의 compare(T o1, T o2) 메서드는 파라미터가 왜 두 개인 것일까?
💡 Comparable은 "자기 자신과 매개변수 객체를 비교"하는 것이고, Comparator는 "두 매개변수 객체를 비교"하기 때문!!!
Comparable은 자기 자신과 파라미터로 들어오는 객체를 비교하는 것이고, Comparator는 자기 자신의 상태가 어떻든 상관없이 파라미터로 들어오는 두 객체를 비교하는 것이다. 즉, 본질적으로 비교한다는 것 자체는 같지만, 비교 대상이 다르다!!
또 다른 차이점이라면 Comparable은 lang패키지에 있기 때문에 import 를 해줄 필요가 없지만, Comparator는 util패키지에 있다는 것