728x90

Comparable

 - compareTo

 - 자기 자신과 파라미터로 받는 객체를 비교

 

Comparator

 - compare

 - 파라미터로 받는 두 객체를 비교

 

※ 사용예제

public static void main(String[] args) {
    Students man1 = new Students("남","홍길동", "Y");
    Students man2 = new Students("남","철수", "Y");
    Students man3 = new Students("여","짱구", "N");

    man1.compareTo(man2);
    man1.compare(man2,man3);
}

class Students implements Comparable<Students>, Comparator<Students> {
    String sex;
    String name;
    String srvcActAtn;

    Students(String sex, String name,  String srvcActAtn) {
        this.sex = sex;
        this.name = name;
        this.srvcActAtn = srvcActAtn;
    }

    @Override
    public int compareTo(Students o) {
        System.out.println(" Comparable ( "+this.name+" : "+o.name + " ) ");
        return 0;
    }

    @Override
    public int compare(Students a, Students b) {
        System.out.println(" Comparator ( " + a.name +" : "+ b.name + " ) ");
        return 0;
    }
}

 - Comparable은 man1인 나 자신과 man2를 compareTo 메서드에서 사용할 수 있다.

 - Comporator는 man1은 제외하고 파라미터로 받고 있는 man2와 man3을 compare 메서드에서 사용할 수 있다.

 

 - Comparable과 달리 Comporator는 나 자신이 아닌 파라미터로 받는 두 객체를 비교하고 있다.

이때 나 자신이 필요가 없다. 그렇다면 비교적 비효율적인 Comporator는 왜 사용하는 것일까?

 

결론부터 말하면  그것은 익명객체로 활용되어질 때 차이가 있다.

Comparable은 나 자신과 비교하기 때문에 같은 타입의 객체를 비교할 수 없다.

※ 익명객체 활용예제

public static void main(String[] args) {
    Students man1 = new Students("남","홍길동", "Y");
    Students man2 = new Students("남","철수", "Y");
    Students man3 = new Students("여","짱구", "N");

    comparator.compare(man2,man3);
    comparable.compareTo(man2);

}

private static Comparator<Students> comparator = new Comparator<Students>() {
    @Override
    public int compare(Students o1, Students o2) {
        System.out.println(" Comparator ( " + o1.name +" : "+ o2.name + " ) ");
        return 0;
    }
};

private static Comparable<Students> comparable = new Comparable<Students>() {
    String name = "고길동";

    @Override
    public int compareTo(Students o) {
        System.out.println(" Comparator ( " + this.name +" : "+ o.name + " ) ");
        return 0;
    }
};

이렇게 익명객체를 활용했을 때 Comporator를 사용한 경우에는 파라미터로 동일타입의 객체를 받아서 처리할 수 있다.

하지만 Comparable은 나 자신안에 name값을 지정을 해주어야 하기 때문에 Students 객체를 활용하기가 불편해진다.

728x90
TOP