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

2022. 8. 10. 16:33Web/JAVA

1. @Getter / @Setter

    - 각각의 필드 또는 클래스에 선언해 줄 경우 Private 변수에 접근자를 생성해줍니다.

    - 일일이 get/set을 통한 접근말고 어노테이션 하나만 으로 간단하게 접근자를 쓸수있게 됩니다.

@Getter @Setter
Public class User {
	private String name;
}
User user = new User();
user.setName("홍길동");
String userName = user.getName();

2. @AllArgsConstructor / @NoArgsConstructor / @RequiredArgsConstructor

    - @AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자를 만들어줍니다.

    - @NoArgsConstructor : 파라미터가 없는 기본 생성자를 만들어줍니다.

    - @RequiredArgsConstructor : final 이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어줍니다.

@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor
public class User {
  private Long id;
  @NonNull
  private String username;
  @NonNull
  private String password;
  private int[] scores;
}
User user1 = new User();
User user2 = new User("dale", "1234");
User user3 = new User(1L, "dale", "1234", null);

3. @ToString

    - 객체를 출력할 때 String형태로 출력이 가능한 상태로 만들어줍니다.

    - 해당 어노테이션을 선언하지 않았을 경우 객체를 출력할 때마다 .toString 을 붙여줘야하는 번거로움이 있습니다.

 

@ToString(exclude = "password")
public class User {
  private Long id;
  private String username;
  private String password;
  private int[] scores;
}
User user = new User();
user.setId(1L);
user.setUsername("dale");
user.setUsername("1234");
user.setScores(new int[]{80, 70, 100});
System.out.println(user);
User(id=1, username=1234, scores=[80, 70, 100])

4. @EqualsAndHashCode

    - 자바 빈을 만들 때 equals와 hashCode 메소드를 오버라이딩 하는 어노테이션

    - callSuper를 통해 메소드 자동 생성 시 부모 클래스의 필드까지 참조할지 안할지에 대해서 정할 수가 있다.

@EqualsAndHashCode(callSuper = true)
public class User extends Domain {
  private String username;
  private String password;
}
User user1 = new User();
user1.setId(1L);
user1.setUsername("user");
user1.setPassword("pass");

User user2 = new User();
user1.setId(2L); // 부모 클래스의 필드가 다름
user2.setUsername("user");
user2.setPassword("pass");

user1.equals(user2);
// callSuper = true 이면 false, callSuper = false 이면 true

5. @Data

    - @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode 를 한꺼번에 설정해주는 

       유용한 어노테이션이다.

@Data
public class User {
  // ...
}

6. @Builder

    - 다수의 필드를 갖는 복잡한 클래스의 경우 생성자 대신 빌더를 사용하게 됩니다.

    - @Builder 어노테이션을 사용하게 되면, 자동으로 해당 클래스에 빌더를 추가할 수 있습니다.

@Builder
public class User {
  private Long id;
  private String username;
  private String password;
  @Singular
  private List<Integer> scores;
}

    - 컬렉션(List)로 된 필드에는 @Singular 어노테이션을 선언해주면,

      모든 원소를 한번에 넘기지 않고 원소를 하나씩 추가할 수 있습니다.

User user = User.builder()
  .id(1L)
  .username("dale")
  .password("1234")
  .score(70)
  .score(80)
  .build();
// User(id=1, username=dale, password=1234, scores=[70, 80])

7. @Value

    - 한번 생성하면 변경할 수 없는 불변 객체를 만들기 위한 클래스를 선언할 때는 @Value 어노테이션을 선언합니다.

    - 보통 VO를 생성할 경우 적용 됩니다.

 

8. @Synchronized

    - 자바의 synchronized 키워드를 메소드에 선언하면 객체 레벨에서 락이 걸려서 여러가지 동기화 관련

       문제들이 발생할 수 있습니다.

    - 대신에 @Synchronized 어노테이션을 사용하면 가상의 필드 레벨에서 좀 더 안전하게 락을 걸어줍니다.

 

9. @CleanUp

    - IO 처리나 JDBC 코딩을 할 때, try-catch-finally 문의 finally 절을 통해서 close() 메소드를 호출합니다.

    - @Cleanup 어노테션을 사용하면 해당 자원이 자동으로 닫히는 것이 보장됩니다.