@Autowired, @RequiredArgsConstructor

Q. Spring 프레임워크에서 사용되는 @Autowired 애노테이션은 무엇이며, 어떤 상황에서 사용되나요?

@Autowired 애노테이션은 Spring 프레임워크에서 의존성 주입(Dependency Injection)을 자동으로 수행하는 데 사용됩니다. 이를 통해, 개발자가 별도로 객체를 생성하거나 초기화할 필요 없이, Spring이 자동으로 필요한 빈(Bean)을 찾아 주입합니다. @Autowired는 생성자, 세터 메서드, 필드에 적용될 수 있으며, 주로 다른 빈의 참조를 자동으로 주입할 때 사용됩니다.


Q. 그렇다면 스프링에서 빈(Bean)은 무엇인가요?

스프링 빈(Spring Bean)은 스프링 프레임워크에서 관리되는 객체를 의미합니다. 스프링 컨테이너에 의해 생성되고, 관리되며, 필요할 때마다 주입되는 자바 객체입니다. 빈은 스프링의 IoC(Inversion of Control, 제어의 역전) 컨테이너에 의해 생명주기가 관리되며, 애플리에션 내에서 다양한 기능을 수행합니다. 스프링 빈은 기본적으로 싱글톤 패턴으로 스프링 컨테이너 내에서 동일한 타입의 빈은 하나만 생성됩니다. 또한 빈은 다른 빈들 간의 의존성을 관리하여 객체 간의 결합도를 낮추고, 모듈성을 높일 수 있습니다.


Q. 생성자에 @Autowired를 사용하는 것과 @RequiredArgsConstructor를 사용하는 것의 차이점은 무엇인가요?

@Autowired를 생성자에 사용하면, Spring이 해당 생성자에 필요한 의존성을 자동으로 주입합니다. 이와 유사하게, @RequiredArgsConstructor는 Lombok 라이브러리에서 제공하는 애노테이션으로, 클래스 내 모든 final 필드와 @NonNull이 적용된 필드에 대해 생성자를 자동으로 생성합니다. 이 두 가지의 주요 차이점은 @RequiredArgsConstructor는 Lombok을 사용하여 코드의 간결함을 유지하고, 불필요한 보일러플레이트 코드를 줄여준다는 것입니다. @Autowired는 Spring에서 제공하며, Lombok을 사용하지 않을 때 의존성 주입을 위해 활용됩니다.


Q.보일러플레이트 코드가 뭔가요?

보일러플레이트 코드(Boilerplate Code)는 소프트웨어 개발에서 반복적으로 작성해야 하는, 하지만 비즈니스 로직과 직접적인 관련이 없는 코드들을 의미합니다. 예를 들어, 객체 지향 프로그래밍에서 객체를 생성하고 초기화하는 과정에서 매번 생성자, getter, setter 메서드를 작성해야 하는 경우가 있습니다. 이러한 메서드는 대부분 비슷한 형식을 가지고 있고, 코드의 핵심적인 비즈니스 로직과는 직접적인 관련이 없지만 반드시 작성되어야 하는 경우가 많습니다.

Last updated