Objects
클래스 ]
java.util.Objects
클래스는 객체 비교, 해시코드 생성,null
여부, 객체 문자열 리턴 등의 연산을 수행하는 정적 메소드로 구성된Object
의 유틸리티 클래스이다.
다음은 Objects
클래스가 가지고 있는 정적 메소드들이다.
compare(T a, T b, Comparator<T> c)
)
objects.compare(T a, T b, Comparator<T> c)
메소드는 두 객체를 비교자(Comparator
)로 비교해서int
값을 리턴한다.
java.util.Comparator<T>
는 제네릭 인터페이스 타입으로 두 객체를 비교하는 compare(T a, T b)
메소드가 정의되어 있다. (T
: 비교할 객체 타입)
compare()
메소드의 리턴 타입은 int
인데, a
가 b
보다 작으면 음수
, 같으면 0
, 크면 양수
를 리턴하도록 구현 클래스를 만들어야 한다.
public interface Comparator<T> {
int compare(T a, T b);
}
equals()
와 deepEquals()
)equals()
Objects.equals(Object a, Object b)
는 두 객체의 동등을 비교하는데 다음과 같은 결과를 리턴한다.
a
와 b
가 모두 null
일 경우 true
를 리턴한다.a
와 b
가 null
이 아닌 경우는 a.equals(n)
의 결과를 리턴한다.deepEquals()
Objects.deepEquals(Object a, Object b)
역시 두 객체의 동등을 비교한다.
a
와 b
가 서로 다른 배열일 경우, 항목 값이 모두 같다면 true
를 리턴한다. (Arrays.deepEquals(Object[] a, Object[] b)
와 동일)
hash(), hashCode()
)Objects.hash(Object...values)
메소드는 매개값으로 주어진 값들을 이용해서 해시 코드를 생성하는 역할을 하는데,
주어진 매개값들로 배열을 생성하고 Arrays.hashCode(Object[])
를 호출해서 해시코드를 얻고 이 값을 리턴한다.
이 메소드는 클래스 hashCode()
를 재정의할 때 리턴값을 생성하기 위해 사용하면 좋다.
클래스가 여러 가지 필드를 가지고 있을 때 이 필드로부터 해시코드를 생성하게 되면 동일한 필드값을 가지는 객체는 동일한 해시코드를 가질 수 있다.
@Override
public int hashCode() {
return Objects.hash(field1, field2, field3);
}
Objects.hashCode(Object o)
는 매개값으로 주어진 객체의 해시코드를 리턴하기 때문에 o.hashCode()
의 리턴값과 동일하지만, 매개값이 null
이면 0
을 리턴한다는 점은 다르다.
isNull(), nonNull(), requireNonNull()
)Objects.isNull(Object obj)
는 매개값은 null
일 경우 true
를 리턴한다.nonNull(Object obj)
는 매개값이 not null
일 경우 true
를 리턴한다.requireNonNull()
는 다음 세 가지로 오버로딩되어 있다.not null
이면 첫 번째 매개값을 리턴하고,null
이면 모두 NullPointerException
을 발생시킨다.NullPointerException
의 예외 메시지를 제공한다.toString()
)Objects.toString()
은 객체의 문자 정보를 리턴하는데, 다음의 두 가지로 오버로딩되어 있다.
첫 번째 매개값이
not null
이면 toString()
으로 얻은 값을 리턴하고,null
이면 "null"
또는 두 번째 매개값인 nullDefault
를 리턴한다.이것이 자바다 책