자바 Comparator 에 대해서, 그리고 이로 인해 벌어진 안타까운 논쟁
이미 아래쪽에 전쟁터가 훍
결국 그분 계삭한건지 아님 강퇴당한건지 모르겠지만
사실 이거 싸움까지 번질 일은 아니었을 것 같거든요.
자바 개발자로서 Comparator
아마 요새는 잘 못보셨을 거에요.
그런데, 실제로는,
자기도 모르게 쓰고 있을 겁니다.
사실 얘, 자바 기본에 속하는 얘 맞거든요.
우선 각설하고, 얘가 뭐하는 놈인지 먼저 살펴봅시다.
Comparator
https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
보시다시피 얘, 인터페이스입니다.
그리고 얘를 구현하기 위해 클래스를 만들어 쓰지도 않습니다.
그럼 얘를 대체 뭐에 쓸까요?
얘가 의미를 크게 갖게 하는 다른 클래스가 존재합니다.
Collections
https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html
컬렉션"즈" 입니다. 컬렉션 클래스는 따로 있어요.
여하튼, 이 컬렉션즈 클래스는,
컬렉션 (ArrayList, Vector, ...)
을 다루기 위한 유용한 메소드를 담아놓은 유틸성 클래스입니다.
메소드들 보면 죄다 static 이라 객체 생성할 필요없이 메소드만 갖다 쓰면 되는 놈이죠.
여기서 우리가 봐야 할 메소드는
sort
https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#sort-java.util.List-
얘는 뭐하는 놈이냐? 정렬하는 놈입니다.
ArrayList 안에 원소들을 잔뜩 담아놓고
그냥 갖다 for문 돌리기 전에, 정렬을 돌리고 싶을때가 있잖습니까.
이 sort 메소드, 오버로딩이 되게 많이 되어있는데
매개변수 컬렉션만 달랑 받는 놈도 있고
오늘의 주인공인 Comparator 를 추가로 받는 놈이 있습니다.
정렬하고 싶을 때, 정렬 기준을 바꾸고 싶을때가 있잖습니까.
역순으로 하고 싶다든지
원소가 Map인데 그중 어떤 키만 정렬기준에 넣고 싶다든지 등등
이 때 이 Comparator 를 넣어서 정렬기준을 지정하는 겁니다.
나는 쓴 적 없다구요?
그렇겠죠. 요새는
람다식으로 간단히 표현하니까.
"Comparator" 라고 타이핑을 칠 필요가 없거든요. 근데 실제로는 뭐다? 쓰고있는 것이다.
그게 아니더라도, 자기가 쓰고있는 라이브러리 중 어떤 얘들이 얘를 반드시 쓰고 있을 겁니다.
여하튼, 이러한 이유로 이 Comparator 또한 자바의 기본에 속하는 게 맞긴 하거든요.
보통 컬렉션 배울 때 같이 배우는 놈이에요.
안쓸수가 없어요. 컬렉션 정렬할 때 쓰는 얜데 어떻게 안써요.