
의존 관계 주입 기능으로, 객체를 직접 생성하는게 아니라 외부에서 생성한 후 주입시켜주는 방식이다.
이를 통해, 모듈 간의 결합도가 낮아지고 유연성이 높아진다.
public class Consumer {
private Food food;
public Consumer(Food food){
this.food = food;
}
}
public class Consumer {
private Food food;
public void setFood(Food food){
this.food = food;
}
}
"제어의 역전" 말 그대로 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것을 의미한다.
즉, 의존성 객체를 개발자가 만드는 것이 아니라 제어권을
스프링에게 넘겨주어 스프링이 만들어놓은 객체를 주입하는 것이다.
스프링이 모든 의존성 객체를 스프링이 실행될 때 마다 만들어주고 필요한 곳에 주입시켜 줌으로써 Bean들은 싱글턴패턴의 특징을 가진다.
생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고, 최초 생성 이후에 호출된 생성자는 최조의 생성자가 생성한 객체를 반환한다.
스프링 컨테이너는 싱글턴 패턴을 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리한다. 이러한 기능 덕분에 싱글턴 패턴의 단점을 해결하고 객체를 싱글턴으로 유지할 수 있다.
싱글턴 패턴은 객체 인스턴스를 하나만 생성해서 공유하여 사용하기 때문에 객체 상태를 유지하게 설계하면 안된다.
즉, 관점 지향 프로그램이다.
프로그램에 대한 관심을 핵심 관점, 부가 관점으로 나누어서 관심 기준으으로 모듈화하는 것을 의미한다.
이식 가능한 서비스 추상화를 말한다.
즉 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스를 말한다.