[Spring] 자주 사용하는 Lombok 어노테이션

Cover image

자주 사용하는 Lombok 어노테이션

자주 사용하는 Lombok 어노테이션에 대해 정리합니다.

접근자/설정자 자동 생성

  • @Getter
  • @Setter

다음과 같이 코드를 예시로 들 수 있습니다.

@Getter @Setter
public Class Item {
  private Integer itemId;
  private String itemName;
}

@Getter@Setter 모두 클래스나 메서드에서 사용할 수 있으며, 이를 통해서 여러 경우에 사용할 수 있습니다.

private Item item = new Item();

// set
item.setItemId(1);
item.setItemName("Item");

// get
System.out.println(item.getItemId());   // output : 1
System.out.println(item.getItemName()); // output : Item

다음과 같이 사용할 수 있습니다.


생성자 자동 생성

Lombok 어노테이션을 통해서 생성자를 자동으로 생성할 수 있습니다.

  • @NoArgsConstructor : 파라미터가 없는 기본 생성자
  • @AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자
  • @RequiredArgsConstructor : final, @NonNull인 필드 값만 파라미터로 받는 생성자

다음과 같이 사용합니다.

@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class Member {
  @NonNull
  private Integer id;
  @NonNull
  private String name;
  private String email;
}

이를 여러 생성자로 생성할 수 있습니다.

// NoArgsConstructor
Member member1 = new Member();

// AllArgsConstructor
Member member2 = new Member(1, "A");

// RequiredArgsConstructor
Member member3 = new Member(2, "B", "B@naver.com");

ToString 어노테이션

  • @ToString

@ToString 어노테이션 클래스에 붙여주면 자동으로 생성해줍니다. 이와 추가적으로 exclude 속성을 사용하면, 특정 필드를 toString()에서 결과를 제거할 수 있습니다.

이를 다음과 같이 생성할 수 있습니다.

@AllArgsConstructor
@ToString(exclude = "id")
public class Member {
  private Integer id;
  private String name;
  private String email;
}
Member member = new Member(1, "test", "test@naver.com");
System.out.println(member);
// Output : Member(name=test, email=test@naver.com)

다만, 멤버 변수 중 객체 타입이 존재하고 순환 참조가 있다면 무한 루프가 발생합니다. 이 경우에도 꼭 exclude를 사용하는 것이 중요합니다.


EqualsAndHashCode 어노테이션

자바 빈을 만들때 사용하는 equalshashCode 메서드를 자주 오버라이딩하는데, @EqualsAndHashCode 어노테이션을 사용하면 자동으로 이 메서드를 생성할 수 있습니다.

public class User {
  private Integer Id;
}

@EqualsAndHashCode(callSuper = true)
public class Member extends User{
  private String name;
  private String email;
}

callSuper 속성을 통해서 equalshashCode 메소드 자동 생성 시 부모 클래스의 필드까지 감안할 수도 있습니다.

Member member1 = new Member();
member1.setId(1);
member1.setName("A");
member1.setEmail("A@naver.com");

Member member2 = new Member();
member2.setId(2);
member2.setName("A");
member2.setEmail("A@naver.com");

member1.equals(member2);
// callSuper = true, false
// callSuper = false, true

Data

@ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor 를 합친 어노테이션입니다.

다만 JPA와 같은 ORM을 사용한다면 조심하게 사용해야합니다. 위에서 @ToString과 마찬가지로 순환참조가 발생하는 경우, 문제가 발생합니다. 이 경우에는 exclude를 사용할 수 없기 때문에 코드가 길어져도 @Data 어노테이션을 피하는 것이 좋습니다.


그 외에도.

  • @Value : 불변 클래스를 생성할 때 사용합니다.
  • @Builder : 빌더 패턴을 사용할 수 있도록 코드를 생성합니다.

출처