본문 바로가기
JAVA BASE/lang & util

08. [자바] Objects클래스

by staticClass 2020. 12. 27.

헷갈릴까봐 미리 말하지만 오브젝트(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를 사용한다.

댓글