CH11-30~33 Comparator와 Comparable
[자바의 정석 - 기초편] ch11-30~33 Comparator와 Comparable
이 둘은 객체의 정렬에 필요한 메서드(정렬기준 제공)을 정의한 인터페이스이다.
앞서 Arrays.sort()는 Comparable인터페이스를 구현해 기본적인 정렬기준을 갖고 있다. (오름차순)
Arrays.sort()는 기본 정렬기준 외에도 다른 정렬기준을 도입할 수 있다. 이때 사용하는 인터페이스가 바로 Comparable과 Comparator이다.
둘의 차이는
Comparable - 기본 정렬 기준을 구현하는데 사용
Comparator - 기본 정렬 기준외의 다른 기준으로 정렬하고자 할때 구현해서 사용
정렬기준이란 무엇인가..? 오름차순, 내림차순 등의 기준을 말한다. 문자를 정렬하면 사전순, 사람을 정렬하면 나이 순… 등등
다만 정렬기준을 새로 구현할때 지켜야 하는 원칙이 있다. 이는 다른 컬렉션 클래스들과 호환되기 위해서이다. 기본적으로 두 비교하는 두 객체가 같으면 0, 인자가 비교하는 값보다 크면 음수, 인자가 더 작으면 양수를 반환하도록 구현해야 한다.
이런 정렬기준을 정렬하는 메서드에 제공하기위한 인터페이스가 comparable과 comparator이다.
이 둘은 각각 다음과 같은 메서드를 갖고 있다.
Comparator의 compare는 객체 두개를 비교하도록, Comparable의 compareTo는 인자로 들어온 객체를 자기자신과 비교하도록 선언되어있다.
예를 들면 다음은 래퍼 클래스 Integer의 comparTo 구현부이다.
삼항연사자를 중첩해 사용해서 같으면 0, 오른쪽이 크면 음수, 작으면 양수를 반환하도록 되어있다.