JAVA

Object 클래스 객체 해시코드(hashCode())

연93 2022. 10. 7. 16:13

id가 같을 경우 완전한 논리적 동등으로 만들기 위해서 해시코드를 사용해야한다.

// 객체비교 : 중요.


//객체비교의 동작메커니즘.(자바에서 객체가 동일한지 아닌지를 내부적으로 아래와 동작이 된다.)
// 해시코드 값이 다르면 서로다른 객체로 판단을 하고, 해시코드 값이 같으면 equals()메소드로 다시 비교한다.
// equals()메소드가 true이면 동일한 객체로 보고, false면 다른객체로 보게된다.

// hashcode()메소드와 equals()메소드를 재정의를 안하면, 객체비교는 Object클래스의 설계 원리대로 객체비교작업이 일어나다.
// 재정의를 하면, 내가 원하는 대로 비교를 해서, 객체비교작업이 일어난다.
public class Key {

	public int number;
	
	public Key(int number) {
		this.number = number;
	}
	
	
	// 재정의를 한 의미는 Object클래스의 객체비교 성격을 사용하지 않고, Key클래스만의 객체비교를 만들어서 사용.
	@Override
	public boolean equals(Object obj) {
		
		System.out.println("Key클래스의 equals()메소드 동작");
		
		if(obj instanceof Key) {
			Key compareKey = (Key) obj;
			if(this.number == compareKey.number) {
				return true;
			}
		}
		
		return false;
	}
	
	@Override
	public int hashCode() {
		
		System.out.println("Key클래스의 hashCode()메소드 동작");
		
		return number;
	}
}
import java.util.HashMap;

public class KeyExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// HashMap클래스의 특징?
		// HashMap클래스가 생성된 기억장소는 [key, value] 쌍으로 설계가되어있다.
		// key는 중복할수 가 없다는 성격을 가지고 있다.
		// 데이타를 저장할 때마다 key 중복검사 기능을 가지고 있다.
		// 중복된 키가 사용되면, 전에 정보는 소멸되고, 새로운 값이 저장된다.
		
		//사용법.
		HashMap<Key, String> hashMap = new HashMap<Key, String>();
		
		//데이타 삽입. 객체비교작업이 발생한다.
		hashMap.put(new Key(1), "홍길동"); // key: 힙영역의 주소
		hashMap.put(new Key(1), "이순신"); // key: 힙영역의 주소
		
		//기억장소에 저장된 데이타의 수
		System.out.println(hashMap.size());  // Object클래스의 객체비교 2. Key클래스의 재정의된 객체비교 1

	}
}

 

'JAVA' 카테고리의 다른 글

System 클래스 (currentTimeMillis,nano Time)  (0) 2022.10.07
Object 클래스 객체복제 clone()  (0) 2022.10.07
Object 클래스 equals메소드  (0) 2022.10.07
제네릭 메서드 예제 (태그 설명)  (0) 2022.09.29
제네릭 메서드  (0) 2022.09.29