출처: [인프런] 스프링부트 개념정리(이론) - 강의 정리 1
스프링부트 핵심정리 1강 - 스프링의 핵심은 무엇인가요?
제어의 역전: 주도권이 스프링에 있음
ex)
Class: 설계도
Object: 실체화가 가능한 것
Instance: 실체화 된 것
가구: abstract class (추상적)
의자: object (실체화 가능)
침대: object (실체화 가능)
실제로 만들어진 의자: instance
실제로 만들어진 침대: instance
public void make() {
의자 s = new 의자();
}
new생성자를 통해 object를 heap이라는 메모리 공간에 올림 = 실체화
s가 그 메모리 공간을 참조함(가리킴)
s는 make() 메서드가 실행되는 순간에만 힙 메모리에 떠 있음
public void use() {
의자 s = new 의자();
}
위처럼 다른 메서드 use()에서 s를 만들면?
-> 별개의 주소 값을 가지게 됨. 즉, 이전에 만든 s를 공유하지 못함
(넘겨 받아야 하는데 로직 짜기가 힘들다는 문제)
-> 해결하기 위해 스프링 등장
=> 수많은 object를 스프링이 한 번에 스캔해서 읽고 객체들을 직접 heap 메모리에 띄워줌
new를 사용해서 직접 관리할 필요 없음make()에서 사용하는 의자 s와 use()에서 사용하는 의자 s는 같은 의자