Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

12.3 Object 클래스 - 객체 해시코드 hashCode()와 equals() 본문

이것이 자바다/12 java.base 모듈

12.3 Object 클래스 - 객체 해시코드 hashCode()와 equals()

빌드이너프 2024. 4. 8. 16:35

객체 해시코드

객체를 식별하는 정수

 

Object의 hashCode() 메소드

객체의 메모리 번지를 이용해서 해시코드를 생성하기 때문에 객체마다 다른 정수값을 return 한다

두 객체가 동등한지를 비교할 때 주로 사용

public int hashCode()

 

hashCode() 메소드 역시 객체의 데이터를 기분으로 재정의해서 새로운 정수값을 return하도록 하는 것이 일반적이다

객체가 다르다 할지라도 내부 데이터가 동일하다면 같은 정수값을 return하기 위해서이다

 

 

자바는 두 객체가 동등함을 비교할 때 hashCode()와 equals() 메소드를 같이 사용하는 경우가 많다

1) hashCode()가 return하는 정수값이 같은지 확인

2) equals() 메소드가 true를 return 하는지를 확인하여 동등 객체임을 판단

 

예시

package ch12.sec03.exam02;

public class Student {
	private int no;
	private String name;
	
	public Student(int no, String name) {
		this.no = no;
		this.name = name;
	}

	public int getNo() {
		return no;
	}

	public String getName() {
		return name;
	}
	
	@Override
	public int hashCode() {
		int hashCode = no + name.hashCode();
		return hashCode;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Student target) {
			if(no == target.getNo() && name.equals(target.getName())) {
				return true;
			}
		}
		return false;
	}
}
package ch12.sec03.exam02;

public class HashCodeExample {
	public static void main(String[] args) {
		Student s1 = new Student(1, "홍길동");
		Student s2 = new Student(1, "홍길동");
		
		if(s1.hashCode() == s2.hashCode()) {
			if(s1.equals(s2)) {
				System.out.println("동등 객체");				
			} else {
				System.out.println("데이터가 다름, 동등 객체 아님");
			}
		} else {
			System.out.println("해시코드가 다름, 동등 객체 아님");
		}
	}
}
동등 객체