본문 바로가기
IT/spring

스프링 생성자 주입(Constructor Injection)

by 뉴코딩맨 2023. 6. 14.
스프링 프레임워크는 의존성 주입(Dependency Injection)을 통해 객체 간의 관계를 설정하고 관리합니다. 생성자 주입은 스프링에서 객체를 생성하는 시점에 필요한 의존성을 주입하는 방식입니다. 스프링의 생성자 주입에 대해 자세히 알아보고, 예시를 통해 설명하겠습니다.

 

 

생성자 주입의 장점

생성자 주입은 다음과 같은 장점을 가지고 있습니다.
 
명확한 의존성 표현: 생성자 주입을 사용하면 클래스의 의존성을 생성자 매개변수로 명확하게 표현할 수 있습니다. 이는 코드의 가독성과 유지보수성을 높여줍니다.
 
불변성: 생성자 주입을 통해 의존성을 주입하면 한 번 주입된 의존성은 변경되지 않습니다. 이는 객체의 불변성과 안정성을 보장하며, 오류를 줄이고 예측 가능한 코드를 작성하는 데 도움이 됩니다.
 
단위 테스트 용이성: 생성자 주입을 사용하면 의존성을 외부에서 주입할 수 있기 때문에 단위 테스트를 수행할 때 의존성을 쉽게 대체할 수 있습니다.

 

 

생성자 주입 예시

다음은 생성자 주입을 사용하여 의존성을 주입하는 예시입니다.
 
public class MyService {
    private MyRepository myRepository;

    public MyService(MyRepository myRepository) {
    	this.myRepository = myRepository;
    }

    // ...
}
 
위 예시에서 MyService 클래스는 MyRepository 의존성을 생성자 매개변수로 받습니다. 이렇게 주입된 MyRepository 객체를 사용하여 비즈니스 로직을 구현할 수 있습니다. 스프링은 해당 클래스의 인스턴스를 생성할 때 MyRepository의 구현체를 주입하여 MyService 객체를 생성합니다.
 
 

스프링에서의 생성자 주입

스프링 프레임워크에서 생성자 주입을 사용하기 위해서는 다음과 같은 설정이 필요합니다.
 
@Autowired 어노테이션: 생성자에 @Autowired 어노테이션을 추가하여 스프링이 해당 생성자를 통해 의존성을 주입하도록 지정합니다.
 
의존성 설정: 스프링 설정 파일(XML 또는 Java Config)에서 의존성을 설정하고, 스프링 컨테이너가 해당 의존성을 인스턴스화하고 주입합니다.
 
@Configuration
public class AppConfig {
    @Bean
    public MyService myService(MyRepository myRepository) {
    	return new MyService(myRepository);
    }

    @Bean
    public MyRepository myRepository() {
    	return new MyRepositoryImpl();
    }
}
 
위의 예시에서 AppConfig 클래스는 MyService와 MyRepository의 빈을 정의하고 의존성을 설정합니다. 이렇게 스프링 컨테이너는 MyService를 생성할 때 MyRepository의 인스턴스를 주입하여 생성합니다.
 
 

결론

스프링의 생성자 주입은 객체 간의 의존성을 명확하게 표현하고, 불변성과 안정성을 보장하며, 단위 테스트를 용이하게 만들어줍니다. 생성자 주입은 스프링 프레임워크에서 다양한 설정 방법을 통해 사용할 수 있으며, 의존성 주입을 통해 유연하고 확장 가능한 애플리케이션을 개발할 수 있습니다.
 

댓글