[java] @EqualsAndHashCode 어노테이션을 사용하여 객체의 동등성을 어떻게 구현할 수 있나요?

@EqualsAndHashCode 어노테이션은 Lombok 라이브러리에서 제공하는 기능으로, 객체의 동등성을 자동으로 구현해줍니다.

이 어노테이션을 사용하기 위해서는 먼저 Lombok 라이브러리를 프로젝트에 추가해야 합니다. 이후 동등성을 구현하고자 하는 클래스에 @EqualsAndHashCode 어노테이션을 붙여주면 됩니다.

@EqualsAndHashCode 어노테이션은 클래스의 모든 필드들을 기반으로 동등성을 판단합니다. 이때 두 객체의 모든 필드들이 일치하는 경우에만 동등한 객체로 간주됩니다. 자동으로 equals()와 hashCode() 메서드를 생성해주기 때문에, 두 객체의 동등성을 판단할 때 equals() 메서드를 호출하거나 해시값을 계산할 때 hashCode() 메서드를 사용할 수 있습니다.

다음은 @EqualsAndHashCode 어노테이션을 사용하여 동등성을 구현하는 예제입니다:

import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class Person {
   private String name;
   private int age;
   private String address;
}

public class Main {
   public static void main(String[] args) {
      Person person1 = new Person();
      person1.setName("John");
      person1.setAge(30);
      person1.setAddress("123 Main Street");

      Person person2 = new Person();
      person2.setName("John");
      person2.setAge(30);
      person2.setAddress("123 Main Street");

      System.out.println(person1.equals(person2)); // true
      System.out.println(person1.hashCode() == person2.hashCode()); // true
   }
}

위 예제에서는 Person 클래스에 @EqualsAndHashCode 어노테이션을 적용하여 동등성을 구현하였습니다. person1과 person2 객체는 모든 필드들이 일치하기 때문에 동등한 객체로 간주됩니다. 따라서 equals() 메서드를 호출하면 true를 반환하고, hashCode() 메서드를 호출하여 계산한 해시값도 일치합니다.