[Java] 기본 API 클래스 ②

kiteB·2022년 2월 1일
0

Java

목록 보기
29/35
post-thumbnail

[ Objects 클래스 ]

java.util.Objects 클래스는 객체 비교, 해시코드 생성, null 여부, 객체 문자열 리턴 등의 연산을 수행하는 정적 메소드로 구성된 Object의 유틸리티 클래스이다.

다음은 Objects 클래스가 가지고 있는 정적 메소드들이다.


1. 객체 비교 ( 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인데, ab보다 작으면 음수, 같으면 0, 크면 양수를 리턴하도록 구현 클래스를 만들어야 한다.

public interface Comparator<T> {
    int compare(T a, T b);
}

2. 동등 비교 ( equals()deepEquals() )

📌 equals()

Objects.equals(Object a, Object b)두 객체의 동등을 비교하는데 다음과 같은 결과를 리턴한다.

  • ab가 모두 null일 경우 true를 리턴한다.
  • abnull이 아닌 경우는 a.equals(n)의 결과를 리턴한다.

📌 deepEquals()

Objects.deepEquals(Object a, Object b) 역시 두 객체의 동등을 비교한다.
ab가 서로 다른 배열일 경우, 항목 값이 모두 같다면 true를 리턴한다. (Arrays.deepEquals(Object[] a, Object[] b)와 동일)


3. 해시코드 생성 ( 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을 리턴한다는 점은 다르다.


4. 널 여부 조사 ( isNull(), nonNull(), requireNonNull() )

  • Objects.isNull(Object obj)매개값은 null일 경우 true를 리턴한다.
  • 반대로 nonNull(Object obj)매개값이 not null일 경우 true를 리턴한다.
  • requireNonNull()는 다음 세 가지로 오버로딩되어 있다.
    • 첫 번째 매개값이
      • not null이면 첫 번째 매개값을 리턴하고,
      • null이면 모두 NullPointerException을 발생시킨다.
    • 두 번째 매개값은 NullPointerException의 예외 메시지를 제공한다.

5. 객체 문자 정보 ( toString() )

Objects.toString()객체의 문자 정보를 리턴하는데, 다음의 두 가지로 오버로딩되어 있다.

첫 번째 매개값이

  • not null이면 toString()으로 얻은 값을 리턴하고,
  • null이면 "null" 또는 두 번째 매개값인 nullDefault를 리턴한다.

[ 참고자료 ]

이것이 자바다 책

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글