인프런 커뮤니티 질문&답변
자바 정렬
작성
·
11
답변 2
1
안녕하세요 제비꼬리님!
두 차이를 이해하기 쉽게 설명드릴게요!
Comparable은 인터페이스(Interface)입니다. "이 객체는 정렬이 가능한(Comparable) 객체다"라는 자격을 부여한다고 보시면 돼요!
class Student {
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
Student A = new Student('김민지', 20);
Student B = new Student('박철수', 25);Student 클래스를 구현하고, 이후에 Student 객체들을 만들었다고 가정해볼게요.
이 객체들(A, B)간의 우선순위에 따라서 정렬을 하고 싶어요. 근데 정렬을 하기 위해선 Comparable 인터페이스(Interface)가 상속되어야 합니다.
class Student implements Comparable<Student> { // 1. Comparable 인터페이스 구현
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}이러면 이젠 정렬을 쓸 수 있어요.
근데, 어떤 기준으로 정렬할까요? 나이 기준으로 해볼까요? 그걸 우리가 정의해줘야해요. 즉, 정렬을 하는 구체적인 규칙을 compareTo라는 메서드에 적어주는 것입니다.
class Student implements Comparable<Student> { // 1. Comparable 인터페이스 구현
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Student other) {
// 2. compareTo 메서드 구현: 나이(age)를 기준으로 비교
if (this.age < other.age) return -1; // 내가 더 어리면 앞으로
if (this.age > other.age) return 1; // 내가 더 나이 많으면 뒤로
return 0; // 같으면 그대로
// 간단하게는 이렇게도 씁니다: return this.age - other.age;
}
}너 Comparable 구현할 거야? 그럼 무조건 compareTo 메서드를 만들어야 해. 그래야 내가 Arrays.sort() 같은 기능을 써서 널 정렬해 줄 수 있거든
이렇게 이해하시면 됩니다.
혹시 더 궁금한게 있으면 편하게 질문주세요 :)
0
안녕하세요, 인프런 AI 인턴입니다.
제비꼬리님, 자바에서의 compareTo와 Comparable 인터페이스에 대해 궁금증이 있으시군요. 이들은 정렬을 구현할 때 매우 유용하게 사용되는 개념입니다.
Comparable인터페이스: 특정 클래스의 객체들이 자연 순서(natural ordering)를 따르도록 하려면 이 인터페이스를 구현해야 합니다. 클래스에Comparable을 구현하면compareTo메소드를 구현하여 객체들 간의 순서를 정할 수 있습니다.compareTo메소드:Comparable인터페이스를 구현함으로써, 이 메소드를 오버라이드하여 두 객체를 비교하는 로직을 정의할 수 있습니다.- 반환값이 양수이면 객체가 비교 객체보다 큼을 의미하고,
- 0이면 같음을,
- 음수이면 작음을 의미합니다.
- 반환값이 양수이면 객체가 비교 객체보다 큼을 의미하고,
자바의 정렬 기능을 활용하여 정렬 기준을 설정하려면 이러한 메소드를 잘 이해해야 합니다. 자바의 정렬 관련 추가 자료를 참고하시어 한 번 직접 코드를 작성해 보시면 더 도움이 될 것입니다.
이와 관련하여 유익한 설명이 포함된 링크를 찾아보았습니다. 아래의 설명 및 링크를 통해 더 깊이 이해하실 수 있습니다.
- 자바 Comparable 인터페이스와 compareTo 메소드에 대한 설명를 통해서, 순서를 정해야 하는 객체들 간의 비교 로직에 대해 학습해 보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




