본문 바로가기
WEB/Spring

의존성 주입 애노테이션 @RequiredArgsConstructor, @AllArgsConstructor, @NoArgsConstructor 핵심 정리

by 정권이 내 2024. 10. 31.

의존성 주입 애노테이션 종류 알아보기

Spring Boot에서 의존성 주입을 위해 Lombok 라이브러리에서 제공하는 어노테이션인 @RequiredArgsConstructor, @AllArgsConstructor, @NoArgsConstructor를 활용하면 코드가 간결해지고 다양한 생성자 주입 방식을 선택할 수 있습니다. 각 어노테이션의 역할과 생성자 주입 방식은 다음과 같습니다.

 

@RequiredArgsConstructor

  • @RequiredArgsConstructorfinal 또는 @NonNull로 선언된 필드에 대한 생성자를 자동으로 생성합니다.

  • 의존성 주입이 필요한 필드를 final로 지정하면 해당 필드만 초기화하는 생성자를 Lombok 이 만들어줍니다.

  • 서비스나 리포지토리 클래스에서 필드 의존성 주입 시, 필요하지 않은 필드까지 초기화하는 오버헤드를 줄이고 싶을 때 사용합니다.

    @Service
    @RequiredArgsConstructor
    public class MyService {
        private final MyRepository repository;
        private final MyOtherService otherService;
        
        @NonNull
        private String nonNullString;
        
        private String justString;
        // repository와 otherService, nonNullString 필드에 대한 생성자가 자동으로 생성됩니다.
        // justString 에 대해서는 생성되지 않습니다.
    }
    

 

@AllArgsConstructor

  • @AllArgsConstructor는 모든 필드를 파라미터로 받는 생성자를 생성합니다.
  • 클래스의 모든 필드에 대해 초기화할 수 있는 생성자를 자동으로 만들어주기 때문에, 초기화가 필요한 모든 필드 값을 외부에서 전달할 수 있습니다.
  • 테스트 코드나 특정 객체의 모든 필드를 초기화해야 하는 경우에 유용합니다. 다만, 스프링에서 생성자 주입으로 사용할 경우 주입할 필요 없는 필드까지 포함될 수 있어 자주 사용되지는 않습니다.
@Service
@AllArgsConstructor
public class MyService {
    private MyRepository repository;
    private MyOtherService otherService;
    private String serviceName;
    // repository, otherService, serviceName 모두를 파라미터로 받는 생성자가 생성됩니다.
}

 

@NoArgsConstructor

  • @NoArgsConstructor는 기본 생성자를 자동으로 생성합니다. 파라미터가 없는 생성자를 만들어주기 때문에 기본 초기화가 필요할 때 유용합니다.
  • 기본적으로 인스턴스를 만들기 위해 필요한 매개변수가 없을 때 사용됩니다. 스프링에서 빈을 생성할 때 매개변수가 없는 기본 생성자가 필요할 경우에 사용됩니다.
  • JPA 엔티티 클래스에서 기본 생성자가 반드시 필요하기 때문에 JPA 엔티티 클래스에 자주 사용됩니다. JPA의 프록시를 통해 엔티티를 초기화할 때 필요합니다.
@Entity
@NoArgsConstructor
public class MyEntity {
    @Id
    private Long id;
    private String name;
    // 기본 생성자가 자동으로 생성됩니다.
}

 

비교 요약

어노테이션 생성자 역할 사용 용도
@RequiredArgsConstructor final 및 @NonNull 필드만 초기화 생성자 생성 주로 서비스, 리포지토리 등의 생성자 주입 시 사용
@AllArgsConstructor 모든 필드를 초기화하는 생성자 생성 모든 필드를 초기화해야 할 때 (테스트 등에서 사용)
@NoArgsConstructor 기본 생성자 생성 JPA 엔티티에서 필수, 기본 초기화가 필요할 때 사용
반응형

댓글