토비의 스프링 1장
Spring
자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크
애플리케이션 바탕 틀, 공통 프로그래밍 모델, 기술 api등을 제공
-
스프링 컨테이너 : 또는 애플리케이션 컨텍스트라 불리는 스프링 런타임 엔진을 제공, 설정정보를 참고해서 애플리케이션을 구성하는 오브젝트를 생성 및 관리한다.
-
IoC/DI, 서비스 추상화, AOP : 애플리케이션 코드가 어떻게 작성되어야 하는지에 대한 기준 (프로그래밍 모델)
IoC/DI - 오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델
서비스 추상화 - 유연한 추상 계층을 두는 방법
AOP - 애플리케이션 코드에 산재해서 나타나는 부가적인 기능을 독립적으로 모듈화하는 프로그래밍 모델
- 기술 API
오브젝트
스프링은 자바의 객체지향적 가치에 중심을 두고있기 때문에 오브젝트에 관심이 많다.
객체지향의 장점은 변화에 효과적으로 대처할 수 있다는 기술적 특징이 있다.
그것을 위해서는
템플릿 메소드 패턴 : 슈퍼클래스에 기본적인 로직의 흐름을 만들고 기능의 일부를 추상 메소드 등으로 만든 후 서브클래스에서 필요에 맞게 사용하는 방법, 스프링에서 애용되는 디자인 패턴
팩토리 메소드 패턴 : 서브클래스에서 구체적인 오브젝트 생성 방법을 결정하게 하는것
슈퍼클래스
protected abstract Animal getMyPet();
서브클래스
public Animal getMyPet(){
...
return cat;
}
상속을 할 때와 같이 자유로운 확장이 가능하면서 클래스의 분리가 가능하려면 인터페이스를 사용한다.
인터페이스는 추상적이고 느슨한 연결고리를 만들어주는것이다.
public interfacr Animal{
public Food feedAnimal();
public void cleanAnimal
}
public class Cat implements Animal{
public Food feedAnimal(){
... return 캣닢;
}
public void cleanAnimal(){
// 내가 고양이를 씻기는 방법 애옹
}
}
public class Dog implements Animal{
public Food feedAnimal(){
... return 개사료;
}
public void cleanAnimal(){
// 내가 강아지를 씻기는 방법 멍멍
}
}
IoC
제어의 역전
오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않고 생성하지도 않는다. 또 자신도 어떻게 만들어지고 사용될지 모른다.
ex) 프레임워크 : 애플리케이션 코드가 프레임워크에 의해 사용된다! 그러므로 애플리케이션 코드는 그 틀 안에서 수동적으로 동작해야 한다.