헷갈릴까봐 미리 말하지만 오브젝트(Object) 아니다 오브젝츠(Objects) 클래스이다.😜
Objects클래스?
java.util.Objects클래스
는 Object클래스
의 보조 클래스로 모든 메서드가 static
이다.객체의 비교
나 널 체크(null check)
에 유용하다.
equals(), deepEquals()
String[][] str2D = new String[][] {{"aaa", "bbb"}, {"AAA", "BBB"}};
String[][] str2D_2 = new String[][] {{"aaa", "bbb"}, {"AAA", "BBB"}};
Objects.equals(str2D, str2D_2); // false
Objects.deepEquals(str2D, str2D_2); // true
Object에 있는 메서드와 다르게 Objects의 equals()는 null 검사를 하지 않아도 된다.
메소드의 내부에서 a와 b의 널 검사를 하기 때문이다.deepEquals()
는 말 그대로 깊은 비교이다 이 메서드는 객체를 재귀적으로 비교하여
다차원 배열의 비교도 가능하다.
널 체크
Objects.isNull(null); // true
Objects.nonNull(null); // false
isNull()은 해당 객체가 널인지 확인해서 null이면 true를 반환하고 아니면 false를 반환한다.
nonNull()은 isNull()과 반대로 널인지 확인해서 null이면 false 아니면 true를 반환한다.
Object.requireNonNull(null, "null이면 익셉션 발생");
requireNonNull()은 객체가 널이면 NullPointerException
예외가 발생하면서 설정해둔
메세지가 출력된다.
hashCode()
Objects.hashCode(null); // 0
hashCode()도 내부적으로 null 검사를 한 뒤에 Object클래스의 hashCode()를 호출한다.
대신 null일 때는 0을 반환한다.
toString()
String s1 = "안녕?";
String s2 = null;
Objects.toString(s1); // 안녕?
Objects.toString(s1,"객체가 null이면 이 문자열을 출력하세요."); // 안녕?
Objects.toString(s2); // null
Objects.toString(s2,"객체가 null이면 이 문자열을 출력하세요."); // 객체가 null이면 이 문자열을 출력하세요.
사실 toString은 크게 다를게 없긴 하지만 Objects의 가장 큰 기능이라면toString( 원래쓸 객체, 앞의 객체가 null일 때 처리할 값 )
toString() 내부적으로 널 검사를 하고나서 널이라면 대신할 값을 지정 할 수 있다.
대소비교 compare()
Comparator c = String.CASE_INSENSITIVE_ORDER; // 대소문자 구분 안하는 비교
Objects.compare("aa", "bb", c)); // -1
Objects.compare("bb", "aa", c)); // 1
Objects.compare("ab", "AB", c)); // 0
compare()
는 두 비교대상이 같으면 0, 앞이 크면 양수, 뒤가 크면 음수를 반환한다.
또 두 객체를 비교하는데 사용할 기준이 필요하여 Comparator
를 사용한다.
댓글