Comparable, Comparactor

EUNJI LEE·2023년 4월 12일
0

JAVA

목록 보기
11/12

객체 비교 Interface

Comparator, Comparable은 둘 다 데이터를 비교하기 위해 사용하는 인터페이스다. 여태 비교 연산은 간단하게 됐지만 하나의 기본 자료형을 비교 연산 하는 것이 아닌, 객체의 데이터들을 비교 연산하기 위해서 해당 인터페이스를 사용한다.

객체가 생성되면 다양한 자료형의 데이터들이 여러 개 포함되어있기 때문에 어떤 데이터를 우선 순위로 비교할지 비교의 기준을 정해주기 위해서 해당 인터페이스를 사용한다.

Comparable Interface

Comparable 인터페이스를 사용하기 위해서는 compareTo(T t) 메소드를 이용해야 한다. 해당 인터페이스를 사용할 클래스에 인터페이스를 implements 해주고 compareTo(T t)를 오버라이딩 해서 사용할 수 있다.

Public class ComparableTest implements Comparable{

	@Override
	public int compareTo(Person person){
		//비교 구문 구현
		return age-person.getAge(); //받아온 값의 나이와 해당 클래스에 있는 나이를 비교
	}
}

compareTo(T t) 메소드는 받는 매개변수가 하나로 매개변수와 자신이 갖고 있는 값을 비교할 때 사용한다. 이 때 결과값이 양수일 때 age가 크고 0이거나 음수이면 age가 더 작은 값이게 된다. 반환 값을 가지고 오름차순, 내림차순으로 구분해서 정렬할 수 있으며 0인 경우에는 해당 값이 동일한 값이 됨으로 다른 기준을 추가해서 동일한 값일 땐 다른 데이터를 비교해서 우선 순위를 설정할 수 있도록 할 수 있다.

💡 위에 작성한 예시처럼 return바로 연산을 적어줄 경우 Overflow, Underflow를 주의해야 한다. int형 범위를 넘어서는 경우 연산 값이 완전히 달라지기 때문에 정상적인 데이터가 출력될 수 없다. int형 범위를 넘어설 것 같다면 if문을 사용해서 조건에 따라 1,0,-1로 구분해서 리턴할 수 있도록 한다.

Comparator Interface

Comparator 인터페이스를 사용하기 위해서는 compare(T t, T t1) 메소드를 이용해야 한다. 해당 인터페이스의 필수 구현 구문임으로 오버라이딩 해서 사용할 수 있다.

Public class ComparatorTest implements Comparator{
	@Override
	public int compare(Person p, Person p1){
//비교 구문 구현
		return p.getAge()-p1.getAge();
	}
}

compare(T t, T t1) 메소드도 compareTo() 메소드와 마찬가지로 양수, 0, 음수에 따라서 값을 비교할 수 있다. 차이점은 자신의 데이터와 비교하는 것이 아닌 파라미터 값 두 개를 비교한다는 점이다. 마찬가지로 반환 값이 int형 범위를 넘어서지 않게 주의한다.

둘 다 객체를 비교하기 위해 제공되는 인터페이스, 메소드로 자신(해당 클레스)이 갖고 있는 값과 비교할 때는 compareTo(), 매개변수로 받은 두 값을 비교할 때는 compare()를 사용할 수 있다.

profile
천천히 기록해보는 비비로그

0개의 댓글