반응형
Inversion of Control(제어의 역전)

- 주도권이 스프링에게 있다.
- 클래스: 설계도
- Object: 실체화가 가능한 것
               ex) 롤 챔프 누누(Class)는 게임할때 튀어나오니까 실체화가 가능하다 => Object다.
                     하지만 캐릭터(abstract Class)는 추상적인 의미다. (애쉬가 될수도 있고, 케이틀린이 될수도 있다.)
                     캐릭터는 추상적인 것이기때문에 실체화가 불가능하다, 게임에서 등장 불가능 => Object가 아니다.
- Instance: 실체화가 된것 (누누가 전장에서 돌아다니면, 게임속에서 존재하는것)

주도권이 스프링에게 있다는것은
개발자가 직접 Object를 new해서 heap 공간에 올리게 되면 해당 레퍼런스의 주소를 각각의 메소드가 관리하게된다.
예를 들어보자

Public void make(){
	User user = new User(); 
}

예컨데 user의 주소는 make() 메소드가 실행되는 순간에 메모리에 뜬다.
그래서 다른 메소드에서 user를 사용하고 싶다면 아래와 같이 또 새로 new해야할 텐데 그럼 
heap메모리에 또다른  주소가 생기게 된다. 
또한 make메소드에서의 user와 make2 메소드에서의user는 다른 존재다.(주소가 다르기 때문) 

Public void make2(){
	User user = new User(); 
}

이렇게 되면 다른 매소드에서 같은 user를 공유를 하기 힘들어진다. 

스프링는 수많은 Object들을 스캔해서 그 객체들을 heap 메모리 공간에 올려준다.
이것을 IOC라고한다. 

DI란

스프링이 IOC를 통해 Object들을 메모리에 띄웠기 때문에, 스프링이 관리하기 때문에  
스프링이 관리하는 객체들을 개발자가 원하는 모든곳(메소드)에서 가져와 쓸 수 있는것을 말한다. 
make 메소드의 user나, make2 메소드에서의 user는 같은 user다.
한마디로 싱글톤으로 관리된다. => 스프링이 오브젝트를 스캔하면 user가 딱 한번 힙메모리에 뜨고 그것을 다양한 곳에서 공유해서 쓴다. 

 

한줄 요약

Ioc: 제어의역전, 스프링이 싱글톤으로 빈을 관리하는것
Di: 인스턴스 생성시 IOC 컨터에너에서 싱글톤으로 관리하는 빈들을 변수에 의존성 주입

+ Recent posts