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 |