1.DI란?

하나의 객체에서 다른 객체가 필요할 때, 객체를 직접 생성하지 않고, 이미 생성되어 있는 객체를 가져오는 작업을 "DI (Dependency Injection)" 혹은  "의존성 주입"이라 한다.

 

 

2. IOC란?

제어의 역전. 객체를 생성하는 과정을 개발자가 아닌 스프링 프레임워크가 대신하고 관리까지 해준다.

주도권이 스프링에게 있다

  • 빈 (Bean): 스프링이 생성해주는 객체
  • 스프링 IoC 컨테이너: 빈을 모아둔 통

 

스프링 프레임워크가 IoC 컨테이너에 Bean 객체를 생성하여 보관하고 있으면 

개발자는 그냥 가져다가 쓰기만(DI) 하면 된다. 

 

이를 통해 모듈간 결합도가 낮아지고 유연성이 높아진다.

 

 

@Controller, @RestController, @Service, @Repository 와 같이 앞에 '@' 를 붙이는 것을 어노테이션 (Annotation) 이라고 부르고, 모두 스프링의 빈으로 등록되지만, 좀 더 특별한 역할을 맡은 빈들입니다.

 

===========================================================================================

개발자가 

Chair c1 = new Chair(); (실체화) 하여 heap 메모리에 올리면 그곳의 주소는 c1이 된다

이 실체화 된 의자 c1은 호출엔 메소드에서 관리한다. 

-> 이때 다른곳에서 c1을 사용하기가 어렵다 

-> 해서 스프링이 클레스를 스캔해서 object를 heap 메모리(IoC 컨테이너)에 올려준다. 이를 IoC라 한다

 

이를 내가 원하는 곳에서 사용할 수 있다. A, B, C 클레스에서 heap 메모리에 있는 D object를 사용한다고(DI) 하면 

A, B, C클레스에서 호출한 D object는 모두 동일한 object이다(싱글톤)

+ Recent posts