SlideShare a Scribd company logo
Inversion of Control Containers
and the Dependency Injection pattern
문제점
주류 J2EE 의 문제 : heavyweight complexity

 대안은 Open source
다양한 Lightweight Container 출현

※ 고민 :
어떻게 서로 다른 요소를 같이 엮어서 쓸 수 있을까?
ex) 각자 만든 web controller architecture와 Database
Interface를 어떻게 같이 사용할 수 있을까?
예제 (1/4)
 특정 감독이 연출한 영화의 목록을 찾아주는 컴포넌트
예제 (2/4)
 MovieLister와 특정 finder 객체를 연결하는 방법
예제 (3/4)
 생성자에서 구현된 클래스 생성
예제 (4/4)

[The dependencies using a simple creation in the lister class]

1.
2.

lister 객체가 어떤 Impl도 사용할 수 있고,
나중에 그 Impl을 특별한 수정 없이 사용할 수 있으면 좋겠다.
Plugin Pattern
Plugin

: http://martinfowler.com/eaaCatalog/plugin.html

Links classes during configuration rather than compilation.
핵심

여러 플러그인들을 어떻게 조립해서 한 애플리케이션으로 만들 수 있을까?

 Inversion of Control
Inversion of Control

Inversion of Control는 프레임워크의 공통된 특성,

Dependency Injection

Why?
핵심은 어떤 제어를 역전시키려고 했는가?
Plug-in Implementation을 찾는 방법
= implementation이 Injection 가능하도록 함
Dependency Injection

[The dependencies for a Dependency Injector]
Dependency Injection
Three main styles of dependency injection :

• Constructor Injection
• Setter Injection
• Interface Injection
Constructor Injection
PicoContainer

https://github.com/picocontainer/picocontainer
Constructor Injection
※ 각 인터페이스마다 어떤 클래스를 관련 지을지, 어떤 문자열을 Injection할지 알려줘야 함
Setter Injection
Spring

http://www.springsource.org
Setter Injection
Interface Injection
Avalon

http://avalon.apache.org/closed.html  Excalibur(http://excalibur.apache.org)  retired (2010/12/15)
Interface Injection
Using a Service Locator
- Dependency를 없앨 수 있는 다른 방법
- 응용 프로그램이 필요로 할 서비스들의 전체 소유권을 어떻게 취할지 알고 있는 어떤 객체를 두자는 것

[The dependencies for a Service Locator]
Using a Service Locator
Using a Service Locator
Using a Segregated Interface for the Locator
Separated Interface 적용 – ISP(Interface segregation principle)
A Dynamic Service Locator
Using both a locator and injection with Avalon
Avalon은 Service Locator와 Dependency Injection 모두 사용 가능
Deciding which option to use
Service Locator vs Dependency Injection
Service Locator

Dependency Injection

장점

- 개발자에게 더 직접적인 표현

- 명시적인 호출이 없음
- 의존관계 파악이 쉬움
- 테스트 쉬움

단점

-

- 컴포넌트가 추가적인 요청을 할 수 없음

모든 객체가 Service Locator에 의존
의존관계 파악이 어려움
Service Locator API에 잘 알고 있어야 함
테스트가 상대적으로 어려움

Constructor vs Setter Injection
Constructor Injection

Setter Injection

장점

- Field 를 숨길 수 있음
- 객체 생성에 대한 명확한 의도 표현

간단하고 쉬움

단점

-

Immutable field에 대한 신뢰

매개변수가 많아지면 코드가 지저분
생성 방법이 여러 가지인 경우, 표현이 어려움
위치를 통해 매개변수의 용도를 알기 어려움
상속인 경우 부모클래스 + 자기 매개변수

※ Interface Injection 탈락 사유 : 인터페이스를 만들어야 됨. 상대적으로 많은 작업 필요
Code or configuration files
XML hell-!!

ex)

API vs XML

Compile!!

개발자에겐 프로그래밍 언어가 더 익숙..
둘 다 지원하고, 선택은 사용자에게 맡겨라.
Annotation
 Spring 3.x, Annotation-based configuration
- Example : @Autowired
그 외..
Java Spec
JSR 330: Dependency Injection for Java
http://jcp.org/en/jsr/detail?id=330

DI Frameworks
google-guice

http://code.google.com/p/google-guice

PicoContainer

https://github.com/picocontainer

Spring

http://www.springsource.org

More Related Content

Viewers also liked

프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기Sangwon Ko
 
Heartbeat
HeartbeatHeartbeat
Heartbeat
Sangwon Ko
 
동영상입문
동영상입문동영상입문
동영상입문
Sukjin Yun
 
Design patterns
Design patternsDesign patterns
Design patterns
Joshua Yoon
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2SeungHyun Hwang
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton pattern
YoonJong Choi
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design pattern
Sukjin Yun
 
CDP総選挙 2013
CDP総選挙 2013CDP総選挙 2013
CDP総選挙 2013
Kieko Sakurai
 
Unit of Mitigation
Unit of MitigationUnit of Mitigation
Unit of Mitigation
Sangwon Ko
 
CDP2.0 - cloudpack night #7 -
CDP2.0 - cloudpack night #7 -CDP2.0 - cloudpack night #7 -
CDP2.0 - cloudpack night #7 -SORACOM, INC
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet Architecture
JU Chae
 
Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1
Sangwon Ko
 
Getting started with Public Cloud and AWS
Getting started with Public Cloud and AWSGetting started with Public Cloud and AWS
Getting started with Public Cloud and AWS
Cohesive Networks
 
자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴
Sungchul Park
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
hyun soomyung
 
Cloud Design Pattern
Cloud Design PatternCloud Design Pattern
SW개발자가 얘기하는 건축이야기
SW개발자가 얘기하는 건축이야기SW개발자가 얘기하는 건축이야기
SW개발자가 얘기하는 건축이야기
Sangwon Ko
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기Cosmos Shin
 

Viewers also liked (19)

B Fn As
B Fn AsB Fn As
B Fn As
 
프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기
 
Heartbeat
HeartbeatHeartbeat
Heartbeat
 
동영상입문
동영상입문동영상입문
동영상입문
 
Design patterns
Design patternsDesign patterns
Design patterns
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton pattern
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design pattern
 
CDP総選挙 2013
CDP総選挙 2013CDP総選挙 2013
CDP総選挙 2013
 
Unit of Mitigation
Unit of MitigationUnit of Mitigation
Unit of Mitigation
 
CDP2.0 - cloudpack night #7 -
CDP2.0 - cloudpack night #7 -CDP2.0 - cloudpack night #7 -
CDP2.0 - cloudpack night #7 -
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet Architecture
 
Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1
 
Getting started with Public Cloud and AWS
Getting started with Public Cloud and AWSGetting started with Public Cloud and AWS
Getting started with Public Cloud and AWS
 
자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
 
Cloud Design Pattern
Cloud Design PatternCloud Design Pattern
Cloud Design Pattern
 
SW개발자가 얘기하는 건축이야기
SW개발자가 얘기하는 건축이야기SW개발자가 얘기하는 건축이야기
SW개발자가 얘기하는 건축이야기
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
 

Similar to IoC and DI Pattern

Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
Kyung Koo Yoon
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
AnselmKim
 
Rx for iOS App. RxMVVM-DataCenter!
Rx for iOS App. RxMVVM-DataCenter!Rx for iOS App. RxMVVM-DataCenter!
Rx for iOS App. RxMVVM-DataCenter!
SUNGCHEOL KIM
 
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
rockplace
 
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
Heejong Lee
 
K8s beginner 2_advanced_ep02_201904221130_post
K8s beginner 2_advanced_ep02_201904221130_postK8s beginner 2_advanced_ep02_201904221130_post
K8s beginner 2_advanced_ep02_201904221130_post
Inho Kang
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
Yeon Soo Kim
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료
ssuser776e2d
 
2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)2.Spring IoC & DI (ioc container)
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XpressEngine
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
KwangSeob Jeong
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
ssuser776e2d
 
iOS Architecture.pdf
iOS Architecture.pdfiOS Architecture.pdf
iOS Architecture.pdf
ssuser86e2971
 
Cloud migration pattern using microservices
Cloud migration pattern using microservicesCloud migration pattern using microservices
Cloud migration pattern using microservices
Seong-Bok Lee
 
iOS Modular Architecture with Tuist
iOS Modular Architecture with TuistiOS Modular Architecture with Tuist
iOS Modular Architecture with Tuist
정민 안
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
중선 곽
 
Scalable web architecture
Scalable web architectureScalable web architecture
Scalable web architecture
Steve Min
 
OpenDaylight 소개
OpenDaylight 소개OpenDaylight 소개
OpenDaylight 소개
Seung-Hoon Baek
 
C Language II
C Language IIC Language II
C Language IISuho Kwon
 
[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기
NAVER D2
 

Similar to IoC and DI Pattern (20)

Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
 
Rx for iOS App. RxMVVM-DataCenter!
Rx for iOS App. RxMVVM-DataCenter!Rx for iOS App. RxMVVM-DataCenter!
Rx for iOS App. RxMVVM-DataCenter!
 
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
 
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
 
K8s beginner 2_advanced_ep02_201904221130_post
K8s beginner 2_advanced_ep02_201904221130_postK8s beginner 2_advanced_ep02_201904221130_post
K8s beginner 2_advanced_ep02_201904221130_post
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료
 
2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 
iOS Architecture.pdf
iOS Architecture.pdfiOS Architecture.pdf
iOS Architecture.pdf
 
Cloud migration pattern using microservices
Cloud migration pattern using microservicesCloud migration pattern using microservices
Cloud migration pattern using microservices
 
iOS Modular Architecture with Tuist
iOS Modular Architecture with TuistiOS Modular Architecture with Tuist
iOS Modular Architecture with Tuist
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
 
Scalable web architecture
Scalable web architectureScalable web architecture
Scalable web architecture
 
OpenDaylight 소개
OpenDaylight 소개OpenDaylight 소개
OpenDaylight 소개
 
C Language II
C Language IIC Language II
C Language II
 
[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기
 

IoC and DI Pattern