프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법
재사용하기 좋은 형태로 특정 규약을 묶어 정리한 것
비기능적 요구사항(성능, 보안, 확장성, 안정성)을 만족하는 구조와 구현되는 기능을 안정적으로 실행하도록 제어해주는 잘 만들어진 구조의 라이브러리 덩어리
프레임워크
= 디자인 패턴
+ 패턴이 적용된 기반 클래스 라이브러리
로 제공 구조와 구현 코드를 함께 제공한다.
Java EE : 분산형, 기업형 응용프로그램 개발 위한 API / 결합력을 낮추는 DI, DB 트랜잭션 처리
Java SE : 일반적 로컬 응용프로그램 개발을 위한 API / 파일 IO 콘솔 IO 윈도우 IO 등등
Spring : Java EE의 위치를 대체하고 있는 오픈소스 경량급 애플리케이션 프레임워크
웹개발 시 필요한 것들
강한 결합 - 함수 사용 시 비슷한 기능이지만 다른 함수를 사용할 때 일일히 그 특정 함수를 불러와야만 사용할 수 있다.
느슨한 결합 - 사용할 함수의 공통된 기능을 interface로 정의 하고 함수의 종류별로 interface를 구현해서 오버라이딩하여 결합을 느슨하게 만들 수 있다. 불러올 때는 인터페이스를 불러온다
클래스 객체를 개발자가 코드에서 생성하지 않고 프레임워크가 생성하여 사용하는 방법
class A
{
private B b;
public A(){
b= new B(); A
}
}
B는 A의 Dependency(종속 객체, 부품)라고 함
class A
{
private B b;
public A(){}
public void setB(B b){
this.b = b;
} // 외부에서 생성한 뒤 세팅한 객체 받아오기
}
B b = new B(); // dependency
A a = new A();
a.setB(b); // Injection
B가 A의 Dependency일 때 외부에서 만든 후 A에 세팅하는 과정
장점 - 갈아끼기가 쉽다
단점 - 조립해야하는 번거로움
B b = new B();
A a = new A();
a.setB(b); // Injection
B b = new B();
A a = new A(b); // Injection
스프링이 이러한 Injection을 대신해 줄 수 있으며 Injection된 결과를 사용할 수 있다.
프레임워크의 제어 흐름이 일반 프로그램 흐름과 반대로 동작하기 때문에 oC라고 설명한다.
서블릿이나 빈을 개발자가 코드에서 생성하지 않고 프레임워크가 직접 수행한다.
스프링 컨테이너는 IOC를 지원하며 메타 데이터(XML 설정)를 통해 beans를 관리하고 어플리케이션의 중요부분 형성
스프링 컨테이너는 관리되는 bean들을 DI를 통해 IoC를 지원한다.
위 케이스는 A가 먼저 생성되어 B,C,D 순서대로 객체가 생성되는 데 반해
아래 케이스는 D 부터 역순(Inversion)으로 객체가 생성되면서 조립된다.
아래 케이스 역할을 수행하고 그에 대한 결과를 저장하는 컨테이너를 IoC 컨테이너라고 한다.