본문 바로가기
JAVA/[JAVA] 바구니

[JAVA] Objects Class (3)

by oncerun 2020. 4. 17.
반응형

hash()

hash()는 해시 코드를 생성하는 역할을 합니다.

java.lang패키 기지의 Object의 hashcode()를 재정의할 때 리턴 값으로 사용할 수 있습니다.

 

hash()의 기본구조는

Objects.hash(Object..... values)입니다

들어온 여러 객체들을 이용해 해시 코드값을 만들어냅니다.

매개변수로 객체를 주어도 되며 배열로 넣어주어도 됩니다. 

객체로 넣어주었을 때 Arrays.hashCode(Object [])를 호출해서 해시 코드값을 얻어 리턴하기도 합니다.

 

만약 우리가 Member클래스의 필드의 값들이 동일하다면 동일한 해시 코드값을 리턴하도록 재정의해서

두 객체를 동일하게 만들어주는 의도라면 코드를 이렇게 작성할 수 있습니다.

 

package blog;

import java.util.Objects;

public class Hash {
	public static void main(String[] args) {
		Member a = new Member(1, "a");
		Member b = new Member(1, "a");
		System.out.println(a.hashCode());
		System.out.println(b.hashCode());
		System.out.println(a.hashCode() == b.hashCode());
		System.out.println(a.equals(b));
	}
	static class Member {
		int depn;
		String name;
		public Member(int depn, String name) {
			this.depn = depn;
			this.name = name;
		}
		@Override
		public int hashCode() {
			return Objects.hash(depn, name);
			// int 는 Integer객체로 변환
			// depn, name을 통해해시코드를 만들어준다
		}
		@Override
		public boolean equals(Object obj) {
			if (obj instanceof Member) {
				Member m = (Member) obj;
				if (m.depn == this.depn) {
					if (m.name.equals(this.name))
						return true;
				}
			}
			return false;
		}
	}
}

저번 Object의 hashCode()에서는 객체의 필드 값을 리턴해 필드 값이 같다면 동등하게 만들었다면

이번에는 클래스의 필드의 객체를 이용해 해시 코드값을 만들어 리턴해

해시 코드값이 동일한 경우 동등 객체로 나타낼 수 있는 방법입니다.

 

 

 

isNull() , nonNull(), requireNonNull()

널 여부를 조사할 수 있는 메서드이다

Objects.isNull(Object obj)
obj가  NULL일 경우 true


Objects.nonNull(Object obj)
obj가 NULL 일경우 false

requireNonNull()

3가지의 오버라이드가 존재한다.

requireNonNull(T obj)
obj값이 null이면 NullPointerException을 발생
null값이 아니라면 obj를 리턴


requireNonNull(T obj, String msg)
obj값이 null이면 NullPointerException(msg)을 발생
null값이 아니라면 obj를 리턴


requireNonNull(T obj, Supplier msgSupplier)
obj값이 null이면 NullPointerException(msgSupplier.get)을 발생
null값이 아니라면 obj를 리턴

 

 

 

toString

 

Objects.toString()은 Object.toString을 리턴합니다.

다만 toString(Object obj, String nullDefault)라는 메서드가 있는데

첫 번째 매개변수가 null값이면 두 번째 nullDefault의 toString()를 호출합니다.

 

만약 입력값이 null일 경우에도 디폴트 값을 주고 리턴하도록 하려면 Objects.toString()을 사용하면 됩니다.

반응형

'JAVA > [JAVA] 바구니' 카테고리의 다른 글

[JAVA] System Class  (0) 2020.04.22
[JAVA] Reflection  (0) 2020.04.21
[JAVA] Objects Class (2)  (0) 2020.04.15
[JAVA] Objects Class (1)  (0) 2020.04.15
[JAVA] Object Class (3)  (0) 2020.04.09

댓글