[Java] 5.6.1 equals 메서드 (Object 클래스)

출간일 2016년 11월 28일

판매가 2000원

형태 ebook

학습에 도움이 되시면 ebook을 구입하여 소장하시면 감사하겠습니다.

언제나 휴일 출판사의 수익금의 대부분은 아프리카에 기부하고 있습니다.


equals 메서드는 두 개의 개체가 같은지 판별하는 것이 디폴트입니다. 대신 값 형식과 일부 클래스(대표적으로 String 클래스)에서는 내부의 값이 같은지 판별합니다.

 

다음의 예제 코드는 equals 메서드를 재정의할 때와 하지 않을 때를 비교하기 위한 예제입니다. MyData 클래스에서는 equals 메서드를 재정의하였고 MyInt 클래스에서는 재정의하지 않았습니다.

 

그리고 테스트 코드에서는 같은 값을 갖는 MyData 개체를 두 개 생성한 후에 equals 메서드로 비교하고 == 연산자로 비교합니다. 클래스 형식의 equals 메서드 디폴트 동작은 같은 개체를 참조하는지를 비교하는 것이기 때문에 결과는 false입니다. 물론 == 연산의 결과도 마찬가지입니다.

 

하지만 같은 값을 갖는 MyInt 개체를 두 개 생성한 후에 equals 메서드 호출하면 개발자가 정한 코드가 동작하기 때문에 개발자 의도에 맞게 내부 값만 같아도 true값을 반환하게 정의할 수 있습니다.

 

이처럼 정의하면 같은 값을 갖는 두 개의 MyInt 개체를 equals 메서드로 비교하면 true 값을 반환합니다. 물론 이 때도 == 연산의 결과는 false입니다.

 

다음은 equals 메서드를 재정의하지 않은 MyData 클래스와 재정의한 MyInt 클래스를 상호 비교하는 예제입니다.

실행 결과