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
'Language > Back End' 카테고리의 다른 글
Java] BigDecimal을 int형으로 변환 (BigDecimal to int) (0) | 2022.06.07 |
---|---|
Java] String(문자열) 비교 'equals()'와 '=='의 차이점 (0) | 2022.05.22 |
Java ] 자바 인터페이스(interface), 구현(implements) 사용방법 및 추상 클래스(abstarct)와 차이 비교 (0) | 2022.01.16 |
Java ] Static이란? / Static 사용하는 이유 / Static 사용방법 (0) | 2021.12.21 |
Java ] int와 Integer의 차이 및 Wrapper Class 맛보기 (0) | 2021.12.14 |