IOC(Inversion Of Control)

CREE·2023년 8월 31일
0

Spring

목록 보기
1/4
post-thumbnail

IOC 의 개념

Inversion Of Control

제어의 역전

IOC는 DI(Dependency Injection)으로 대표되는 스프링의 핵심 개념이다.

IOC가 적용된 경우 사용자는 객체를 직접 통제하지 않고 객체의 생성 주기를 관리하는 특별한 무언가에게 제어권을 넘기게 된다.

일반적인 의존성에 대한 제어권을 가진 코드와 IOC가 적용된 코드를 비교해보며 알아보자

class OwnerController(){
	private OwnerRepository repo = new OwnerRepository();
}

위의 코드가 일반적으로 의존성을 제어하는 코드이다.
필요할때 필요한 객체를 생성하여 사용한다.

다음은 IOC가 적용된 코드이다

class OwnerController(){
	private OwnerRepository repo;
    
    public OwnerContorller(OwnerRepository repo){
    	this.repo = repo;
    }
}

class OwnerControllerTest(){
	@Test
    public void create(){
    	OwnerRepository repo = new OwnerRepository();
        OwnerController controller = new OwnerController(repo);
    }
}

보이는 것과 같이 외부에서 해당 의존성을 생성해서 생성자로 넣어준다는것을 가정하고 (의존성 주입)
의존성을 관리하는 형태가 IOC이다


IOC 컨테이너

IOC 컨테이너는 빈을 만들어 엮어주며 제공해준다.

여기서 빈은 단순히 IOC 컨테이너에게 제어권을 넘겨준 자바 객체를 빈 이라고 한다.


빈을 등록하는 방법

@Bean , @Component ,@Configuration
등의 어노테이션을 활용하면 원하는 클래스를 빈으로 등록할수있다.

[@Bean, @Configuration ]

수동으로 스프링 컨테이너에 빈을 등록하는 방법으로
개발자가 직접 제어가 불가능한 라이브러리를 빈으로 등록할 때 불가피하게 사용한다.

유지보수성을 높이기 위해 애플리케이션 전범위적으로 사용되는 클래스나 다형성을 활용하여 여러 구현체를 빈으로 등록 할 때 사용한다.

1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 @Configuration을 명시해 주어야 싱글톤이 보장된다.

[ @Component ]

자동으로 스프링 컨테이너에 빈을 등록하는 방법이다.

스프링의 컴포넌트 스캔 기능이 @Component 어노테이션이 있는 클래스를 자동으로 찾아서 빈으로 등록한다.

대부분의 경우 @Component를 이용한 자동 등록 방식을 사용하는 것이 좋다.
@Component 하위 어노테이션으로 @Configuration, @Controller, @Service, @Repository 등이 있다.

다음 포스팅에서는 Bean을 알아보자

profile
이리저리 컴공과

0개의 댓글