키보드워리어

[자바]🍯꿀팁 - equals 메서드 활용 본문

JAVA/JAVA 꿀팁모음

[자바]🍯꿀팁 - equals 메서드 활용

꽉 쥔 주먹속에 안경닦이 2023. 4. 7. 18:03
728x90

안녕하세요 【키보드 워리어】

 

⌨🗡🧑


블로그 방문자 여러분, 안경닦이입니다.

 

Equals

 

Java에서 객체를 비교하는 방법은 두 가지가 있습니다. 첫 번째는 == 연산자를 사용하는 것이고,

두 번째는 equals() 메서드를 사용하는 것입니다.

 

== 연산자는 두 개의 객체가 메모리 상에서 동일한 객체인지를 비교합니다. 즉, 두 개의 객체가 같은 메모리 주소를 참조하는 경우에만 true를 반환합니다.

 

하지만, equals() 메서드는 객체의 내용이 같은지를 비교합니다. 따라서 두 개의 객체가 같은 메모리 주소를 참조하지 않더라도, 내용이 같다면 true를 반환합니다.

 

객체의 내용이 같은지를 비교하려면 equals() 메서드를 오버라이딩하여 사용해야 합니다.

 

public class MyClass {
    private int id;
    private String name;

    public MyClass(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof MyClass)) return false;
        MyClass myClass = (MyClass) o;
        return id == myClass.id &&
                Objects.equals(name, myClass.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }
}

원하는 필드 멤버 변수를 만들어주시고 마우스 오른쪽 버튼을 클릭해 보시면

 

Source -> hashcode and equals를 클릭

 

hashcode and equals
hashcode and equals

equals() 메서드를 생성할 수 있게 해 주어요.

 

위 버튼을 클릭해서 활용해 준 게 위 코드의 MyClass 클래스입니다.

 

위에서 멤버변수를 equals() 메서드와 hashCode() 메서드를 오버라이딩하여 사용하고 있습니다.

 

equals() 메서드에서는 먼저 == 연산자를 사용하여 객체가 동일한 객체인지를 확인하고, instanceof 연산자를 사용하여 객체가 MyClass 클래스의 인스턴스인지를 확인합니다. 그리고 MyClass 클래스의 필드인 id와 name을 비교하여 두 객체가 같은 내용을 가지는지를 확인합니다.

따라서,,,

equals() 메서드와 hashCode() 메서드를 적절하게 오버라이딩하여 사용하면 객체의 내용을 비교하는 데에 용이합니다.

이러한 오버라이딩은 컬렉션 프레임워크를 사용하는 경우에 매우 매우 중요한 역할을 합니다.

 
728x90