
IoC(제어의 역전)이란, 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것
Spring은 개발자가 Java를 사용하여 쉽게 좋은 코드를 작성할 수 있도록 도와주는 역할을 해줍니다.
ex) 실생활에 비교해 보자면 요리도구까지 전부 들어있는 밀키트라고 할 수 있음.
음식에 비교해서 고객이 직접 Food를 만들어 먹으면 다른 새로운 음식을 만들려면 추가적인 요리준비(코드변경)가 불가피함.
그렇기 때문에 이때는 제어의 흐름이 고객 → 음식 였습니다.
(강한 결합)
이를 해결하기 위해 만들어진 음식을 고객에게 전달해주는 식으로 변경함으로써 고객은 추가적인 요리준비(코드변경) 없이 어느 음식이 되었든지 전부 먹을 수 있게 됨.
결과적으로 제어의 흐름이 음식 → 고객 로 역전 되었습니다.
(약한 결합)
컨테이너? - 컨테이너는 어떤 환경에서나 실행하기 위해 필요한 모든 요소를 포함하는 소프트웨어 패키지,
컨테이너는 보통 객체의 생명주기를 관리, 생성된 인스턴스들에게 추가적인 기능을 제공함.
스프링 프레임워크에서는 IoC 컨테이너이다.
각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
매서드를 통한 주입
생성자를 통한 주입
필드에 직접 주입
DI를 사용하기 위해서는 객체생성을 해야함. -> 객체생성을 누가할까?
Spring IoC컨테이너가 필요한 객체를 생성하고 관리하는 역할을 대신함.
빈 : Spring IoC컨테이너가 관리하는 객체
Spring IoC 컨테이너: 'Bean'을 모아둔 컨테이너
new 키워드 대신 사용하는 인스턴스 객체?
필드 위에 @Autowired
빈을 주입할 때 사용할 메서드 위에 @Autowired