본문 바로가기
Spring/Spring-detail

Ioc(Inversion of Control) 제어의 역전이란?

by YoonJong 2022. 10. 26.
728x90

IoC ( Inversion of Control ) 제어의 역전 의 의미

객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다라는 의미이다.

이전에는 개발자가 직접 객체를 생성하고 관리해 프로그램의 제어의 흐름을 스스로 관리했다.

 

IoC 는 왜 필요할까?

결합도를 낮춰서, 변경에 유연한 코드를 작성할 수 있는 구조를 만들 수 있다.

 

스프링에서도 IoC 기능을 할 수 있는 IoC 컨테이너(=스프링컨테이너, DI컨테이너, ApplicationContext)를 제공한다.

IoC 컨테이너에서 관리되는 객체를 Bean 이라고 부른다. 

객체의 생성을 책임지며, 의존성을 관리한다.

개발자들이 객체를 직접 생성할 수 있지만, 컨테이너에게 역할을 위임한다.

 

 

스프링에서의 객체 생성 및 실행되는 순서는 아래와 같다.

1. 개발자가 객체를 생성한다.

2. 의존성 객체를 주입한다. ( Bean 으로 등록한 객체를 의미하며, 이는 Ioc컨테이너에서 관리한다 )

 * Baen은 싱글톤으로 관리된다

3. 의존성 객체 메서드를 호출한다.

 

IoC 컨테이너의 종류는 BeanFactory 와 ApplicationContext 로 나뉜다.

김영한님의 인프런 스프링 강의

BeanFactory 는 빈을 관리 , 조회하는 기능을 가지며, 인터페이스이다.

ApplicationContext 는 BeanFactory 를 구현하고 있어, 추가적인 기능이 더 많아 실질적으로 사용된다.

 1. 메시지 소스를 활용한 국제화기능

 2. 환경변수 - 로컬 , 개발 , 운영 등을 구분해서 처리

 3. 애플리케이션 이벤트관리

 4. 리소스 조회


DIDependency Injection 으로, 객체를 외부로부터 주입해주는 작업이다.

클래스간의 의존관계를 빈 설정 정보 바탕으로 컨테이너가 자동으로 연결해준다.

빈 설정을 하는 방법은 아래와 같다.

https://josteady.tistory.com/742

 

@Bean 과 @Component 비교

스프링 MVC 에서 사용하는 @Controller , @Service , @Repository 등 빈으로 등록하는 방법을 계속 써왔으나, 스프링시큐리티를 공부하면서 @Configuration 과 @Bean , @Component를 사용하면서 어떤 상황에 구분..

josteady.tistory.com

DI 를 주입하는 방법은 아래와 같다.

https://josteady.tistory.com/726

 

DI 의존성 주입 방법에 대해 알아보자

DI ( Dependency Injection ) : 의존성 주입 강하게 결합된 클래스들을 분리한다 -> 관심사의 분리 * 강한결합 : A 클래스 내부에서 B 라는 객체를 직접 생성하고 있을 때, B를 C로 바꾸고 싶다면, A 클래스

josteady.tistory.com

 

 

참고

https://choicode.tistory.com/31

 

 

 

 

728x90

댓글