티스토리 뷰

CS/Java

equals

bool-flower 2022. 10. 5. 08:43

Object의 equals


  • 매개변수로 객체의 참조 변수를 받아서 비교하여 결과를 boolean값으로 반환하는 메서드
  • 참조 변수의 값(주소 값)으로 두 객체가 같은지 다른지 판단

 

equals()의 오버라이딩


Object의 equals메서드는 두 객체의 주소 값만 비교하기 때문에, 두 객체의 내용이 같아도 주소 값이 다르면 다른 객체로 본다. 따라서 객체 내용을 비교하여 같고 다름을 판단하고 싶다면 해당 클래스에 equals 메서드를 오버라이딩해주어야 한다. 대표적인 예시로 String, Integer 클래스가 있다.

 

String의 equals

Object와 같이 두 객체의 주솟값이 같으면 true 반환한다. 차이점은 주솟값이 다르더라도 두 객체의 value를 비교하는 과정이 추가되어 있다는 점이다.

Integer의 equals

Integer는 전달받은 객체가 같은 Integer 타입인지 판단하고, 아니면 false를 반환한다. Integer 객체라면 value를 비교해 결과를 반환한다.

equals는 아무렇게나 오버라이딩해도 될까?


Object의 final이 아닌 메서드는 모두 오버라이딩을 염두하고 설계되었다. 따라서, 오버라이딩 시 지켜야 하는 일반 규약이 정의되어 있다. 이 규약에 맞게 정의하지 않으면 이 규약을 준수한다고 가정하는 여러 클래스들이 잘 못 동작할 수 있다. 즉, equals를 무작정 오버라이딩해서는 안된다. 

 

<이펙티브 자바의 아이템 10>을 보면 잘못된 equals 오버라이딩이 야기하는 문제를 피하기 위해 equals의 일반 규약과 오버라이딩해야 될 때와 하지 말아야 할 때에 대해서 소개한다. 다음 포스팅에서는 해당 챕터를 바탕으로 정리해야겠다.

 

참조

조슈아 블로크 - 이펙티브 자바 Effective Java 3/E

남궁성 - 자바의 정석

'CS > Java' 카테고리의 다른 글

ArrayList에 요소가 추가되는 과정 파헤쳐보기  (0) 2023.02.03
Java Collection Framework  (0) 2022.11.16
System.out vs 로깅 라이브러리  (0) 2022.07.15
Comparator와 Comparable  (0) 2022.05.29
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday