본문으로 바로가기
반응형

 

 

 

 

웹 프레임워크(Spring, Django 등..)를 사용하다보면

IoC, DI 라는 용어가 자주 등장한다.

 

이것들을 어떤 뜻을 가진 용어일까?

 

 

 

Spring 기준으로 이 용어들을 설명하고자 한다.

 

 

 

 

 


● IoC(제어의 역전)  

 

 

 

 

IoC란 Inversion of Control의 약어로,

 

 

프로그래머가 작성한 프로그램이 

재사용 라이브러리의 흐름 제어를 받게 되는 소프트웨어 디자인 패턴을 말한다.

 

 

 

기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했다.

한마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다.

 

반면에 프레임워크가 등장하면서 구현 객체는 자신의 로직을 실행하는 역할만 담당한다.

 

프로그램의 제어 흐름은 이제 프레임워크가 가져간다.

프로그램에 대한 제어 흐름에 대한 권한은 모두 프레임워크가 가지고 있다.

 

 

 

 

 

이렇듯 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을

제어의 역전(IoC)이라 한다

 

 

 

 

 

 

 

 


● 프레임워크 vs 라이브러리  

 

 

 

프레임워크가 내가 작성한 코드를 제어하고, 대신 실행하면 그것은 프레임워크가 맞다. (JUnit)

 

반면에 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 그것은 라이브러리다.

 

 

 

 

 

 

 

 

 


● DI(의존성 주입)  

 

 

 

DI란 Dependency Injection의 약어로,

하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. 

 

 

"의존성"은 예를 들어 서비스로 사용할 수 있는 객체이다. 

 

 

클라이언트가 어떤 서비스를 사용할 것인지 지정하는 대신, 

클라이언트에게 무슨 서비스를 사용할 것인지를 말해주는 것이다.

 

 

 

 

이전 포스팅에서, 클라이언트(즉, service)가 구현체를 직접 설정하지 않고 

인터페이스만 의존하게끔 코드를 작성하였다.

그리고 사용할 구현체는 AppConfig라는 별도의 코드를 만들어

클라이언트와 구현체의 의존관계를 연결해주도록 하였다.

https://healthdevelop.tistory.com/entry/spring29

 

[Spring] Spring 고객-주문 시스템 구현 | AppConfig | 관심사의 분리

좋은 객체 지향 프로그래밍을 구현하기 위해선 SOLID 원칙을 따라야 한다. https://healthdevelop.tistory.com/entry/spring28 [Spring] SOLID 원칙 | 객체 지향 설계의 5가지 원칙 좋은 객체 지향 설계를 하기 위..

healthdevelop.tistory.com

 

 

 

AppConfig를 통해 클라이언트는 어떤 구현체가 올지 모른다.

그 연결은 AppConfig가 해주기 때문이다.

 

 

 

 

이처럼

애플리케이션 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서

클라이언트와 서버의 실제 의존관계가 연결 되는 것을 의존관계 주입(DI)이라 한다.

 

 

 

 

 

 

 

 


● 컨테이너(Container)  

 

 

 

 

AppConfig 처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것

IoC 컨테이너 또는 DI 컨테이너라 한다.

 

 

의존관계 주입에 초점을 맞추어 최근에는 주로 DI 컨테이너라 한다.

 

또는 어샘블러, 오브젝트 팩토리 등으로 불리기도 한다.

 

 

 

 

 

반응형