반응형
hashCode() 메소드
- hashCode() 메소드는 객체의 해시 코드를 반환합니다.
- 해시 코드는 객체의 메모리 주소가 아닌 객체의 고유한 정수 값입니다.
- Java 컬렉션 프레임워크(예: HashMap, HashSet 등)에서는 객체를 해시 테이블에 저장할 때 hashCode() 값을 사용하여 저장 위치를 결정하고, equals() 메소드로 동등성을 비교합니다.
- hashCode() 메소드는 일반적으로 객체의 내부 상태(fields)를 기반으로 계산된 값입니다. 따라서 동일한 내용을 가진 객체들은 같은 해시 코드를 반환해야 합니다.
- 만약 두 객체가 equals() 메소드로 동등하다면, 반드시 hashCode() 값도 같아야 하지만, hashCode() 값이 같다고 해서 equals() 메소드로 동등하다고 보장되지는 않습니다. 이는 해시 충돌(hash collision)이 발생할 수 있기 때문입니다.
equals() 메소드
- equals() 메소드는 객체의 동등성(equality)을 비교하는 역할을 합니다.
- Object 클래스에서는 equals() 메소드는 두 객체의 참조(메모리 상의 위치)가 같은지를 비교합니다. 즉, 두 객체가 동일한 인스턴스를 가리키는지를 확인합니다.
- 많은 클래스들에서는 equals() 메소드를 오버라이딩하여 두 객체의 내용(content)이 같은지를 비교하도록 수정합니다. 이 경우, 객체의 내부 상태(fields)가 같으면 equals() 메소드는 true를 반환합니다.
- 예를 들어, String 클래스는 문자열의 내용이 같으면 equals() 메소드가 true를 반환하도록 오버라이딩되어 있습니다.
사용 예시
예를 들어, 다음은 hashCode()와 equals() 메소드를 오버라이딩한 예입니다:
public class Person {
private String name;
private int age;
// 생성자, getter, setter 생략
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
이 예제에서 hashCode() 메소드는 name과 age 필드를 기반으로 해시 코드를 생성하고, equals() 메소드는 두 Person 객체의 name과 age 필드가 동일한지를 비교합니다.
hashCode, equals 차이
equals()는 객체의 내용이 같은지를 비교하고, hashCode()는 객체의 해시 코드를 반환하여 해시 기반 자료구조에서 빠르게 검색할 수 있도록 합니다. 따라서 이 두 메소드는 함께 사용되어 객체의 동등성 검사와 해시 테이블에서의 효율적인 검색을 지원합니다.
반응형
'Programming > Java, Kotlin' 카테고리의 다른 글
[Java] OOPS란? 객체지향 프로그래밍(OOP, Object-Oriented Programming) 개념 (0) | 2024.06.22 |
---|---|
[Java] Immutability(불변성)이란? Immutability 특징, 사용 예시, 장점 (0) | 2024.06.22 |
[Java] AOP 란? AOP 장점, 사용 예시 (0) | 2024.06.22 |
[Java] URI, URL 차이 (0) | 2024.06.22 |
[Java] Spring Boot 특정 url 로 리다이렉션 하기 (0) | 2024.06.15 |