2020-12-27
오늘은 Object 클래스의 속하는 compare 메서드와 Comparator 인터페이스를 알아보도록 하자. 우선 Comparator는 Object의 compare을 재정의해야 사용할 수 있다. 즉 개발자가 원하는 기준으로 데이터를 오버 라이딩을 통해 자유롭게 비교할 수 있도록 도와준다.
우선 Comparator의 구현클래스를 하나 만들어 주었다.
package tObject;
import java.util.Comparator;
public class compare implements Comparator<compare>{
private int num;
public void setNum(int num) {
this.num = num;
}
public int getNum() {
return num;
}
//객체간 num의 정수크기를 비교하기위해 compare 재정의함
@Override
public int compare(compare o1, compare o2) {
if(o1.getNum() > o2.getNum()) {
return 1;
}else if(o1.getNum() == o2.getNum()) {
return 0;
}else {
return -1;
}
}
}
int형 필드를 하나 선언해주고 이후 Getter / Setter로 데이터에 접근할 수 있도록 해주었다. 이후 compare를 오버 라이딩하였다. 구체적으로 compare은 비교 메서드이기 때문에 매개변수 값은 2개를 받게 된다. 이후 if문을 통해서 첫 번째 매개변수 값이 크면 1을 리턴하고 같으면 0 같지 작을 경우 -1을 리턴하도록 구현하였다.
이제 실행클래스에서 사용하여 정상적으로 코드가 작동하는지 알아보자.
package tObject;
import java.util.Comparator;
import java.util.Objects;
public class main {
public static void main(String[] args) {
compare c1 = new compare();
compare c2 = new compare();
c1.setNum(5);
c2.setNum(10);
int result1 =Objects.compare(c1, c2, new compare());
System.out.println(result1);
//c2가 더커서 -1 출력
c1.setNum(50);
c2.setNum(10);
int result2 =Objects.compare(c1, c2, new compare());
System.out.println(result2);
//c1이 더커서 1출력
}
}
사실 사용하는 법은 기존에 다른 클래스 객체와 별반 다르지 않다. 우선 두 가지의 객체를 선언해주고 이후 각각 Setter를 통해 값을 받아주었다.
이후 Object로 재정의한 compare메서드를 호출해주면된다. 출력 값은 아래와 같이 정상적으로 비교되어 출력되는 것을 확인할 수 있다.