IoC(Inversion Of Control) 제어의 역전

개발의 제어권을 스프링 컨테이너가 가지고 개발자 대신 Bean들을 제어해주는 행위

스프링이 개발자 대신 객체를 제어하기 위해서는 객체들이 Bean으로 등록되어있어야 한다.
Annotation으로 간단하게 등록할 수 있다.

스프링 MVC에서는 @Controller, @Service, @Repository 등으로 Bean 등록을 할 수 있다.

configuration 관련 객체들은 @Bean, @Component 으로 스프링 컨테이너에 객체를 빈으로 등록할 수 있다.




@Bean, @Component의 차이

@Bean은 method 레벨에서 선언하며, 반환되는 객체를 개발자가 수동으로 Bean 등록하는 Annotation이다.

@Component는 class 레벨에서 선언함으로써 스프링이 런타임시 컴포넌트 스캔을 하여 자동으로 Bean을 감지하고 등록하는 Annotation이다.




DI(Dependency Injection) 의존성 주입

어떤 객체에 스프링 컨테이너가 외부에서 선언한 다른 객체와의 의존성을 주입하는 행위

스프링에서 의존성 주입을 하기 위해선 스프링 컨테이너가 객체를 제어할 수 있도록 객체가 Bean으로 등록되어있어야 한다.

다른 말로, 의존성 주입을 위해선 제어의 역전이 선행되어야한다.


요약하자면 IoC 제어의 역전을 통해 각 객체들을 스프링 컨테이너가 제어하며
컨테이너가 제어하는 객체들 간의 의존성을 스프링 컨테이너가 주입시켜(DI) 연관관계를 만들어준다.



제어의 역전의존성 주입을 통해 객체 간 의존 관계를 쉽게 변경할 수 있어 코드의 재사용성유지보수 효율을 높일 수 있고 좀 더 완벽한 객체지향설계를 할 수 있다.

profile
백엔드 엔지니어 박희중입니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN