comparable과 comparator는 비교자라고 한다.
1. 비교자의 기본 설명
비교자란, 정렬과 같은 어떠한 기준을 통해 자료를 처리할 때, 그 기준을 정의한 것을 뜻한다.
우리가 지금까지 써왔던
Arrays.sort()는 알아서 오름차순으로 정렬을 해준다.
이 또한 Arrays.sort(배열, comparator)가 들어가기 때문이다.
즉, Arrays.sort(배열) -> 이렇게 배열만 매개변수로 넣어주면, 기본 comparator가 적용이 되기 때문에, 오름차순 정렬이 되는 것이다.
2. 비교자는 인터페이스이다.
비교자는 인터페이스이다.
Integer, Double, Float 등에 구현이 되어 있는 것을 볼 수 있다.
이렇게 위의 3개의 클래스를 살펴보면 비교자가 구현되어 있는 것을 볼 수 있었다.
즉, 비교자는 정렬을 할 수 있는 모든 클래스에 붙어 구현되어 있음을 알 수 있다.
사실, '정렬을 할 수 있는 모든 클래스에 붙어 구현되어 있음을 알 수 있다.'라는 문장이 무슨 개소리인지 이해가 안될 것이다.
이를 예시를 통해 이해 해본다.
1. public class Student가 있다.
2. public class Integer가 있다.
Integer는 숫자의 크기에 따라 정렬하는 것이 기본이다.
Student는 뭐에 따라 정렬하나?
정답은 모른다. 안 정해주었다.
즉, 이러한 정렬 기준이 없는 클래스들을 정렬하기 위해
인터페이스인 Comparable이나, Comparator를 구현해줄 수 있다.
ex) public class Student implements Comparator<Student>
3. 사용법
-자연 비교자는 오름차순이다.
3-1. Integer, Double 등 이미 Comparable이 구현되어 있는 클래스를 정렬할 때.
-이미 라이브러리에 Comparator가 있기때문에, 그런거 사용하면 된다.
ex) Arrays.sort(arr, Collections.reversOrder() ); -> 내림차순
3-2. 사용자가 만든 class를 정렬할 때
3-2-1. Comparable 구현
위의 코드는 grade와 name으로 이루어진 클래스를 낮은 학년을 비교한 후 이름의 앞글자의 사전 정렬이다.
즉, 무조건 낮은 학년이 먼저오고, 학년이 같을 때, a,b,c,d,...순이다.
클래스에 Comparable의 compareTo를 구현한 것을 볼 수 있다.
이제, 정렬 후, 출력하면
위에서 말한 방식으로 정렬이 된 것을 볼 수 있다.
3-2-2. Comparator을 만들어 sort에 넣어줌.
Array.sort에서 바로 객체를 생성 후 정렬해주었다.
똑같은 결과가 나온 것을 볼 수 있다.
o1 o2는 어느것도 들어갈 수 있다고 생각하면 편하다.
'알고리즘' 카테고리의 다른 글
두 큐 합 같게 만들기(프로그래머스) (0) | 2024.10.04 |
---|---|
DFS(깊이 우선 탐색) (0) | 2023.12.13 |
알고리즘 공부에 대한 반성 (1) | 2023.10.29 |
4. 퀵 정렬 (0) | 2023.09.22 |
재귀 함수에 대하여 (1) | 2023.09.16 |