생성자 주입 : @Autowired와 @RequiredArgsConstructor의 차이

이주호·2024년 1월 29일

@Service 클래스 만들 때, repository를 불러와야하는데 예전에는 @Autowired를 사용했지만 지금은 다른 방법 사용한다고 한다. @RequiredArgsConstructor와 private final로 생성자 주입을 한다고 하는데 이를 좀 더 살펴보자.


@Autowired 어노테이션과 @RequiredArgsConstructor 어노테이션을 사용한 생성자 주입의 차이점에 대해 알아보자.

  1. @Autowired 어노테이션:

    • @Autowired 어노테이션은 스프링 프레임워크에서 사용되며, 주로 필드, 메서드, 생성자 등에 적용된다.

    • @Autowired를 사용하면 해당 필드 또는 메서드에 대한 의존성을 스프링이 자동으로 주입한다.

    • 주로 의존성 주입을 필드 레벨 또는 메서드 레벨에서 수행한다.

      public class ExampleClass {
          @Autowired
          private SomeDependency someDependency;
      
          // ...
      }
  2. @RequiredArgsConstructorprivate final:

    • Lombok 라이브러리의 @RequiredArgsConstructor 어노테이션은 클래스의 필드를 기반으로 생성자를 생성해주는 역할을 한다.

    • private final 필드를 가지는 클래스에서 이 어노테이션을 사용하면 해당 필드를 사용한 생성자가 자동으로 생성된다.

    • 이 생성자는 초기화되지 않은 final 필드에 값을 할당하는 역할을 한다.

      import lombok.RequiredArgsConstructor;
      
      @RequiredArgsConstructor
      public class ExampleClass {
          private final SomeDependency someDependency;
      
          // ...
      }
    • 위 코드에서 @RequiredArgsConstructor를 사용하면 Lombok은 someDependency 필드를 사용한 생성자를 생성해준다.

    • 이 생성자는 런타임에 someDependency에 대한 값을 전달받아 초기화한다.

    • 주로 불변성을 강조하고자 할 때 final 필드와 함께 사용된다.

차이점:

  • @Autowired는 스프링의 의존성 주입을 처리하는 데 사용되는 어노테이션으로, 주로 스프링 빈 간의 의존성을 자동으로 주입하는 데에 활용된다.
  • @RequiredArgsConstructorprivate final은 Lombok을 사용하여 생성자를 자동으로 생성하는 데에 활용된다. 이를 통해 불필요한 코드를 줄이고 불변성을 유지하는 데 도움이 된다.
profile
코드 위에서 춤추고 싶어요

0개의 댓글