[Spring] IoC와 IoC컨테이너

컴투루·2023년 1월 20일
0

🌱 IoC (Inversion of Control)

제어의 역전으로 제어의 흐름을 바꾸는 것입니다.
기존에는 객체를 생성하고 의존성객체를 생성하여 의존성 객체 메소드를 호출하는 방식으로 객체가 만들어지고 실행되었다면 스프링에서는 객체 생성 후 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입하고 메소드를 호출하는 방식으로 이루어집니다.
객체의 생성부터 소멸까지의 생명주기를 컨테이너가 관리하기 때문에 제어권을 컨테이너가 소유합니다.

IoC의 주된 목적은 Application의 Dependency를 제거해서 느슨한 결합을 제공하는 것 컨테이너가 제어권을 소유함으로써 객체간 결합도를 줄이고 유연한 코드를 작성할 수 있습니다.
또한 모든 의존성 객체를 스프링이 실행될 때 전부 생성 후 필요한 곳에 주입해주므로 Bean은 싱글톤 패턴의 특징을 갖게 됩니다.

IoC의 분류

  • DL : 저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Look up하는 것
  • DI : 각 클래스 간의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
    - Setter Injection(수정자 주입)
    - Constructor Injection(생성자 주입)
    - Method Injection(필드 주입)
    ❓DI 더 알아보기

🌱 IoC 컨테이너

객체를 생성, 관리하고 책임지고 의존성을 관리해주는 컨테이너를 말합니다.

인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해줍니다.

객체관리 주체가 컨테이너가 되기 때문에 개발자는 비즈니스 로직에 집중 할 수 있습니다.

  • IoC컨테이너는 객체의 생성을 책임지고 의존성을 관리

  • POJO의 생성, 초기화, 서비스, 소멸에 대한 권한

  • 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡김

  • 개발자는 비즈니스 로직에 집중

  • 객체 생성 코드가 없어지므로 TDD가 용이

    	✅ POJO(Plain Old Java Object)
    	- 특정 자바 모델이나 기능, 프레임워크를 따르지 않는 Java Object를 지칭하며 특정 기술에 종속되어 동작하지 않는 자바 객체입니다.
    	- 특정 기술의 클래스를 상속받거나 직접 의존하게 되면 확장성이 떨어지게 되고 이는 객체지향 설계의 장점을 잃어버리는 것이므로 POJO의 사용은 지향해야합니다.

🌳 이렇게 기억하자!

IoC는 제어의 흐름을 바꾸는 것으로 객체의 생성부터 소멸까지의 생명주기를 컨테이너가 관리하게 함으로써 객체간 결합도를 줄이고 유연한 코드를 작성할 수 있도록 하는 것입니다.


📒참고

IoC 컨테이너 (Inversion of Control) 란?
스프링(Spring) DI와 IOC에 대해
[Spring] Spring IoC와 DI란?

profile
맘 먹으면 못할 게 없지

0개의 댓글