# 저자 서론
$ 기본으로 돌아가서 원칙에 충실하려고 노력하는 일
# 들어가며
$ 스프링이란?
% 정의
> 엔터프라이즈 어플 개발에 사용되는 어플 프레임워크
> 어플 프레임워크는 개발을 빠르고 효율적으로 할 수 있도록 그 바탕이 되는 틀과 프로그래밍 모델, API 등을 제공
> 어플의 기본 틀은 스프링컨테이너(어플 컨텍스트) - 스프링런타임엔진
> 스프링컨테이너는 설정파일(xml)을 참고해서 어플을 구성하는 오브젝트를 생성/관리
> 스프링컨테이너는 웹모듈에서 하나의 서비스 또는 서블릿으로 등록되어 사용
% 핵심
> 스프링컨테이너를 다루며 컨테이너가 어플의 오브젝트를 이용할 수 있도록 설정정보를 작성하는 방법이 중요
% 프로그래밍 모델
> IoC(제어역전)/DI(의존주입), 서비스추상화, AOP(관점지향)
> 스프링을 통한 어플 개발은 위 모델을 잘 응용해야 함
% 요약
> 클래스는 스프링컨테이너로 오브젝트로 생성되어 동작하고, 프로그래밍모델로 코딩하고 API를 잘 활용하자
% 스프링의 개발지향성은 단순한 객체지향적 프로그래밍 모델인 POJO 프로그래밍이다.
% 학습목표
> 스프링의 핵심 가치와 원리에 대한 이해
# 구성
$ 1부: 기본원리와 핵심기술 소개
$ 2부: 개별 기술의 내용과 응용
# 참고
$ 내장형DB 지원, RESTTemplate for REST
$ 로드 존슨 "컴퓨터에게 물어보라-실증적 접근 방법"
========================================================================================
1부 이해
1장 오브젝트와 의존관계
1.2.1 관심사의 분리(separation of concerns)
- 중복코드의 메소드 추출(DB연결 Connection 등) : 리팩토링의 메소드 추출
- 변화가능한 메소드의 추상화 => 상속하는 서브클래스에서 구현 : 템플릿 메소드 디자인 패턴
- 팩토리 메소드 패턴 : 서브클래스에서 구체적인 객체생성하도록 설계하는 디자인 패턴
- 디자인패턴 참고 - [GoF의 디자인 패턴:에릭감마], [Head First Design Patterns:에릭 프리먼]
1.3.1 클래스 분리(비 상속을 통한 확장성 제고)
- 상속의 강한결합을 해소하기 위한 인터페이스의 사용
1.3.4 원칙과 패턴
- 개방폐쇄원칙(open-closed principle) : 클래스나 모듈은 확장에는 열려있어야하고 변경에는 닫혀 있어야 한다
- 객체지향 설계 원칙(SOLID)-로버트 마틴 : http://butunclebob.com/ArticleS.UncleBob.PrinceplesOfOod
> SRP(The Single Responsibility Principle) : 단일 책임 원칙
> OCP(The Open Closed Principle) : 개방 폐쇄 원칙
> LSP(The Liskov Subsitution Principle) : 리스코프 치환 원칙
> ISP(The Interface Segregation Principle) : 인터페이스 분리 원칙
> DIP(The Dependency Inversion Principle) : 의존관계 역전 원칙
1.5 스프링의 IoC : 스프링의 핵심은 IoC이다
106p