반응형
오늘은 객체 간 비교를 위한 인터페이스를 살펴보도록 하겠다.
Comparable
CompareTo() 재정의
이것은 같은 객체끼리 비교하는 것을 의미한다.
특히 기본 객체 자료형들은 이것을 상속받아 구현하였으며,
우리가 아는 Number를 상속받은 객체자료형은 값의 크고 작음을 비교하고, String의 경우 사전적 비교를 한다.
객체 내부에 명확한 값이 있어서 비교를 할 땐 이 인터페이스를 구현한다.
public class ComparableMain
{
public static void main(String[] args){
System.out.println(new String("b").compareTo("a")); // 1
}
}
Comparator
compare() 재정의
이것은 정렬규칙 그 자체를 의미한다. (기준덩어리라고 생각하면 된다.)
객체 내부에 비교할 것이 많아서 기준을 많이 정할 때 주로 사용한다.
TreeSet이나 Collections.sort()에서는 이 정렬규칙을 이용하여 객체 간 비교를 한다.
class CompartorImpl implements Comparator<Account> {
public int compare(Account account1, Account account2)
{
if(account1.getBalance() > account2.getBalance())
{
return 1;
}else if(account1.getBalance() < account2.getBalance())
{
return -1;
}else
{
return 0;
}
}
}
public class ComparatorMain
{
public static void main(String args[])
{
new CompartorImpl().compare(a1, a2);
}
}
Account 객체가 있다고하면, 이 객체는 뭘 비교해야할 지 명확하지 않으므로(객체 이름부터가 그렇다.)
Comparator(비교자)를 이용하여 비교하거나 TreeSet이나 Collections 에서 Comparator를 넘겨주어 정렬을 할 수가 있다.
이것은 객체를 사용하는 사람의 몫이다.
간혹가다 equals()와 헷갈리는 사람들이 많은데
객체.equals()은 동등한지 안동등한지만 비교하는 것이다.
저 위의 비교들은 이게 큰지 작은지, 같은지를 비교할 수 있다는 것이다.
반응형
'Java' 카테고리의 다른 글
로그백 실행방법(logback, java) (0) | 2019.11.07 |
---|---|
자바 콘솔에서의 다양한 실행방법(jar, 빌드) (0) | 2019.11.07 |
자바 익명클래스와 자바 람다 (Java Anonymous class, Java Lambda) 1편 (0) | 2019.08.18 |
JAVA Exception 예외, 사용자 정의 예외처리 만드는법 (0) | 2019.08.05 |
Reflection 이란 ? JAVA Reflection, Reflect Class, RTTI (0) | 2019.07.30 |