[Java] 객체 동등 비교 - equlas()Language/Java2024. 10. 5. 20:20
Table of Contents
서론
PS중에 좌표에 대한 객체를 생성하고, 동일 좌표 비교가 필요한 경우가 생겼다.
아무생각없이 두 객체에 대한 equlas비교를 진행하고 “왜 안되지?”라고 생각했던 건에 대해서 정리해보는 글을 작성하기로 했다.
import java.io.*;
public class Main {
static class Node {
int x;
int y;
public Node(int x, int y) {
this.x = x;
this.y = y;
}
}
public static void main(String[] args) throws Exception {
Node a = new Node(0,0);
Node b = new Node(0,0);
System.out.println(a.equals(b) ? 1 : 0);
}
}
위 코드처럼 사용자 정의 객체에 대해 같은 필드값을 주입하고 비교를 진행하면 결과는 어떻게 나올까?
답은 0이 나온다. 당연하다. 두 객체의 참조값은 서로 다를테니까.
그렇다면 객체에 대한 동등비교를 어떻게 진행해야할까?
SSAFY 1학기 당시 배웠던 기억을 끄집어내는데에는 다소 시간이 오래 걸렸다.
바로 equlas와 hashCode 메서드를 오버라이딩 해야한다.
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Node node = (Node) obj;
return x == node.x && y == node.y;
}
@Override
public int hashCode() {
return Objects.hash(x, y);
}
Object 클래스에서 제공하는 두가지 메서드를 재정의함으로써 객체의 동등성 관리를 제대로 수행할 수 있다.
해시 기반 자료구조(HashSet, HashMap)를 사용하지 않는다면 hashCode의 경우 굳이 재정의 할 필요는 없다.
사건 발생 문제
https://school.programmers.co.kr/learn/courses/30/lessons/340211
PCCP 기출 문제 연습 중에 마주한 실수였고, 여유 있을 때 한번 더 풀어보면 도움이 될 것 같다.
다음부터는 이런 사소한 실수를 하지 않도록 기록하자 :/
'Language > Java' 카테고리의 다른 글
[Java] 인스턴스 변수를 사용하지 않는 메서드는 static을. (0) | 2024.09.07 |
---|---|
[Java] ArrayList.java (add 메서드 내부 동작) (0) | 2024.03.19 |
Java#1 - 자바공부를 시작하며.. (0) | 2023.04.29 |
@Beemo9 :: BeHinD
개발 기술 블로그, Dev
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!