2. Spring ...
❏ 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션
프레임워크.
❏ 특정 플랫폼 또는 기술에 종속적이지 않게 다양한 기능들을 쉽고 일관된 형
태로 애플리케이션에 통합되도록 함.
❏ 애플리케이션을 개발하는데 고려해야 할 여러 가지 사항들과 그 처리 방법
들 예를 들어 OOP, 디자인 패턴, POJO, 테스트 자동화 등을 자연스럽게 도
입할 수 있도록 함.
3. 1.1 초난감 DAO
❏ User, UserDao 를 통한 문제 제기
❏ 중복된 코드
❏ UserDao 에 의한 직접적인 DB 접근
4. 1.2 DAO 의 분리
❏ 관심사의 분리(Separation of Concerns)
❏ UserDao 의 변경
❏ 리펙토링을 통한 메소드추출(extract method)
❏ 상속을 통한 확장
❏ 템플릿메소트패턴 (template method pattern)
❏ 팩토리메소드패턴 (factory method pattern)
5. 1.3 DAO의 확장
❏ 상속의 문제점
❏ 커넥션을 위한 상속으로- 확장에 문제.
❏ 클래스의 분리 -> SimpleConnectionMaker
❏ Low Coupling 한 인터페이스의 도입.
❏ 클라이언트를 통한 관계설정 책임의 분리.
❏ 객체지향설계5원칙(SOLID).
❏ 높은응집도와 낮은결합도(High Coherence and Low Coupling).
❏ OCP의 실현에도 잘 들어맞는 전략패턴(Strategy Pattern).
6. 1.4 제어의 역전(IoC)
❏ Inversion Of Control
❏ DaoFactory에서 UserDao와 ConnectionMaker의 구현체를 생성하는
책임을 가짐.
❏ 템플릿 메소드(93p)
❏ Factory
❏ 객체 생성 방법을 결정하고 만들어진 오브젝트를 반환.
7. 1.5 스프링의 IoC
❏ DaoFactory 에 대한 간단한 설정.
❏ @Configuration, @Bean 설정.
❏ ApplicationContext 를 통한 호출.
❏ object factory 와의 차이.
❏ 스프링은?
❏ IoC container, bean factory, application context
8. 1.6 싱글톤 레지스트리와 오브젝트 스코프
❏ ‘object factory’ vs ‘application context’
❏ 객체의 동일성
❏ ‘application context’ 는 ‘singleton registry’ 이다.
❏ singleton registry 의 장점.
❏ 객체지향적인 설계 방식과 원칙, 디자인패턴 적용에 제약이 없다.
❏ 평범한 자바클래스를 singleton 으로 활용하게 함.
❏ multi thread 환경에서의 singleton
❏ stateless(상태정보를 저장하지 않음).
❏ instance 변수 vs local 변수(매번 변하는 데이터와 아닌 것의 구분).
❏ 간단한 것은 static final, final
❏ http://cafe.naver.com/javathink/180
9. 1.7 의존관계 주입(DI)
❏ Dependency Injection
❏ object reference 를 외부로부터 제공받고 이를 통해 여타 object와 동적
으로 의존관계가 만들어지는 것이 핵심.(112p)
❏ Dependency Relation(의존관계)
❏ 방향성을 가지며, 변경에 영향을 받음.
❏ 의존관계 주입의 세가지 조건(114p)
❏ 인터페이스에 의존한 채로, 런타임 시 컨테이너나 팩토리가 의존
관계를 결정하며, 사용될 오브젝트에 대한 레퍼런스를 외부에서
제공해줌으로써 만들어짐.
10. 1.7 의존관계 주입(DI)
❏ 의존관계 검색은 자신이 필요로 하는 object 를 능동적으
로 찾음.
❏ 의존관계 검색과 주입 차이점.
❏ ex) getBean() 호출시 불리는 클래스만 스프링의 빈이면 됨.
❏ 의존관계의 클래스가 컨테이너의 bean object 여야 한다.
❏ 의존관계 주입 방법
❏ 생성자, 수정자메소드, 일반함수
11. 1.8 XML을 이용한 설정
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- @bean은 <bean...으로, method name은 id로 리턴클래스는 class로 매칭된다. -->
<bean id="myConnectionMaker" class="springbook.user.dao.DConnectionMaker">
</bean>
<bean id="userDao" class="springbook.user.dao.UserDao">
<!-- setter 메소드가 name과 매칭되며 ref는 주입되는 클래스 이다. -->
<property name="connectionMaker" ref="myConnectionMaker" />
</bean>
<!-- DaoFactory가 하던일을 위 Xml설정파일이 대체한다.
전자의 빈으로 myConnectionMaker라는 메소드가 DConnectionMaker 커넥션을 가져와 후자의 빈 오브젝트에게
주입을 하여 준다. -->
12. 1.8 XML을 이용한 설정
Xml 설정을 통한 ApplicationContext 생성
ApplicationContext context = new GenericXmlApplicionContext("applicationContext.xml");
DataSource
<!-- 아래의 설정은 DataSource 인터페이스 전환시 사용되는 설정입니다. DataSource 인터페이스 사용시 아래 코드의 주석을 풀고
위 코드를 주석 처리 하세요. -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://your.dbserver.org:3306/springbook?characterEncoding=UTF-8" />
<property name="username" value="yourID" />
<property name="password" value="yourPASS" />
</bean>
<bean id="userDao" class="springbook.user.dao.UserDao">
<property name="dataSource" ref="dataSource" />
</bean>