equals() - 2. 구현

UserV2 예제

UserV2id (고객번호)가 같으면 논리적으로 같은 객체로 정의하겠다.

  package lang.object.equals;
  public class UserV2 {
      private String id;

      public UserV2(String id) {
          this.id = id;
      }
      
      @Override
      public boolean equals(Object obj) {
          UserV2 user = (UserV2) obj;
          return id.equals(user.id);
      }
}
  package lang.object.equals;
  public class EqualsMainV2 {
     public static void main(String[] args) {
          UserV2 user1 = new UserV2("id-100");
          UserV2 user2 = new UserV2("id-100");
          System.out.println("identity = " + (user1 == user2));
          System.out.println("identity = " + (user1 == user2));
          System.out.println("equality = " + user1.equals(user2));
      }
}
  identity = false
  equality = true

스크린샷 2025-03-09 오후 8.24.49.png

정확한 equals() 구현

앞서 UserV2 에서 구현한 equals() 는 이해를 돕기 위해 매우 간단히 만든 버전이고, 실제로 정확하게 동작하려면 다음과 같이 구현해야 한다. 정확한 equals() 메서드를 구현하는 것은 생각보다 쉽지 않다. IntelliJ를 포함한 대부분의 IDE는 정확한 equals() 코드를 자동으로 만들어준다.

generator 단축키: ⌘N (macOS) / Alt+Insert (Windows/Linux)

//변경 - 정확한 equals 구현, IDE 자동 생성
@Override
public boolean equals(Object o) {
      if (this == o) return true;
      if (o == null || getClass() != o.getClass()) return false;
      User user = (User) o;
      return Objects.equals(id, user.id);
}