오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델
- 유연성, 확장성이 뛰어난 코드를 만들게 도와주는 객체지향 설계 원칙과 디자인 패턴의 핵심 원리를 담고 있다.
- 스프링은 IoC/DI 를 프레임워크의 근간으로 삼고 있다.
- 말그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아닌 외부에서 결정되는 것을 의미한다.
- 즉, 스프링 컨테이너가 필요에 따라 개발자 대신 Bean들을 제어 해주는 행위이다.
- 스프링이 직접 제공하는 모든 기술과 API, 컨테이너는 IoC/DI 방식으로 작성되어있다.
구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층을 두는 방법
- 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나며 유연한 어플리케이션을 만들도록 한다.
애플리케이션 코드에 산재해 나타나는 부가적인 기능을 독립적으로 모듈화하는 프로그래밍 모델
- 스프링은 AOP 를 이용해서 다양한 엔터프라이즈 서비스를 적용하고도 깔끔한 코드를 유지하도록 한다.
1장 초난감 DAO 코드에 DI 를 적용해나가는 과정으로 확장과 변경에 용이하게 대응하도록 개선
- 변화의 특성이 다른 부분을 구분해주고 다른 목적과 다른 이유에 의해 다른 시점에 독립적으로 변경될 수 있는 효율적인 구조를 만들어주는 원칙
- 기능이 다양해지고 확장하려는 성질
- 고정되고 변하지 않으려는 성질
바뀌는 성질이 다른 코드 중에서
- 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분
- 자유롭게 변경되는 성질을 가진 부분으로부터 독립
⇒ 효과적으로 활용할 수 있도록 하는 방법
- 스프링에 적용된 템플릿 기법
- 완성도 있는 DAO 코드를 만드는 방법
- 3.1 다시 보는 초난감 DAO
- 3.2 변하는 것과 변하지 않는 것
- 3.3 JDBC 전략 패턴의 최적화
- 3.4 컨텍스트와 DI
- 3.5 템플릿과 콜백
- 3.6 스프링의 jdbcTemplate
지금까지 만든 DAO 에 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술들을 추상화하고, 일관된 방법으로 사용할 수 있도록 지원하는지 살펴보자
서비스 추상화를 통해 근본적인 문제를 해결했던 트랜잭션 경계 설정 기능을 AOP 를 이용해 더 깔끔하고 세련되게 바꿔보자.