Spring의 IoC(Inversion of Control)

Yejun Jang·2022년 2월 13일
0

[Spring] Spring의 IoC(Inversion of Control)
일반적인 의존성에 대한 제어권 : 개발자가 직접 의존성을 만든다.

의존성은 쉽게 말해 어떤 객체가 사용해야 할 객체라고 할 수 있고, 이것을 직접 new 등을 써서 만들어 쓰면 의존성을 자기가 직접 만들어 쓴다고 할 수 있습니다.

public class OwnerController {
private OwnerRepository ownerRepository = new OwnerRepository();
}

Inversion of Control - 제어권 역전 : 직접적으로 의존성을 만들지 않고, 외부에서 의존성을 가져오는 경우.

밖에서 나에게 의존성을 주입해주는 것을 DI(Dependency Injection) 라고 합니다. 따라서 DI는 IoC의 일종이라고 생각하시면 됩니다.

public OwnerController(OwnerRepository clinicService, VisitRepository visits) {
this.owners = clinicService;
this.visits = visits;
}

Bean과 스프링 IoC 컨테이너
스프링 IoC 컨테이너가 관리하는 객체들을 Bean 이라고 부릅니다. 스프링은 이러한 Bean들의 의존성을 관리하고, 객체를 만들어 주며, Bean으로 등록을 해 주고, 이렇게 만들어진 것들을 관리합니다. 개발자가 이 부분까지 신경쓰지 않아도, 프레임워크가 알아서 해 주는 것입니다.

Bean들을 담고 있는 스프링 IoC 컨테이너는 두 가지 중 하나를 사용합니다.

ApplicationContext 혹은 BeanFactory
ApplicationContext는 BeanFactory를 상속받으므로 둘 다 같은 일을 하는 것임

이러한 스프링에서의 의존성 주입은 반드시 Bean으로 등록된 객체들 끼리만 가능합니다. 스프링 IoC 컨테이너는 Bean으로 등록되지 않은 객체에는 의존성 주입을 해 주지 않습니다.

Bean으로 등록하는 방법 :

Component Scanning

  • @Component Annotation을 활용。
  • 개발자가 직접 작성한 Class를 Bean으로 등록해줄 때 사용。
  • 여러 인터페이스들을 라이프사이클 콜백이라고 부르는데, @Component 어노테이션이 붙어 있는 모든 클래스들을 찾아, 그 클래스의 인스턴스를 만들고, Bean으로 등록해 주는 복잡한 작업을 하는 어노테이션 처리기가 스프링에 있습니다.

@SpringBootApplication 어노테이션 : @ComponentScan 어노테이션이 붙어있음(어느 지점부터 컴포넌트를 찾아보라고 알려 주는 것)

@Controller 어노테이션 : @Component 어노테이션이 붙어있음(Bean으로 등록됐다는 이야기)

profile
자바 개발자

0개의 댓글