<aside> 💡 제어의 역전 - 직접적으로 의존성을 만들지 않고, 외부에서 의존성을 가져온다.
</aside>
스프링을 쓰기 이전까지 자바 기반의 개발은 개발자가 프로그램의 흐름을 직접 제어하는 과정의 연속이었다. 일반적으로 객체를 만들 때 개발자가 직접 new를 통해 객체를 생성한다. 이를 객체의 생성주기를 개발자가 관리한다고 표현할 수 있다.
하지만 스프링을 사용하게 되면 프로그램의 흐름을 스프링 프레임워크가 주도하게 된다. 따라서 객체의 생성주기를 프레임워크가 관리하기 떄문에 이를 두고 **'제어의 역전'(Inversion of Control)**이라고 표현한다.
이렇게 스프링프레임워크가 관리하는 객체의 생명주기는 **컨테이너(Container)**라고 불리는 곳에서 관리된다. 스프링 IoC 컨테이너가 관리하는 객체들을 Bean 이라고 부른다. IoC컨테이너에 등록된 객체 (Bean)는 스프링 프레임워크가 알아서 관리 (생명주기 생성, 소멸 등)을 해준다.
// 생성자를 통해 주입
public OwnerController(OwnerRepository clinicService, VisitRepository visits) {
this.owners = clinicService;
this.visits = visits;
}
@Autowired
private OwnerRepository owners; // 필드에서 @Autowired를 통해 주입
@Autowired
public void setOwners(OwnerRepository owners){ // setter 메서드를 통해 주입
this.owners = owners;
}