[Spring] IOC, DI란 무엇인가?

김예원·2022년 8월 21일
0

IOC(Inversion of control)란?

Ioc란 해석하면 제어의 역전이라는 뜻의 프로그래밍 모델입니다.
구체적인 설명을 듣기 전까지 '제어의 역전'이라는 말만 들어서는 도통 감을 잡기가 어렵습니다.

코드는 개발자가 작성하는 것 입니다.
개발자가 생성자를 통해 객체를 생성합니다.

이 객체 생성을 스프링에서 대신 해주는 것을 IoC 프로그래밍 모델이라고 합니다.
개발자가 직접 객체를 관리하지 않고 스프링에서 직접 객체를 생성하여 해당 객체에 주입 시켜준 것입니다.

제어를 개발자가 하지 않고 IoC에 위임했다고 해서 제어의 역전이라고 하는 것 입니다.

이 때 IoC가 생성한 객체를 Bean이라고 부릅니다.

Bean(빈) 이란?

스프링에서 IoC(정확히는 DI)가 생성한 객체를 Bean이라고 하는데 생성된 빈은 IoC 컨테이너에 저장됩니다.
lombok 라이브러리에서 제공하는 어노테이션을 통해 호출해서 사용할 수 있습니다.

@Bean, @Configuration, @Component 등의 어노테이션을 통해 수동으로 빈을 등록할 수도 있는데 빈을 등록해서 사용할 만한 프로젝트를 해보지 못했기 때문에 기회가 있으면 자세히 다뤄보도록 하겠습니다.

DI(Dependency Iniection)란?

'의존 관계 주입'이라는 뜻입니다.
Bean을 설명할 때 'IoC(정확히는 DI)가 생성한 객체' 라고 표현했습니다.

  • 토비 스프링 중
    IoC가 너무 폭넓게 정의되고 사용되는 용어로 스프링이 가진 장점을 특정하여 명확하게 얘기하기 어렵다.
    그래서 IoC 방식의 핵심인 "의존 관계 주입(DI)" 이라는 의도가 명확하게 드러나는 이름을 사용하게 된 것 이다.

IoC의 개념만으로는 스프링의 특징을 얘기하기 어렵기 때문에 나온 개념이라는 것을 알 수 있습니다.
IoC가 개발자가 아닌 제 3자에게 객체의 흐름 등을 위임하는 프로그래밍 모델이라면, DI는 스프링을 통해 객체를 생성한다는 구체적인 의미를 가진 것 입니다.


스프링에 IoC와 DI의 존재로 인해

  • 모듈화에 위반을 방지함
    모델의 특성상 개발자가 삭제, 변경을 쉽게 해서는 안되기 때문에 모듈화에 위반을 방지한다.

  • 유지보수의 편리성
    만약 개발자가 직접 객체를 수정, 삭제 해야한다면 유지보수 하는데 아주 큰 비용과 시간이 들 것이다. 이로써 유지보수를 훨씬 수월하게 해준다.

  • 단일 책임 원칙을 유도함
    IoC, DI, Bean등의 개념을 사용하지 않는다면 개발자는 코드가 길어짐을 느낄 것이다. 코드가 길어지다 보면 직관적이지 못해 단일 책임 원칙을 위반하는 실수를 하게 될 수도 있다.


스프링 입문자로써 당장 이해되는 만큼만 정리해봤습니다.
스프링 박사되는 그날까지 우리 모두 꾸준히 화이팅..!


reference

https://isoomni.tistory.com/entry/TISPRING-IOC-DI

https://biggwang.github.io/2019/08/31/Spring/IoC

profile
기억력이 짧은 나를 위한 기록 🍀

0개의 댓글