자바프로그래밍
Comparator 람다식 sid 기준 정렬 설명
aiyoon
2025. 6. 3. 17:47
반응형
Comparator 람다식으로 sid 기준 정렬
Comparator<Student2> sidComparator = (a, b) -> a.sid.compareTo(b.sid);
① Comparator<Student2>
- Comparator 인터페이스를 구현하는 객체를 만든다.
- Student2 타입을 비교하는 Comparator 라는 뜻이다.
- 즉:
- "나는 Student2 객체 2개를 받아서 이 둘을 비교할 수 있는 비교기를 만들겠다."
② 변수 선언: sidComparator
- 만든 Comparator를 담아둘 변수 이름이다.
- 나중에 이걸 Arrays.sort() 등에 전달해서 정렬에 사용한다.
③ (a, b) -> ...
- 람다식 시작 부분 → 두 매개변수를 받는다.
요소 | 의미 |
a | 첫 번째 비교 대상 Student2 객체 |
b | 두 번째 비교 대상 Student2 객체 |
- → 이 a와 b가 내부에서 실제로 두 객체를 비교할 때 사용됨
④ a.sid.compareTo(b.sid)
- 두 객체의 학번(sid)을 문자열 비교하는 부분
코드 | 설명 |
a.sid | 첫 번째 학생의 학번 |
b.sid | 두 번째 학생의 학번 |
compareTo() | 문자열 비교 메소드 (String의 내장 메소드) |
👉 compareTo()의 반환값 의미
Arrays.sort(students, sidComparator);
반환값 | 의미 |
0 | 두 문자열이 동일함 |
음수 | a.sid 가 b.sid 보다 앞 (사전상 빠름) |
양수 | a.sid 가 b.sid 보다 뒤 (사전상 늦음) |
- 그래서 결국 학번 오름차순으로 정렬하는 기준이 됨
📌 전체를 문장으로 풀어보면:
"Student2 객체 두 개를 받아서, 두 객체의 sid를 비교해서,
첫 번째 sid가 두 번째 sid보다 작으면 음수, 크면 양수, 같으면 0을 반환하는 Comparator 객체를 만든다."
📌 이 Comparator를 Arrays.sort()에 넘기면 이렇게 동작
Arrays.sort(students, sidComparator);
- 자바는 내부적으로 이 sidComparator를 사용해서 학생 배열을 학번순으로 정렬한다.
📌 아주 쉽게 머릿속에 그리기
students = [S003, S001, S005, S002, S004]
//람다 sidComparator가 호출됨:
//(S003 vs S001) → compareTo() → "S003".compareTo("S001") → 양수 → 자리 바꿈
//(S002 vs S005) → compareTo() → "S002".compareTo("S005") → 음수 → 그대로 유지
//이런식으로 반복하면서 정렬함.
반응형