[Java] Comparable vs Comparator
Comparable의 장단점 및 사용 상황
장점
- 클래스의 '자연스러운 순서'를 정의하는 데 적합하다.
- 클래스 자체에 compareTo() 메서드를 구현하므로 추가적인 클래스나 익명 함수 없이도 Collections.sort()를 사용하여 객체를 정렬할 수 있다.
단점
- 한 클래스에는 하나의 '자연스러운 순서'만 정의할 수 있다. 즉, 다양한 기준으로 정렬하려면 별도의 Comparator 객체를 사용해야 한다.
- Comparable을 구현하려면 원래의 클래스를 수정해야 하므로, 이미 작성된 클래스나 외부 라이브러리의 클래스를 정렬하려면 Comparator를 사용해야 한다.
사용 상황
- 해당 클래스의 객체들이 자연스럽게 비교될 수 있고 정렬될 수 있는 경우(예: 숫자, 문자열 등)
Comparator의 장단점 및 사용 상황
장점
- Comparator는 다양한 정렬 기준을 정의할 수 있어 유연성이 뛰어나다.
- 원래의 클래스를 수정하지 않고도 객체를 정렬할 수 있으므로, 외부 라이브러리의 클래스나 수정이 불가능한 클래스를 정렬하는 데 적합하다.
단점
- 정렬을 하기 위해 Comparator를 알고 있어야 한다.
사용 상황
- 객체를 여러 가지 방식으로 정렬해야 할 때(예: 때때로 나이 순으로, 때때로 이름 순으로 사람을 정렬해야 할 때)
- 원래의 클래스를 수정할 수 없는 경우