SlideShare une entreprise Scribd logo
1  sur  13
오브젝트와 의존관계
Spring ...
❏ 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션
프레임워크.
❏ 특정 플랫폼 또는 기술에 종속적이지 않게 다양한 기능들을 쉽고 일관된 형
태로 애플리케이션에 통합되도록 함.
❏ 애플리케이션을 개발하는데 고려해야 할 여러 가지 사항들과 그 처리 방법
들 예를 들어 OOP, 디자인 패턴, POJO, 테스트 자동화 등을 자연스럽게 도
입할 수 있도록 함.
1.1 초난감 DAO
❏ User, UserDao 를 통한 문제 제기
❏ 중복된 코드
❏ UserDao 에 의한 직접적인 DB 접근
1.2 DAO 의 분리
❏ 관심사의 분리(Separation of Concerns)
❏ UserDao 의 변경
❏ 리펙토링을 통한 메소드추출(extract method)
❏ 상속을 통한 확장
❏ 템플릿메소트패턴 (template method pattern)
❏ 팩토리메소드패턴 (factory method pattern)
1.3 DAO의 확장
❏ 상속의 문제점
❏ 커넥션을 위한 상속으로- 확장에 문제.
❏ 클래스의 분리 -> SimpleConnectionMaker
❏ Low Coupling 한 인터페이스의 도입.
❏ 클라이언트를 통한 관계설정 책임의 분리.
❏ 객체지향설계5원칙(SOLID).
❏ 높은응집도와 낮은결합도(High Coherence and Low Coupling).
❏ OCP의 실현에도 잘 들어맞는 전략패턴(Strategy Pattern).
1.4 제어의 역전(IoC)
❏ Inversion Of Control
❏ DaoFactory에서 UserDao와 ConnectionMaker의 구현체를 생성하는
책임을 가짐.
❏ 템플릿 메소드(93p)
❏ Factory
❏ 객체 생성 방법을 결정하고 만들어진 오브젝트를 반환.
1.5 스프링의 IoC
❏ DaoFactory 에 대한 간단한 설정.
❏ @Configuration, @Bean 설정.
❏ ApplicationContext 를 통한 호출.
❏ object factory 와의 차이.
❏ 스프링은?
❏ IoC container, bean factory, application context
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
1.7 의존관계 주입(DI)
❏ Dependency Injection
❏ object reference 를 외부로부터 제공받고 이를 통해 여타 object와 동적
으로 의존관계가 만들어지는 것이 핵심.(112p)
❏ Dependency Relation(의존관계)
❏ 방향성을 가지며, 변경에 영향을 받음.
❏ 의존관계 주입의 세가지 조건(114p)
❏ 인터페이스에 의존한 채로, 런타임 시 컨테이너나 팩토리가 의존
관계를 결정하며, 사용될 오브젝트에 대한 레퍼런스를 외부에서
제공해줌으로써 만들어짐.
1.7 의존관계 주입(DI)
❏ 의존관계 검색은 자신이 필요로 하는 object 를 능동적으
로 찾음.
❏ 의존관계 검색과 주입 차이점.
❏ ex) getBean() 호출시 불리는 클래스만 스프링의 빈이면 됨.
❏ 의존관계의 클래스가 컨테이너의 bean object 여야 한다.
❏ 의존관계 주입 방법
❏ 생성자, 수정자메소드, 일반함수
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 커넥션을 가져와 후자의 빈 오브젝트에게
주입을 하여 준다. -->
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>
끝

Contenu connexe

Similaire à [Spring]오브젝트와 의존관계

자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)DK Lee
 
[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DI[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DIAnselmKim
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계AnselmKim
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료ssuser776e2d
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피ssuser776e2d
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료beom kyun choi
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Androidtaeinkim6
 
Spring IoC
Spring IoCSpring IoC
Spring IoCSuan Lee
 
토비의 스프링 - DI
토비의 스프링 - DI토비의 스프링 - DI
토비의 스프링 - DIJU Chae
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerKyung Koo Yoon
 
11장 시스템
11장 시스템11장 시스템
11장 시스템kidoki
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2Minseok Jang
 
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 uEngine Solutions
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)DK Lee
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)Hankyo
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Inho Kwon
 

Similaire à [Spring]오브젝트와 의존관계 (20)

자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DI[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DI
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
My di container
My di containerMy di container
My di container
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Android
 
Spring IoC
Spring IoCSpring IoC
Spring IoC
 
토비의 스프링 - DI
토비의 스프링 - DI토비의 스프링 - DI
토비의 스프링 - DI
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
11장 시스템
11장 시스템11장 시스템
11장 시스템
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
 
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
 

[Spring]오브젝트와 의존관계

  • 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>
  • 13.

Notes de l'éditeur

  1. http://cafe.naver.com/javathink/180