[Java] Comparator/ compare 에 대하여 알아보자!

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메서드를 호출해주면된다. 출력 값은 아래와 같이 정상적으로 비교되어 출력되는 것을 확인할 수 있다.