[Spring] 프레임워크 IOC, DI

이영주·2021년 3월 28일
0
  1. 컨테이너란 무엇일까? 컨테이너와 IOC(Inversion of Control, 제어의 역전)

컨테이너는 인스턴스들의 생명주기를 관리하며 생성된 인스턴스들에게 추가적인 기능을 제공한다.
작성한 코드의 처리과정을 위임받은 독립적인 존재라고 생각하면 된다.
컨테이너는 적설한 설정만 되어있다면 누구의 도움 없이도 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성, 소멸을 컨트롤 해준다.


🐸 스프링 컨테이너의 두 종류

  1. 빈 팩토리 (BeanFactory)
  • Bean팩토리는 빈을 생성하고 분배하는 책임을 지는 클래스이다.
  1. 어플리케이션 컨텍스트 (ApplicationContext)
  • 빈팩토리와 유사한 기능을 제공하지만 좀 더 많은 기능을 제공한다.

IoC란 Inversion of Control의 약어이다. inversion은 사전적 의미로는 '도치, 역전'이다. 보통 IoC를 제어의 역전, 의존적 주입이라 번역한다. 즉 외부에서 제어를 한다는 것이다. IOC는 컨테이너다.

기존에 자바 기반에서 어플리케이션을 개발할 때 자바 객체를 생성하고 서로간의 의존관계를 연결시키는 작업에 대한 제어권은 보통 개발되는 어플리케이션에게 있었다. 그러나 Servlet, EJB등을 사용하는 경우 container에게 제어권이 넘어가 객체의 생명주기를 전담하게 된다. 이처럼 IOC에서 얘기하는 제어권의 역전이란 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는것을 의미한다.

  1. DI 란? (Dependency Injection, 의존성 주입)

어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라 주입 받아 사용하는 방법이다. 객체를 사용하기 위해서는 new 생성자를 이용하고 getter/setter 기능을 써야만 했다. 서로 참조하고 있는 정도가 심할 수록 의존성이 높다고 표현한다. 낮은 결합도와 높은 캡슐화로 대변되는 OOP에서 높은 의존성은 매우 지양된다. 이런 객체간의 의존성을 낮추기 위해 Spring IOC가 사용된다고 했다.

🐸 의존성 주입의 장점

-재사용성을 높여준다.
-테스트에 용이하다.
-코드를 단순화 시켜준다.
-종속성이 감소하여 변경에 민감하지 않다.
-결합도를 낮추면서 유연성과 확장성을 향상시킨다.
-객체간의 의존관계를 설정할 수 있다.


  1. 생성자를 이용한 의존 객체 주입
  2. setter를 이용한 의존 객체 주입
  3. list 타입 의존 객체 주입
  4. map 타입 의존 객체 주입

참고
https://aonee.tistory.com/32
https://devlog-wjdrbs96.tistory.com/165?category=882236
https://limmmee.tistory.com/14?category=654011


0개의 댓글