SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Spring Framework 2부
사내서비스개발센터
김흥래
오브젝트 팩토리
• 테스트 코드에 존재하던 관계 설정 책임을
구현한 코드는 어디로 가야 할까?
• 하던일1)
– 관심사 객체의 생성 방법을 정의
• 하던일2)
– 생성된 관심사 객체를 제공
오브젝트 팩토리
• 이러한 일을 전문적으로 하는 오브젝트를
팩토리(Factory)라고 부른다.
– 오브젝트를 생성하는 쪽과 사용하는 쪽의 책임과 역할을
깔끔하게 분리하는 목적으로 사용
– 별도의 클래스로 제공된다.
• Sample : code01
오브젝트 팩토리
• Sample : code02
제어의 역전 (IoC)
• 초기 UserDao 상태
– UserDao 객체를 main() 메소드에서 직접 생성
– 사용할 커넥션 정책도 UserDao 코드속에 존재
– 필요한 객체를 미리 만들어두고 필요한 시점에 메소드에서 사용
• 초기 UserDao 제어권의 위치
– 모든 오브젝트가 자신이 사용할 클래스를 미리 코드로 결정해둔
상태
– 사용할 클래스를 언제 어떻게 만들지에 대한 정책도 이미 결정
됨 (Runtime에 선택 불가)
– 모든 로직을 사용하는 쪽에서 제어하는 구조
제어의 역전 (IoC)
• 제어권 이전을 통한 제어관계 역전
– 제어의 역전(Inversion of Control)이란 간단히 말해서 프로그램
의 제어 흐름 구조가 뒤바뀌는 것이다.
– 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않는다.
– 자신 또한 어떻게 만들어지고 어디서 사용되는지 알지 못한다.
– 모든 제어 권한을 자신이 아닌 다른 대상에게 위임한다.
제어의 역전 (IoC)
• 사용예
– Servlet 컨테이너
• Servlet Life-Cycle
– Template Method 패턴
• Abstract Method 구현
– 프레임워크
• 어플리케이션 흐름 제어 (IoC)
• 어플리케이션 코드는 프레임워크가 짜놓은 틀에서 수동적으
로 동작한다.
제어의 역전 (IoC)
• 라이브러리 vs 프레임워크
제어의 역전 (IoC)
• 오브젝트 팩토리를 도입한 UserDao
– 관심을 분리하고 책임을 나누는 과정에서 자연스럽게 IoC가 적
용되었다.
– 스프링 프레임워크 없이도 IoC를 적용한 셈이다.
– IoC는 특정 프레임워크의 기능이 아니라 프로그래밍에서 폭넓게
사용하고 있는 기술의 통칭이다.
제어의 역전 (IoC)
• 스프링 프레임워크
– 대표적인 IoC 컨테이너
– 어플리케이션 컴포넌트의 생성과 관계 설정, 사용, 생
명주기 관리 등을 전문적으로 관리해 주는 프레임워
크이다.
– 우리가 만든 DaoFactory도 Simple한 IoC가 가능하지
만 IoC 기능을 어플리케이션 전반에서 사용하려면 스
프링 프레임워크 같은 전문적인 IoC 컨테이너를 사용
하는 것이 좋다.
제어의 역전 (IoC)
• 스프링 프레임워크
– 오브젝트 팩토리 역할을 하는 모듈을 스프링
에서는 BeanFactory (ApplicationContext)라고
한다.
• Sample : code03

Weitere ähnliche Inhalte

Ähnlich wie Spring di chapter2

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
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2Daniel Lim
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유iFunFactory Inc.
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
Java script의 이해
Java script의 이해Java script의 이해
Java script의 이해seungkyu park
 
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화InfraEngineer
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술중선 곽
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
토비의 스프링 - DI
토비의 스프링 - DI토비의 스프링 - DI
토비의 스프링 - DIJU Chae
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern대영 노
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2SeungHyun Hwang
 
도메인 객체의 생명주기
도메인 객체의 생명주기도메인 객체의 생명주기
도메인 객체의 생명주기ukjinkwoun
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3Daniel Lim
 
야, 너두 짤수있어 - IaC Basic(210131 김성익)
야, 너두 짤수있어 - IaC Basic(210131 김성익)야, 너두 짤수있어 - IaC Basic(210131 김성익)
야, 너두 짤수있어 - IaC Basic(210131 김성익)SeongIkKim2
 
1. 미티어의 폴더구조
1. 미티어의 폴더구조1. 미티어의 폴더구조
1. 미티어의 폴더구조seung-hyun Park
 

Ähnlich wie Spring di chapter2 (20)

Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
Java script의 이해
Java script의 이해Java script의 이해
Java script의 이해
 
LLVM ARC
LLVM ARCLLVM ARC
LLVM ARC
 
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
 
Design patterns
Design patternsDesign patterns
Design patterns
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
토비의 스프링 - DI
토비의 스프링 - DI토비의 스프링 - DI
토비의 스프링 - DI
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
도메인 객체의 생명주기
도메인 객체의 생명주기도메인 객체의 생명주기
도메인 객체의 생명주기
 
Uml 세미나
Uml 세미나Uml 세미나
Uml 세미나
 
Cluster - spark
Cluster - sparkCluster - spark
Cluster - spark
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
 
야, 너두 짤수있어 - IaC Basic(210131 김성익)
야, 너두 짤수있어 - IaC Basic(210131 김성익)야, 너두 짤수있어 - IaC Basic(210131 김성익)
야, 너두 짤수있어 - IaC Basic(210131 김성익)
 
1. 미티어의 폴더구조
1. 미티어의 폴더구조1. 미티어의 폴더구조
1. 미티어의 폴더구조
 

Mehr von 흥래 김

생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기흥래 김
 
검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유흥래 김
 
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기흥래 김
 
한글 자동완성 구현하기
한글 자동완성 구현하기한글 자동완성 구현하기
한글 자동완성 구현하기흥래 김
 
한글 자모 분석 원리
한글 자모 분석 원리한글 자모 분석 원리
한글 자모 분석 원리흥래 김
 
한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기흥래 김
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기흥래 김
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성흥래 김
 
2. lambda expression
2. lambda expression2. lambda expression
2. lambda expression흥래 김
 
1. introduction to java8
1. introduction to java81. introduction to java8
1. introduction to java8흥래 김
 
Spring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msaSpring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msa흥래 김
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE 흥래 김
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy흥래 김
 
Apache http component
Apache http componentApache http component
Apache http component흥래 김
 
플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포흥래 김
 
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화흥래 김
 
Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략흥래 김
 
[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava흥래 김
 

Mehr von 흥래 김 (19)

생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기
 
검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유
 
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
 
한글 자동완성 구현하기
한글 자동완성 구현하기한글 자동완성 구현하기
한글 자동완성 구현하기
 
한글 자모 분석 원리
한글 자모 분석 원리한글 자모 분석 원리
한글 자모 분석 원리
 
한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성
 
3. stream api
3. stream api3. stream api
3. stream api
 
2. lambda expression
2. lambda expression2. lambda expression
2. lambda expression
 
1. introduction to java8
1. introduction to java81. introduction to java8
1. introduction to java8
 
Spring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msaSpring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msa
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy
 
Apache http component
Apache http componentApache http component
Apache http component
 
플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포
 
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
 
Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략
 
[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava
 

Kürzlich hochgeladen

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 

Kürzlich hochgeladen (6)

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 

Spring di chapter2

  • 2. 오브젝트 팩토리 • 테스트 코드에 존재하던 관계 설정 책임을 구현한 코드는 어디로 가야 할까? • 하던일1) – 관심사 객체의 생성 방법을 정의 • 하던일2) – 생성된 관심사 객체를 제공
  • 3. 오브젝트 팩토리 • 이러한 일을 전문적으로 하는 오브젝트를 팩토리(Factory)라고 부른다. – 오브젝트를 생성하는 쪽과 사용하는 쪽의 책임과 역할을 깔끔하게 분리하는 목적으로 사용 – 별도의 클래스로 제공된다. • Sample : code01
  • 5. 제어의 역전 (IoC) • 초기 UserDao 상태 – UserDao 객체를 main() 메소드에서 직접 생성 – 사용할 커넥션 정책도 UserDao 코드속에 존재 – 필요한 객체를 미리 만들어두고 필요한 시점에 메소드에서 사용 • 초기 UserDao 제어권의 위치 – 모든 오브젝트가 자신이 사용할 클래스를 미리 코드로 결정해둔 상태 – 사용할 클래스를 언제 어떻게 만들지에 대한 정책도 이미 결정 됨 (Runtime에 선택 불가) – 모든 로직을 사용하는 쪽에서 제어하는 구조
  • 6. 제어의 역전 (IoC) • 제어권 이전을 통한 제어관계 역전 – 제어의 역전(Inversion of Control)이란 간단히 말해서 프로그램 의 제어 흐름 구조가 뒤바뀌는 것이다. – 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않는다. – 자신 또한 어떻게 만들어지고 어디서 사용되는지 알지 못한다. – 모든 제어 권한을 자신이 아닌 다른 대상에게 위임한다.
  • 7. 제어의 역전 (IoC) • 사용예 – Servlet 컨테이너 • Servlet Life-Cycle – Template Method 패턴 • Abstract Method 구현 – 프레임워크 • 어플리케이션 흐름 제어 (IoC) • 어플리케이션 코드는 프레임워크가 짜놓은 틀에서 수동적으 로 동작한다.
  • 8. 제어의 역전 (IoC) • 라이브러리 vs 프레임워크
  • 9. 제어의 역전 (IoC) • 오브젝트 팩토리를 도입한 UserDao – 관심을 분리하고 책임을 나누는 과정에서 자연스럽게 IoC가 적 용되었다. – 스프링 프레임워크 없이도 IoC를 적용한 셈이다. – IoC는 특정 프레임워크의 기능이 아니라 프로그래밍에서 폭넓게 사용하고 있는 기술의 통칭이다.
  • 10. 제어의 역전 (IoC) • 스프링 프레임워크 – 대표적인 IoC 컨테이너 – 어플리케이션 컴포넌트의 생성과 관계 설정, 사용, 생 명주기 관리 등을 전문적으로 관리해 주는 프레임워 크이다. – 우리가 만든 DaoFactory도 Simple한 IoC가 가능하지 만 IoC 기능을 어플리케이션 전반에서 사용하려면 스 프링 프레임워크 같은 전문적인 IoC 컨테이너를 사용 하는 것이 좋다.
  • 11. 제어의 역전 (IoC) • 스프링 프레임워크 – 오브젝트 팩토리 역할을 하는 모듈을 스프링 에서는 BeanFactory (ApplicationContext)라고 한다. • Sample : code03