스프링 프레임워크는 자바 웹 애플리케이션 개발을 위한 오픈 소스 프레임워크로, 기존 프레임워크보다 가벼운 경량 프레임워크
스프링은 경량 컨테이너라고도 부른다. '컨테이너'라고 하면 대표적인 것으로 톰캣을 들 수 있다. 톰캣은 서블릿 컨테이너라고 부르는데, 그 이유는 톰캣을 실행하면 톰캣은 서블릿의 생성, 초기화, 서비스 실행, 소멸에 관한 모든 권한을 가지고 서블릿을 관리하기 때문이다.
스프링도 마찬가지로 애플리케이션에서 사용되는 여러 가지 빈(클래스 객체)를 개발자가 아닌 스프링이 권한을 가지고 직접 관리한다.
Spring framework를 이루는 다양한 기술
- 의존성 주입 : 클래스 객체를 개발자가 코드에서 생성하지 않고 프레임워크가 생성하여 사용하는 방법
- 제어 역행 : 서블릿이나 빈 등을 개발자가 코드에서 작성하지 않고 프레임워크가 직접 수행하는 방법
- 관점 지향 : 핵심 기능 외 부수 기능들을 분리 구현함으로써 모듈성을 증가시키는 방법
의존성 주입이란 연관 관계를 개발자가 직접 코딩을 통해 컴포넌트(클래스)에 부여하는 것이 아니라, 컨테이너가 연관 관계를 규정하는 것
-> 코드에서 직접적인 연관 관계가 발생하지 않으므로 각 클래스들의 변경이 자유로워짐(loosely coupled, 약한 결합)
의존성 주입을 적용했을 때 얻을 수 있는 장점
public class Store {
private Pencil pencil;
public Store() {
this.pencil = new Pencil();
}
}
-> 문제점 : 두 클래스가 강하게 결합되어 있음, 객체들간의 관계가 아니라 클래스들간의 관계가 맺어지고 있음
public class Store {
private Product product;
public Store(Product product) {
this.product = product;
}
}
-> pencil을 product로 변경하여 강하게 결합되어 있는 부분 제거
public class BeanFactory {
public void store() {
// Bean의 생성
Product pencil = new Pencil();
// 의존성 주입
Store store = new Store(pencil);
}
}
-> 객체(빈) 생성 -> 의존성 있는 두 객체를 연결하기 위해 한 객체를 다른 객체로 주입