자바에서 객체를 정렬하는 것은 중요하다. 예를 들어, 온라인 게임에서 게이머의 정보를 높은 점수 순으로 보여주는 랭킹 페이지를 생각해보자.
먼저 게이머의 정보와 점수가 함께 움직여야한다. HashMap을 이용해 데이터를 저장할 수도 있지만 일반적인 클래스를 만들어 데이터를 추가하는 방식을 생각해보자.
이제 5명의 게이머 정보를 담아보자.
Collections클래스의 sort메서드는 배열을 정렬하는 데 있어 많이 쓰인다.
하지만 에러가 뜬다. 잠시 Collections.sort를 살펴보자.
우리가 지정한 타입 Player는 Comparable인터페이스를 구현하지 않는다. 따라서 임의로 Comparable인터페이스를 구현하도록 조정해야한다.
방식은 Comparable, Comparator로 나뉜다.
Comparable인터페이스를 구현하도록 Player클래스를 수정해본다면
Comparable 인터페이스의 compareTo() 메서드를 통해 인자로 넘어온 같은 타입의 다른 객체와 대소 비교가 가능하다. 메서드를 호출하는 객체가 인자로 넘어온 객체보다 작을 경우에는 음수를 리턴하고, 크기가 동일하다면 0, 클 경우에는 양수를 리턴해야한다.
결과는 다음과 같다.
만약 정렬 대상 클래스의 코드를 직접 수정할 수 없는 경우에는 어떻게 객체의 정렬 기준을 정의할 수 있을까? 이럴 때 Comparator인터페이스를 활용한다. 이 인터페이스의 구현체를 Collections.sort()의 매개변수로 전달해주면 된다.
Comparator 인터페이스는 한개의 추상메서드를 가지고 있기 때문에 람다함수로 표현이 가능하다.