강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

제비꼬리님의 프로필 이미지
제비꼬리

작성한 질문수

2026 코딩테스트 올인원 [JAVA]

자바 정렬

작성

·

11

0

안녕하세요!


다름이 아니라 , compareTO 랑 comparable관련 설명이 있을까요 ?

개인적으로 이해가 정확히 안가서...ㅎㅎ...

감사합니다!

답변 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 인턴입니다.

제비꼬리님, 자바에서의 compareToComparable 인터페이스에 대해 궁금증이 있으시군요. 이들은 정렬을 구현할 때 매우 유용하게 사용되는 개념입니다.

  1. Comparable 인터페이스: 특정 클래스의 객체들이 자연 순서(natural ordering)를 따르도록 하려면 이 인터페이스를 구현해야 합니다. 클래스에 Comparable을 구현하면 compareTo 메소드를 구현하여 객체들 간의 순서를 정할 수 있습니다.

  2. compareTo 메소드: Comparable 인터페이스를 구현함으로써, 이 메소드를 오버라이드하여 두 객체를 비교하는 로직을 정의할 수 있습니다.

    • 반환값이 양수이면 객체가 비교 객체보다 큼을 의미하고,
    • 0이면 같음을,
    • 음수이면 작음을 의미합니다.

자바의 정렬 기능을 활용하여 정렬 기준을 설정하려면 이러한 메소드를 잘 이해해야 합니다. 자바의 정렬 관련 추가 자료를 참고하시어 한 번 직접 코드를 작성해 보시면 더 도움이 될 것입니다.

이와 관련하여 유익한 설명이 포함된 링크를 찾아보았습니다. 아래의 설명 및 링크를 통해 더 깊이 이해하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

제비꼬리님의 프로필 이미지
제비꼬리

작성한 질문수

질문하기