DI와 IoC가 무엇일까

재우·2023년 10월 30일
0
post-custom-banner

프로그래머스 스진초 과제를 진행하면서 작성한 내용입니다.



DI (Dependency Injection) - 의존성 주입

  • DI (의존성 주입)란 스프링은 객체의 의존성을 의존성 주입을 통해 관리한다.

  • 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입시켜주는 방식이다.

  • DI (의존성 주입)를 통해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

의존성 주입 방법에는 생성자주입 (Constructor Injection), 수정자 주입 (Setter Injection), 필드 주입 (Field Injection) 이 있다.


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

  • "제어의 역전" 이라는 의미로, 객체나 메서드의 호출을 개발자가 결정하는 것이 아닌, 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다.
  • 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성 할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.




IoC가 적용된 대표적인 기술은 프레임워크이다. 참고로, 프레임워크는 내가 작성한 코드를 제어하고 대신 실행한다. 만약 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 그건 라이브러리이다.


스프링 프레임워크를 예를 들면 Controller, Service 같은 객체들의 동작을 우리가 직접 구현하기는 하지만, 해당 객체들이 어느 시점에 호출될 지는 개발자가 제어하지 않는다. 스프링 프레임워크가 요구하는대로 객체를 생성하면, 프레임워크가 해당 객체들을 가져다 생성하고 호출하고 소멸시킨다.


이러한 과정을 개발자의 제어권이 역전되었다고 볼 수 있다.


IoC를 통해 프레임워크와 라이브러리의 차이점을 알 수 있는데 위에 작성했듯이 라이브러리는 제어를 직접 담당한다.
개발자가 필요한 시점에 라이브러리에서 제공되는 기능들을 필요한 시점에 가져다 사용하여 직접 제어하기 때문이다.


IoC를 적용하면, 객체를 클래스 내부에서 직접 생성하여 사용하지 않고 미리 생성해놓은 객체를 주입받아 사용하면 된다. => DI
(프로그램의 제어흐름을 직접 제어하는 것이 아니라 외부에서 관리)

post-custom-banner

0개의 댓글