본문 바로가기

Spring

DI(의존성 주입) 와 IoC(제어의 역행)

스프링에서의 컨테이너

스프링에서 말하는 컨테이너란 코드의 처리과정을 수행하는 존재이며,  프로그래머가 작성한 코드를 참조하여 스스로 객체를 생성하거나 소멸을 관리한다.

 

DI(Dependency Injection, 의존성 주입)

먼저 DI라는 말을 분석해보자.

 

Dependency

의존성 이라는 뜻이다. -> ?

하나의 객체가 동작하기 위해서는 다른 객체가 필요하다는 뜻이다. A클래스 안에서 B클래스를 사용하게 되는 경우 의존관계가 생김. 

 

Injection

주입 이라는 뜻이다  -> 그래서 뭘 주입한다는거야?

-> Spring에서 객체를 외부에서 밀어 넣는다는 말이다. 

 

그렇다면 Spring에서 Dependency Injection 이라함은 의존하고있는 필요한 객체를 외부에서 주입한다 라는 뜻이되겠다.

그런데, 의존성 주입은 의존성을 분리시켜서 사용한다고 한다. 의존성을 분리시켜기 위해선 아래 원칙으로 분리시킨다.

 

의존관계 역전원칙 - 의존을 끊다

 -> 고수준의 모듈(상위 모듈)은 저수준의 모듈(하위 모듈)에 의존해서는 안된다, 저수준의 모듈이 고수준의 모듈의 추상타입에 의존해야한다.

 

고수준의 모듈: 구현 클래스가 되는 부분, 유저에게 노출되는 부분 

저수준의 모듈: 비즈니스 로직, 서비스 등 

예시가 고수준 모듈은 자동차.  저수준 모듈은 엔진,타이어 등? 이라고 구분한다고한다. (이 부분에 대해서는 좀더 자세히 공부가 필요할것같다)

아래 링크에 자세하게 설명되어있다.

https://steady-coding.tistory.com/388

 

 

DI가 필요한 이유?? 

IoC 흐름을 따르기 위해서.  -> 이게 무슨말인고? 그럼 IoC에 대해서 알아보자..

 

 

IoC(Inversion of Control, 제어역행) 

위에 설명한것 처럼 객체(Object)의 생성과 소멸등 전반적인 관리를 프레임워크의 컨테이너가 대신 해주는 것을 의미한다. 위 객체(Object) 를 Spring에서는 Bean 이라고 한다.

 

 

 

 

 

 

 

 

정리하기 어렵군..