Objects.compare( T a, T b , Comparator <T> c)
T: 객체의 타입
Comparator <T> : 비교방법을 제공해주는 비 교자 <T>는 두 객체의 타입을 정해주며 T을 비교하는 비 교자입니다.
두 개의 객체의 T과 Comparato <T>는 동일해야 합니다.
a, b 두 객체를 비 교자 c로 비교해서 int값을 리턴합니다.
만약 a > b라면 음수가 리턴되며
a= b라면 0이 리턴되며
a < b 이면 양수가 리턴됩니다.
각 m1, m2 , m3를 통해서 비교를 하며 비 교자 인터페이스를 익명 객체를 사용하겠습니다.
compare메서드에 a > b라면 음수가 리턴 a= b라면 0이 리턴 a < b 이면 양수가 리턴되도록 메서드를 재정의 하겠습니다.
두 가지 방법으로 재정의를 하겠습니다.
import java.util.Comparator;
import java.util.Objects;
public class Compare {
static public class Member {
int dept;
public Member(int dept) {
this.dept = dept;
}
}
public static void main(String[] args) {
Member m1 = new Member(1);
Member m2 = new Member(2);
Member m3 = new Member(3);
//부서코드가 1,2,3이다.
int result = Objects.compare(m1, m2, new Comparator<Member>() {
// 비교자 인터페이스인 Comparator를 익명객체로 생성
@Override
public int compare(Member m1, Member m2) {
// if(m1.dept < m2.dept) return -1; //음수
// else if (m1.dept == m2.dept) return 0;
// else return 1; //양수
return Integer.compare(m1.dept, m2.dept);
}});
System.out.println(result);
}
}
비 교자 Comparator가 중요합니다.
나중에 컬렉션을 배우는데
그때 정렬을 시켜주는 기준을 정해주는 것이 Comparator입니다.
현재는 -1, 0 ,1 로서 기준을 정해줬지만 나중에 정렬을 할 때 기준을 잡는 것은 개발자이며, 다양한 기준을 정할 수 있어야 합니다.
equals()와 deepEquals()
두 메서드는 동등 비교를 할 때 사용됩니다.
equlas는 객체의 주소 값이나 논리적으로 동등한 지를 비교하며,
deepEquals는 두배열을 주로 비교하며 배열의 항목 값이 전부 같은지 하나라도 다른지에 대해 동등 비교를 합니다.
두 객체의 하나라도 null값이 있으면 false값을 리턴합니다.
하지만 둘다 null값이라면 true를 리턴합니다.
import java.util.Objects;
public class Equals {
public static void main(String[] args) {
Integer a1 = 10;
Integer a2 = 100;
// 자동 변환으로 Integer객체를 만듭니다.
System.out.println(Objects.equals(a1, a2));
// Integer는 equals를 오버라이드했습니다
// 두개의 정수값이 같다면 true를 리턴하도록 했습니다.
System.out.println(Objects.equals(null, null));
//사실 a1.equals(a2) 사용할 수 있지만 만약 이렇게 사용되게된다면 프로그램이
//실행중일때 매개변수인 a2는 변경할 수 있지만, a1은 고정적으로 사용되서
//변경할 수 없게됩니다. 따라서 Objects.equals()메소드가 제공됩니다.
}
}
deepEquals는 매개 값이 배열이 아닐 경우 equals랑 동일한 기능입니다.
equals를 비교했을때는 객체의 주소 값이 다르기 때문에 false값이 출력되었지만
deepEquals로 비교를 하였을때 배열의 값들이 전부 같기 때문에 true를 리턴했습니다.
equals와 마찬가지로 두 배열객체값이 null이라면 true를 반환합니다.
'JAVA > [JAVA] 바구니' 카테고리의 다른 글
[JAVA] Reflection (0) | 2020.04.21 |
---|---|
[JAVA] Objects Class (3) (0) | 2020.04.17 |
[JAVA] Objects Class (1) (0) | 2020.04.15 |
[JAVA] Object Class (3) (0) | 2020.04.09 |
[Java] Object Class (2) (0) | 2020.04.08 |
댓글