
가장 먼저 알아야 할 것은 "누가 주인공이고, 어디에 사느냐"입니다.
@Component (이름표)MarioGame, GameRunner 클래스 위에 붙였었죠? 이 스티커가 붙으면 스프링이 챙겨야 할 식구가 됩니다.Spring Bean (관리받는 객체)@Component 이름표가 붙어서 스프링이 실제로 관리하게 된 객체(인스턴스)를 부르는 말입니다.Component Scan (숨은 빈 찾기)@ComponentScan("com.example.package") 처럼 패키지 위치를 알려주면, 스프링이 그 동네를 샅샅이 뒤져서 @Component가 붙은 애들을 다 찾아냅니다.이제 주인공들을 찾았으니, 서로 연결해 줄 차례입니다.
Dependency (의존성)GameRunner가 게임을 실행하려면 MarioGame이 꼭 필요하죠? 이때 "GameRunner는 MarioGame에 의존한다"고 합니다.Dependency Injection (DI) (의존성 주입)Auto-wiring (자동 연결)GamingConsole이 필요하네?"라고 인식하면, 가지고 있는 빈 중에서 딱 맞는 걸 찾아 자동으로 선을 연결해 주는 행위입니다.이 모든 과정이 왜 혁신적일까요? 바로 주도권이 바뀌었기 때문입니다.
IoC (Inversion of Control) (제어의 역전)new GameRunner(new MarioGame()) -> 내가 직접 객체를 만들고 조립함.@Component, @Autowired -> 나는 설정만 하고, 실제 객체 생성과 조립은 스프링이 알아서 함.IoC Container (스프링 컨테이너)BeanFactory: 아주 기본적인 기능만 있음 (거의 안 씀).ApplicationContext: 우리가 계속 쓰고 있는 그것! 아주 똑똑하고 다양한 기능이 있는 컨테이너입니다. (실무에서는 99.9% 이걸 씁니다.)| 용어 | 한 줄 요약 |
|---|---|
| @Component | "나 관리해줘!" 이름표 |
| Spring Bean | 스프링이 관리하는 객체 그 자체 |
| Dependency | 내가 일할 때 필요한 친구 |
| Component Scan | 이름표 붙은 친구들 찾으러 다니기 |
| DI (의존성 주입) | 친구들을 서로 소개해 주고 연결해 주기 |
| IoC (제어의 역전) | "내가 다 할게" → "스프링아 네가 다 해" (주도권 이양) |
| IoC Container | 이 모든 일을 처리하는 스프링의 핵심 엔진 (ApplicationContext) |