본문 바로가기
간단 정리/Spring

[Spring] 내가 보려고 만든 IoC와 DI 간단 정리

by kim-dev 2024. 2. 21.
반응형

IoC와 DI는 스프링의 기본 중 기본이다.
사실상 스프링을 사용하는 이유가 IoC와 DI라고 봐도 무방할 정도...? 적어도 나는 그렇다 ㅋㅋ 이렇게 편리하게 자바를 쓸 줄이야

 

IoC (Inversion Of Controll, 제어의 역전)
내가 만든 오브젝트들을 내가 관리하는 게 아니라 스프링에서 관리한다.


예를 들어 Stringbuilder sb = new StringBuilder() 라는 코드를 통해 Stringbuilder 객체를 만들었다고 하자,
이걸 @Bean 등의 어노테이션 등으로 스프링 Bean에 등록하면, 이제 이 객체는 스프링에서 관리하게 된다!
그래서 sb를 내가 사용해야 하는 상황이 닥칠 때마다, 나는 스프링에게 "sb 내놔!" 하고 요청할 수 있는 것...

 

 

 

그럼 스프링한테 어떻게 sb를 달라고 요청할 수 있을까?
이 때 사용하는 게 바로 DI!

DI (Dependency Injection, 의존성 주입)
스프링 Bean에서 관리하는 객체들을 주입하는 것.

 

나는 스프링 Bean에 등록된 sb를 사용하고 싶다...
그럴 땐 @Autowired 어노테이션을 사용해서 내가 선언한 Stringbuilder 객체에 이 sb를 주입받을 수 있다!

@Autowired
Stringbuilder sb;

뭐 대충 이런 식으로...
그런데 @Autowired를 활용한 DI는 클래스의 종류를 보고 주입하기 때문에, Stringbuilder 클래스 객체가 Bean에 등록되어있지 않다면 예외를 발생시킨다!

 

 

사실 이건 다 아는 건데... 왜 작성했냐면...
개념 자체는 아는데 IoC와 DI 두 단어가 헷갈려서... 나만 이런가...? ㅋㅋ
여튼 이 참에 확실히 잡고 가자.