Comparable과 Comparator

CJI0524·2024년 7월 23일

Java/Collection Framework

목록 보기
26/26

1. Comparable과 Comparator

ComparableComparator는 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다.

ComparableComparator
객체 자체가 비교 방법을 정의외부에서 비교 방법을 정의
클래스 내부에서 구현별도의 클래스로 구현
주로 객체의 자연 순서를 정의할 때 사용필요에 따라 여러 정렬 기준을 제공할 때 사용
compareTo 메서드를 통해 기본 정렬 기준 제공compare 메서드를 통해 다양한 정렬 기준 제공

2. Comparable

Comparable 인터페이스는 다음과 같다.

✍️ 작성

public interface Comparable<T> {
    /**
     * 객체 자신(this)와 지정된 객체를 비교하여 순서를 정한다.
     *
     * @param o 비교할 객체
     * @return 비교 결과:
     *         1) 자신이 비교 대상보다 작으면 음수,
     *         2) 같으면 0,
     *         3) 크면 양수
     */
    public int compareTo(T o);
}

compareTo 메서드를 구현한다.

3. Comparator

Comparator 인터페이스는 다음과 같다.

✍️ 작성

import java.util.Comparator;

public interface Comparator<T> {
    /**
     * 두 객체를 비교하여 순서를 정한다.
     *
     * @param o1 첫 번째 비교할 객체
     * @param o2 두 번째 비교할 객체
     * @return 비교 결과:
     *         1) 첫 번째 객체가 두 번째 객체보다 작으면 음수,
     *         2) 같으면 0,
     *         3) 크면 양수
     */
    int compare(T o1, T o2);

    /**
     * 두 객체가 같은지 비교한다.
     * (이 메서드는 일반적으로 Object의 equals 메서드로 대체될 수 있다)
     *
     * @param obj 비교할 객체
     * @return 두 객체가 같으면 true, 그렇지 않으면 false
     */
    boolean equals(Object obj); // 이 메서드는 일반적으로 생략 가능
}

compare 메서드를 구현한다.

4. 사용 예시

ComparableComparator의 사용 예시는 다음과 같다.

✍️ 작성

class Dollar implements Comparable<Dollar> {
    private final Integer amount;

    public Dollar(Integer amount) {
        this.amount = amount;
    }

    @Override
    public int compareTo(Dollar o) {
        return amount.compareTo(o.amount);
    }

    public Integer getAmount() {
        return amount;
    }
}

class DollarComparator implements Comparator<Dollar> {
    @Override
    public int compare(Dollar o1, Dollar o2) {
        return o2.getAmount().compareTo(o1.getAmount()); // 내림차순 비교
    }
}

// Comparable 사용 예시
List<Dollar> dollars = Arrays.asList(new Dollar(10), new Dollar(5), new Dollar(20));
Collections.sort(dollars); // Comparable을 사용한 기본 정렬


// Comparator 사용 예시
List<Dollar> dollars = Arrays.asList(new Dollar(10), new Dollar(5), new Dollar(20));
Collections.sort(dollars, new DollarComparator()); // Comparator를 사용한 특정 기준 정렬

본문 코드에서 Comparable은 클래스 자체 내부에서 정의를 하여 기본 정렬 기준으로 사용되며, Comparator는 외부에서 비교 방법을 정의하여 다양한 정렬 기준을 추가로 제공할 때, 사용됨을 알 수 있다.

5. 해당 게시글 작성에 참고한 글 목록

자바의 정석 3판 (남궁성)

profile
개발돌이

0개의 댓글