JAVA/JAVA

Objects 클래스

호두밥 2021. 9. 28. 09:32

Objects 클래스

Object의 유틸리티 클래스

 

Method Return Type 설명
compare(T o1, T o2, Comparator<T> c) int Comparator(우선순위)를 이용해 두 객체를 비교
deepEquals(Object o1, Object o2) boolean 깊은 비교 : 두 객체의 데이터 값을 비교 
equals(Object o1, Object o2) boolean 얕은 비교 : 두 객체의 번지(주소값) 비교 
hashCode(Object o) int 객체의 해시코드 
hash(Object o) int 입력값으로 배열을 생성하고 해시코드를 생성
isNull(Object o) boolean 객체가 null인지 조사
nonNull(Object o) boolean 객체가 null이 아닌지 조사
requireNonNull(T o) T 객체가 null이면 예외 발생, 아니면 T 반환
requireNonNull(T o, String msg) T 객체가 null이면 예외발생 및 msg 출력
requireNonNull(T o, Supplier<String> msg) T 객체가 null이면 예외 발생 및 msg 출력
toString(Object o) String 객체의 toString() 값 리턴
toString(Obejct o, String default) String 객체의 toString() 값 치턴, Object o가 null이면 String default 출력

 

Compare

Comparator(우선순위)에 따라 객체비교
compare(T o1, T o2, Comparator<T> c)
o1 > o2 이면 1, o1 < o2 면 -1, 같으면 0을 반환

 

//Sample 클래스 구현
class Sample{
	int index;
		
	Sample(int index){
		this.index = index;
	}
		
}
//Sample 비교연산자 구현
class SampleComparator implements Comparator<Sample>{
		
	@Override
	public int compare(Sample arg0, Sample arg1) {
				
		if(arg0.index < arg1.index) return -1;
		else if (arg0.index > arg1.index) return 1;
		else return 0;
			
	}
}
Sample sample1 = new Sample(100);
Sample sample2 = new Sample(200);

System.out.println( Objects.compare(sample1, sample2, new SampleComparator()));
-1

 

equals

두 객체가 참조타입이면 주소가 같은지, 기본타입이면 값이 같은지를 비교

두 객체 모두 null이면 true를 리턴함.

Sample sample1 = new Sample(100);
Sample sample2 = new Sample(200);

System.out.println( Objects.equals(sample1, sample2));

Sample sampleA = null;
Sample sampleB = null;

System.out.println( "두개다 null = "+ Objects.equals(sampleA, sampleB));
System.out.println( "둘중 하나만 null = "+Objects.equals(sample1, sampleA));
false
두개다 null = true
둘중 하나만 null = false

 

deepEquals

두 객체의 값이 같은지를 비교

두 객체가 모두 null이면 true를 리턴함.

int[] arr1 = {0,0,0};
int[] arr2 = {0,0,0};

System.out.println( "equals = "+Objects.equals(arr1, arr2));
System.out.println( "deepEquals = "+Objects.deepEquals(arr1, arr2));
equals = false
deepEquals = true

 

hash, hashCode()

hash는 입력된 파라미터로 해시코드를 생성하여 hashCode로 해시코드값을 리턴. hash를 이용해 입력된 값이 같으면 같은 해시코드를 반환하도록 hashCode 메소드를 재정의할 수 있다.

hashCode는 입력된 파라미터 객체의 해시코드값을 리턴. 클래스.hashCode()와 동일한 값을 리턴.

 

public class Telephone {
	
	String phoneNumber;
	String name;
    
	Telephone(String phoneNumber, String name){
		this.phoneNumber = phoneNumber;
		this.name = name;
	}
    
	@Override
	public int hashCode() {
		return Objects.hash(phoneNumber, name);
	}
 }
Telephone tel1 = new Telephone("000-1111-1111", "Manta");
Telephone tel2 = new Telephone("000-1111-1111", "Manta");

System.out.println("Objects.hashCode(tel1) ="+ Objects.hashCode(tel1));
System.out.println("Objects.hashCode(tel2) ="+ Objects.hashCode(tel2));
Objects.hashCode(tel1) =687519896
Objects.hashCode(tel2) =687519896

 

requireNonNull()

String str = null;

try {
	Objects.requireNonNull(str);
}catch(NullPointerException e) {
	System.out.println(e.getMessage());
}
try {
	Objects.requireNonNull(str, "유효한 값이 아닙니다.");
}catch(NullPointerException e) {
	System.out.println(e.getMessage());
}
try {
	Objects.requireNonNull(str, ()-> "유효한 값이 아닙니다. 값을 확인해주세요.");
}catch(NullPointerException e) {
	System.out.println(e.getMessage());
}
null
유효한 값이 아닙니다.
유효한 값이 아닙니다. 값을 확인해주세요.

 

출처

신용권, 이것이 자바다, 한빛미디어

'JAVA > JAVA' 카테고리의 다른 글

연산자 Operator  (0) 2021.10.04
JVM 자바 가상머신  (0) 2021.10.02
Object Class  (0) 2021.09.28
java.lang 패키지  (0) 2021.09.27
어노테이션 Annotation (@)  (0) 2021.09.26