본문 바로가기
자바프로그래밍

Comparator 람다식 sid 기준 정렬 설명

by aiyoon 2025. 6. 3.
반응형

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") → 음수 → 그대로 유지

//이런식으로 반복하면서 정렬함.

반응형