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

[Java] Object Class (2)

by oncerun 2020. 4. 8.
반응형

2. 해시 코드 hashCode()

hashCode()는 객체의 해시 코드를 리턴하는데 객체의 해시 코드란 객체를 식별할 하나의 정수 값을 의미합니다

객체를 식별한다는 것은 해시 코드의 값이 동일한지 아닌지를 식별한다는 것입니다.

 

hashCode()는 객체의 메모리 번지를 이용해서 hashCode를 만들어 리턴 값으로 넘겨줍니다.

모든 객체는 개별 hashCode가 존재하며 전부 다른 hashCode를 가지고 있습니다.

 

1.equals에서 동등에 대해 비교를 할 때 우리는 객체의 데이터만을 비교해 동등하다고 했습니다.

우리가 hashSet , hashTable, hashMap과 같은 컬렉션 라이브러리를 사용할 때에 두 객체가 동등한 객체인지 판단하는 경우가 존재합니다. 위 메서드는 객체를 비교할 때 먼저 hashCode를 비교합니다. 만약 hashCode가 동일하다면 equals()의 리턴 값을 확인해 true일 경우에 같은 객체로 인식해 key의 value값을 리턴해줍니다.

 

hahMap의 대략적인 설명입니다.

key와 String 데이터 1:1 대응해 값을 저장합니다.

데이터를 얻어올 때 key가 같을 때만 데이터를 꺼내올 수 있습니다.

즉 키로 객체를 저장합니다.

key (객체를 저장) key key ...
String (data를 저장) String String ...
public class Key {
	private int value;
	
	public Key(int i) {
		this.value = i;
	}
}

먼저 Key라는 클래스의 멤버와 생성자입니다. equals를 오버 라이딩해 객체가 같다고 한 부분까지 작성했습니다.

 

public class Key {
	public Integer value;
	
	public Key(Integer i) {
		this.value = i;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Key) {
			Key key = (Key)obj;
			if(value.equals(key.value)) 
			return true;
		}
		return false;
	}
}

 

 

import java.util.HashMap;

public class Program {

	public static void main(String[] args) {
	
	Key a = new Key(1);
	Key b = new Key(1);
	System.out.println(a.equals(b));
    }
 }

 

 

hashMap.put() 메서드로 key값과 String형의 데이터를 입력할 수 있습니다.

그런 뒤 keyValue에 get() 메서드로 Key(1) 값의 String데이터를 가져오도록 했습니다.

두 객체가 동일하다면 String데이터 값을 주어야 합니다.

분명 두 객체는 동일하다고 했지만 결괏값은 null입니다 같지 않아서 데이터 값을 주지 않은 것이죠.

 

두 객체의 해시 코드값은 완전히 다릅니다.

 

두 객체를 동등하게 만들어주기 위해 hashCode()를 오버 라이딩해야 합니다.

	@Override
	public int hashCode() {
		return value;
	}

오버라이드 한 뒤 결괏값을 보게 되면

hashMap이 동일한 객체로 판단을 하고 key의 값으로 String 데이터를 넘겨줬습니다. 

이제야 완전한 동등한 객체가 되었습니다.

반응형

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

[JAVA] Objects Class (1)  (0) 2020.04.15
[JAVA] Object Class (3)  (0) 2020.04.09
[JAVA] Object Class  (0) 2020.04.08
[JAVA] Java.lang 패키지  (0) 2020.04.08
[JAVA] Anonymous Class  (0) 2020.04.08

댓글