IoC(Inversion of Control)는 SIngleton 패턴과 레퍼런스 변수 관리를 위해 Spring이 사용하는 구조이다.
클래스 A의 메서드 내에서 new 연산자로 생성한 클래스B는 지역변수가 관리하며, 메서드가 호출되고 스택에올라오면서 heap에 생성된다.
이후 메소드가 종료될때 메모리에서 사라지며, new 연산자로 생성된 클래스 B는 다른 위치에서 더이상 참조할수 없게 된다. 또는 복잡한 로직을 필요로 한다.
이는 공간적 복잡도나 커플링 관계에도 영향을 미칠 수 있으니, Spring은 이를 Spring Container에서 자동적, 통합적으로 관리하기 위해 IoC를 채택하였다.
컴포넌트 스캔 또는 IoC는 특정 패키지 이하를 모두 스캔하여 메모리에 로드하여 싱글톤 패턴으로 관리한다. 이때, 스캔영역의 기준은 src/main/java/이하 프로젝트 패키지(com.cos.blog)로, 다른곳에 코드를 작성해둔다면 컴포넌트 스캔은 작동하지 않는다.