[Java] 객체 동등 비교 - equlas()
Language/Java 2024. 10. 5. 20:20

[Java] 객체 동등 비교 - equlas()

@Beemo9
목차

서론

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

PCCP 기출 문제 연습 중에 마주한 실수였고, 여유 있을 때 한번 더 풀어보면 도움이 될 것 같다.

 

다음부터는 이런 사소한 실수를 하지 않도록 기록하자 :/

Beemo9
@Beemo9
개발 기술 블로그, Dev 포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!
image