사용자의 제어권을 다른 주체(Spring Container)에게 넘기는 것
일반적으로 프레임워크 없이 개발할 때에는 객체의 생성, 설정, 초기화, 메소드 호출, 소멸(이하 객체의 생명주기)을 프로그래머가 직접 관리한다. 또한 전통적인 프로그래밍에서는 외부 라이브러리를 사용할 때, 개발자가 직접 외부 라이브러리를 호출하는 형태로 이용한다.
하지만, 프레임워크를 사용하면 객체의 생명주기를 모두 프레임워크에 위임할 수 있다. 즉, 외부 라이브러리(Spring)가 프로그래머가 작성한 코드를 호출하고 흐름을 제어한다.
개발자가 객체를 직접 생성하는 것이 아닌, 외부에서 생성하여 주입시키는 방식
각 객체간의 의존성을 스프링 컨테이너(Spring Container)가 자동적으로 연결해주는 것으로, 개발자가 빈(Bean) 설정파일에 의존관계가 필요한 정보를 추가하면 스프링 컨테이너가 자동으로 연결해준다.
의존성 주입은 IoC 원칙 하에 객체 간의 결합을 약하게 해주고 유지보수가 좋은 코드를 만들어 준다. 또한 개발자들이 객체를 생성하는 번거로움을 줄이고, 변수 사용과 개발에 더욱 집중할 수 있게 해준다.
Spring에서는 Bean을 등록하기 위해서 @Component Annotation을 사용한다. @Component Annotation이 등록되어 있는 경우에는 Spring이 Annotation을 확인하고 자체적으로 Bean으로 등록한다.
// Controller.java
// -- 일부 생략 --
@Component
public @interface Controller {
@AliasFor(annotation = Component.class)
String value() default "";
}
@Configuration과 @Bean Annotation을 이용하여 Bean을 등록할 수 있다. @Configuration을 이용하면 Spring Project에서의 Configuration 역할을 하는 Class를 지정할 수 있다. 해당 File 하위에 Bean으로 등록하고자 하는 Class에 @Bean Annotation을 사용해주면 간단하게 Bean을 등록할 수 있다.
// Hello.java
@Configuration
public class HelloConfiguration {
@Bean
public HelloController sampleController(){
return new SampleController;
}
}
좋은 글 감사합니다!