Comparable & Comparator

객체의 정렬 기준을 명시하는 두 가지 방법

 

Interface Comparable


- 정의
정렬 수행시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의하는 인터페이스 

- 구현
비교해야되는 자료형에 Comparable<T>을 implements 후, compareTo(T a) 메서드를 입맛대로 오버라이딩한다

- compareTo(T a) 작성방법 
return 음수 = 현재 객체가 뒤에 정렬됨
return 양수 = 현재 객체가 앞에 정렬됨
return 0 = 정렬이 일어나지 않음

- 사용
Arrays.sort(array);
Collections.sort(list);
알아서 오버라이드된 compareTo()를 기준으로 정렬된다


Interface Comparator


- 정의
정렬 가능한 클래스들의 기본 정렬 기준(Compartable<T>)과 다르게 정렬 하고 싶을 때 사용하는 인터페이스

- 구현
정렬 기준을 정의하는 클래스를 만들어 Comparator<T>을 implements 후, compare(T a, T b) 메서드를 입맛대로 오버라이딩한다

- compare(T a, T b) 작성방법
return 음수= 첫 번째 파라미터가 뒤에 정렬됨
return 양수 = 첫 번째 파라미터가 앞에 정렬됨
return 0 = 정렬이 일어나지 않음

- 사용
Arrays.sort(array, myComparator);
Collections.sort(list, myComparator);
myComparator에 compare()를 기준으로 정렬된다 


Comparable와 Comparator의 차이점

  • 개념
    • Comparable은 자기 자신을 중심으로 정렬하는 기준을 정의한다 
    • Comparator은 해당 객체를 정렬하는 기준을 정의한다
  • 사용
    • Comparable과 Comparator를 같이 썼다 하더라도 Comparator의 정렬 기준이 우선적으로 적용된다
    • Comparable기본적으로 실행해야 할 메서드를 오버라이딩한 것이고, Comparator은 기본적인 정렬 기준을 무시하고 새로운 기준을 제시하는 것이다

+ Recent posts