Equasls, HashCode에 대해서 알아보자
2022. 12. 6. 18:24ㆍBackEnd(Java)/Java
✅ 아래 내용들에 대해서 알아보자
- 동일성 & 동등성
- Equals & HashCode
동일성 & 동등성
동일성이란 객체가 메모리에서 고유하게 식별되는 것을 의미한다. 즉, 객체의 참조값(주소값)이 같은 경우 두 객체는 동일한 객체이고 Java에서 == 연산자를 통해 비교할 수 있다.
동등성이란 객체가 가지고 있는 값이 같은 경우 두 객체는 동등한 객체라고 의미한다. 자바에서 equals() 메서드를 재정의하여 동등성을 비교할 수 있다. 동일성과 동등성 차이를 예시 코드를 보면서 이해해 보자.
class anyClass{
int value;
public anyClass(int value) {
this.value = value;
}
//equals 재정의
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
anyClass anyClass = (anyClass) o;
//value 라는 필드값으로 동등성을 비교
return this.value == anyClass.value;
}
@Override
public int hashCode() {
return Objects.hash(value);
}
}
------------
@DisplayName("동일성 테스트")
@Test
public void 동일성_테스트(){
//given
//when
anyClass a=new anyClass(1);
anyClass b=new anyClass(1);
//then
System.out.println("동일성 비교 ="+ (a == b)); //false
}
@DisplayName("동등성 테스트")
@Test
public void 동등성_테스트(){
//given
//when
anyClass a=new anyClass(1);
anyClass b=new anyClass(1);
//then
System.out.println("동등성 비교 ="+ a.equals(b)); //true
}
anyClass라는 객체를 생성하였고 해당 클래스의 필드값 value를 동일한 값(1)을 주어서 인스턴스 2개를 생성하였다.
그 결과, 동일성 테스트에서는 객체의 주소값이 다르므로 false가 나오게 된다. 각 인스턴스의 주소값이 다르므로!
동등성 테스트에서는 객체의 필드값이 같으므로 true가 나오게 된다. anyClass의 equals() 메서드를 재정의 함으로써 anyClass의 value 필드로 구분하여 동등성을 비교하였다.
참고자료
반응형
'BackEnd(Java) > Java' 카테고리의 다른 글
volatile (0) | 2024.10.01 |
---|---|
Hash에 대해서 알아보자 (0) | 2022.12.06 |
CompletableFuture (0) | 2022.11.22 |
추상클래스 vs 인터페이스 (0) | 2022.09.01 |
call by value? call by reference? (0) | 2022.08.22 |