개발을 잘하고 싶은 개발자

[Java] @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor 정리 본문

Backend/Java

[Java] @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor 정리

_소피아 2021. 8. 10. 01:04

출처 https://www.daleseo.com/lombok-popular-annotations/#%EC%83%9D%EC%84%B1%EC%9E%90-%EC%9E%90%EB%8F%99-%EC%83%9D%EC%84%B1

 

[자바] 자주 사용되는 Lombok 어노테이션

Engineering Blog by Dale Seo

www.daleseo.com

@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
public class User {
  private Long id;
  @NonNull
  private String username;
  @NonNull
  private String password;
  private int[] scores;
}

생성자 자동 생성

Lombok을 사용하면 생성자도 자동으로 생성할 수 있습니다. 

@NoArgsConstructor 어노테이션은 파라미터가 없는 기본 생성자를 생성해주고, 

@AllArgsConstructor 어노테이션은 모든 필드 값을 파라미터로 받는 생성자를 만들어줍니다.

// 사용전
public class Book {
    private String name;
    private int price;
    private String releaseDate;

    public Book() {
    }

    public Book(String name, int price, String releaseDate) {
        this.name = name;
        this.price = price;
        this.releaseDate = releaseDate;
    }
}

// 사용후
@NoArgsConstructor
@AllArgsConstructor
public class Book {
    private String name;
    private int price;
    private String releaseDate;
}

마지막으로 @RequiredArgsConstructor 어노테이션은 final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어줍니다.

+ DI 활용

  /** @RequiredArgsConstructor 미사용 */
  @Controller
  public class AAAController {
      private final AAAService aaaService;
      private final BBBService bbbService;
      private final CCCService cccService;

      public AAAController(AAAService aaaService, BBBService bbbService, CCCService cccService) {
          this.aaaService = aaaService;
          this.bbbService = bbbService;
          this.cccService = cccService;
      }
  }

  /** @RequiredArgsConstructor 사용 */
  @Controller
  @RequiredArgsConstructor
  public class AAAController {
      private final AAAService aaaService;
      private final BBBService bbbService;
      private final CCCService cccService;
  }

이렇게 편리한 어노테이션들 잘 활용해 보자!