본문 바로가기
JAVA/[JAVA] 바구니

[JAVA] Objects Class (2)

by oncerun 2020. 4. 15.
반응형

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

댓글