IOC, DI란?

Jae Hun Lee·2023년 2월 14일
0

IOC, DI란?

IOC (Inversion of Control)

  • 객체의 생성, 상호작용, 생명주기 등 관리를 개발자가 아닌 스프링 컨테이너에게 맡긴다.
  • 개발자 -> 프레임워크로 제어의 객체관리 권한이 넘어갔음을 제어의 역전이라고 한다.
  • 스프링 컨테이너를 IOC컨테이너로 부르기도 한다.
  • 스프링에서는 이 IOC 개념을 통해 디펜던시 주입(DI: Dependency Injection)을 구현하여, 객체 간의 결합도를 낮추고 테스트하기 쉬운 프로그램을 만들 수 있다.

DI (Dependency Injection)

  • DI(Dependency Injection)은 IOC(Inversion of Control)의 한 종류로, 제어의 역전이라는 뜻에서 상속된 개념이다.
  • 의존성 주입(Dependency Injection, DI)은 소프트웨어 개발 과정에서 개발자가 직접 객체를 생성하지 않고, 프레임워크 또는 컨테이너에서 객체를 생성하고 개발자가 필요로 하는 곳에 주입하는 것을 말한다.
  • 의존성 주입을 통해 개발자는 객체의 생성, 관계 설정 등의 작업을 프레임워크에 위임할 수 있어서, 코드의 가독성과 테스트 용이성이 높아지며, 개발 속도도 빠르게 증가한다.
Public class A{
	private B b ;
    
    public A(){
    	b = new B();
    }   
}

A 객체가 B에가 의존하고 있다 라는걸 개발자가 직접 설정해주었다

Public class A{
	@Autowired
    private B b;

@Autowired로 객체를 주입 받았다
B라는 객체가 스프링 컨테이너에게 관리되는 Bean이라면 @Autowired를 통해 객체를 주입받게 된다
스프링 컨테이너가 직접(제어) 객체를 생성하여 해당 객체에 주입시켜주었다

DI의 장점

  • 유연한 구조: 객체는 자신이 종속적으로 가지는 다른 객체들을 외부에서 제공받아 사용하기 때문에 구조가 유연해집니다.
  • 테스트 가능성 향상: 객체 간의 결합도가 낮아지기 때문에 각 객체를 따로 테스트하기 쉽습니다.
  • 코드 간결성: 각 객체들이 서로의 의존성을 가지지 않기 때문에 코드가 간결해집니다.
  • 개발 생산성 향상: 각 객체들이 독립적으로 개발될 수 있기 때문에 개발 생산성이 향상됩니다.
  • 구조 변경 용이성: 종속적인 객체를 다른 객체로 변경하기 쉽습니다.
profile
기록을 남깁니다

0개의 댓글