SlideShare a Scribd company logo
Spring Framework
Spring IoC & DI
Spring IoC 실습
(XML기반, 인터페이스, 세터주입)
Spring Framework_Spring Ioc & DI
Spring IoC & DI
“오라클자바몰”이라는 회사를 만들어서 내가 잘 아는 분야인 차를 팔기로 정했다. 차량의 구매는 현
대자동차와하고, 현대자동차에 돈을 지불하고 차를 받기로 했다.
STS
New → Project → Spring Legacy Project
Project Name : carmaker
Simple Projects : Simple Spring Maven
프로젝트생성후
- 프로젝트 루트 아래의 pom.xml 파일을 오픈 후 스프링 버전을 4.2.0으로 변경
- src/main/java 아래에서 edu.biz.ioc 패키지 생성
<!--Spring -->
<spring-framework.version>4.2.0.RELEASE</spring-framework.version>
2. Spring IoC 실습 (XML 기반, 인터페이스, 세터주입)
Spring Framework_Spring Ioc & DI
2. Spring IoC 실습 (XML 기반, 인터페이스, 세터주입)
Spring Framework_Spring Ioc & DI
package edu.biz.ioc;
public class Money {
private int amount;
public Money() {}
public Money(int amt) {
this.amount = amt;
}
public int getAmount() {
return this.amount;
}
public void setAmount(int amt) {
this.amount = amt;
}
}
[Money.java]
Spring Framework_Spring Ioc & DI
package edu.biz.ioc;
public class Car{
private String name;
public Car(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
[Car.java]
Spring Framework_Spring Ioc & DI
package edu.biz.ioc;
public class HyundaiMaker {
public HyundaiMaker () { } //생성자
public Car sell(Money money) {
System.out.println("I sold a car.");
Car car = new Car(“Sonata”);
return car;
}
}
[HyundaiMaker.java]
[OrderManager.java]
package edu.biz.ioc;
public class OrderManager {
private HyundaiMaker maker;
public OrderManager () {
this.maker = new HyundaiMaker();
}
public void order() {
Car car = this.maker.sell(new Money(1000));
}
}
Spring Framework_Spring Ioc & DI
[src/main/rtesources/ioc.xml]
- Project에서마우스우측버튼-> new -> other -> Spring -> Spring Bean Configuration File
Spring Framework_Spring Ioc & DI
[src/main/rtesources/ioc.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<!—아래부분만코딩하세요
<bean id="orderManager" class="edu.biz.ioc.OrderManager"/>
</beans>
Spring Framework_Spring Ioc & DI
[OrderManagerApp.java]
package edu.biz.ioc;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.*;
import org.springframework.core.io.*;
public class OrderManagerApp {
public static void main(String[] args) {
BeanFactory factory =
new XmlBeanFactory(new FileSystemResource(“src/main/resources/ioc.xml"));
OrderManager manager = (OrderManager)
factory.getBean("orderManager");
manager.order();
}
}
Spring Framework_Spring Ioc & DI
[OrderManagerApp.java]
위 예제에서
 OrderManager와 HyundaiMaker는 서로 떼어 놓을 방법이 없다. 이 두 클래스는 정적으로
결합(coupling)되어있다.
 하나의 버그를 고치면 그 결과 다른 새로운 버그가 생성되는 ‘두더지잡기(whack-a-mole)’
버그를 만든다.
 다른 한편으로 완벽하게 분리된 코드는 아무 일도 못한다.
자바에서 결합도를 떨어뜨리는 일반적인 방법은 구현을 인터페이스 뒤로 숨기는 인터페이스 기반
프로그래밍을 하는 것이다. 이를 통해 클라이언트 클래스에 영향을 주지 않고도 쉽게 구현 클래스
가 교체될 수 있도록 할 수 있다.
Spring Framework_Spring Ioc & DI
package edu.biz.ioc;
public interface CarMaker {
/** 돈을받고차를판다. */
public Car sell(Money money) ;
}
[CarMaker.java]
[HyundaiMaker.java를 인터페이스를 구현하도록 수정]
package edu.biz.ioc;
publicclass HyundaiMaker implements CarMaker{
public HyundaiMaker() {}
public Car sell(Money money) {
System.out.println("I sold a car.");
Car car = new Car("Sonata");
return car;
}
}
Spring Framework_Spring Ioc & DI
[OrderManager.java 수정]
package edu.biz.ioc;
public class OrderManager {
//만약 인터페이스를 사용하지 않는다면 HyundaiMaker 다른 메이커로 교체된다
//면아래의 private CarMaker maker를 포함하여 소스코드가 수정되어야 하지만
//인터페이스를 사용한다면 new HyundaiMaker () 부분만 수정하면 된다.
private CarMaker maker; //인터페이스 타입
public OrderManager() {
//인터페이스 기반이므로 추후 DaewooMaker()로 수정 용이.
this.maker = new HyundaiMaker();}
public void order() {
Car car = this.maker.sell(new Money(1000));
}
}
Spring Framework_Spring Ioc & DI
 수정된 코드에 대한 검토
• 인터페이스 기반이므로 new HyundaiMaker 부분은 쉽게 다른 메이커로 변경 가능하지만 여전히
HyundaiMaker를 new 하고 있음. 강한 의존관계
• 자주 변경되는 구상클래스(Concrete class)에 의존하지 말라.
• 어떤 클래스를 상속받아야 한다면, 기반 클래스를 추상클래스 또는 인터페이스로 만들어서
구현하라.
• 어떤 클래스의 참조를 가져야 한다면 참조 대상이 되는 클래스를 추상클래스, 인터페이스로
정의하라.
• 인터페이스를 만들어서 이 인터페이스에 의존하라. DIP(Dependency Inversion Principle)
“오라클자바몰” 운영 시나리오 –전략수정
나는 사업이 잘 안되었고, 현대자동차도 매우 조건이
안 좋아서 대우자동차로 메이커를 변경하기로 했다.
Spring Framework_Spring Ioc & DI
[DaewooMaker.java]
package edu.biz.ioc;
public class DaewooMaker implements CarMaker{
public DaewooMaker () {}
public Car sell(Money money) {
System.out.println("I sold a car.");
Car car = new Car(“Tosca”);
return car;
}
}
[OrderManager.java 수정]
package edu.biz.ioc;
public class OrderManager {
private CarMaker maker;
public OrderManager(String name) {
this.maker = new DaewooMaker();
}
public void order() {
Car car = this.maker.sell(new Money(1000));
}
}
 실행결과를 확인하여 DaewooMaker로 바뀐 것을
확인하자.
 인스턴스를 생성하는 방법의 문제를 해결하기 위해
스프링 프레임워크의 세터주입을 이용하자.
Spring Framework_Spring Ioc & DI
[OrderManager.java 수정]
public class OrderManager {
private String name;
private CarMaker maker;
public OrderManager() {}
public void order() {
Car car = this.maker.sell(new Money(1000));
}
//setter 메소드를 통해 CarMaker 타입 객체를 주입받는다.
public void setMaker(CarMaker maker) {
this.maker = maker;
}
}
Spring Framework_Spring Ioc & DI
[ioc.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<beans>
<bean id="hyundaiMaker" class=" edu.biz.ioc.HyundaiMaker"/>
<bean id=“daewooMaker" class=" edu.biz.ioc.DaewooMaker"/>
<bean id="orderManager"
class="edu.biz.ioc.OrderManager">
<!-- 세터 주입을 의미 -->
<property name="maker">
<!-- 이부분을 수정하면 소스수정 없이 maker 교체 가능 -->
<ref bean="hyundaiMaker"/>
</property>
</bean>
</beans>
 OrderManager App 실행 후 결과 확인하자.

More Related Content

PPTX
5.Spring IoC&DI(DI와 관련된 어노테이션)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Angular2를 활용한 컴포넌트 중심의 개발
Jin wook
 
PDF
아키텍트가 바라보는 Spring framework
Haeil Yi
 
PPTX
Angular 2 rc5 조사
Rjs Ryu
 
5.Spring IoC&DI(DI와 관련된 어노테이션)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Angular2를 활용한 컴포넌트 중심의 개발
Jin wook
 
아키텍트가 바라보는 Spring framework
Haeil Yi
 
Angular 2 rc5 조사
Rjs Ryu
 

What's hot (20)

PDF
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
세미나 Spring mybatis
Somang Jeong
 
PPT
Spring MVC
ymtech
 
PDF
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Spring IoC
Suan Lee
 
PPTX
Spring boot DI
Hyosang Hong
 
PPTX
Springmvc
HyungKuIm
 
PDF
Implementing_AOP_in_Spring_SYS4U
sys4u
 
PDF
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Angular2 NgModule
Peter YoungSik Yun
 
PDF
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
Spring@mvc웹호스팅
J.H Ahn
 
PPTX
Spring boot
Hyosang Hong
 
PPTX
Angular2를 위한 타입스크립트
Jin wook
 
PDF
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Angular2를 위한 컴포넌트 분석과 개발
Jin wook
 
PPTX
Spring mvc
ksain
 
PPTX
AngularJS의 개발방식에 대하여
Jin wook
 
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
세미나 Spring mybatis
Somang Jeong
 
Spring MVC
ymtech
 
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Spring IoC
Suan Lee
 
Spring boot DI
Hyosang Hong
 
Springmvc
HyungKuIm
 
Implementing_AOP_in_Spring_SYS4U
sys4u
 
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Angular2 NgModule
Peter YoungSik Yun
 
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Spring@mvc웹호스팅
J.H Ahn
 
Spring boot
Hyosang Hong
 
Angular2를 위한 타입스크립트
Jin wook
 
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Angular2를 위한 컴포넌트 분석과 개발
Jin wook
 
Spring mvc
ksain
 
AngularJS의 개발방식에 대하여
Jin wook
 
Ad

Similar to 3.Spring IoC&DI(spring ioc실습, XML기반) (20)

PPTX
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Spring Boot + React + Gradle in VSCode
dpTablo
 
PPTX
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
DK Lee
 
PDF
okspring3x
Kenu, GwangNam Heo
 
PDF
Spring vs. spring boot
ChloeChoi23
 
PDF
04.실행환경 교육교재(화면처리)
Hankyo
 
PDF
드래그홈2010홈페이지제안서
draghome
 
PDF
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
SangIn Choung
 
PDF
우아한테크세미나-우아한멀티모듈
용근 권
 
PPTX
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
[NEXT] Andorid에 MVC 패턴 적용하기
YoungSu Son
 
PDF
Spring Framework - Inversion of Control Container
Kyung Koo Yoon
 
PPTX
요즘웹개발
Lee MyoungKyu
 
PPTX
Spring boot-summary(part2-part3)
Jaesup Kwak
 
PDF
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
Myungjin Lee
 
PDF
Using AdoRepository
Sunghyouk Bae
 
PDF
Front end dev 2016 & beyond
Jae Sung Park
 
ODP
Design pattern 4
Daniel Lim
 
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Spring Boot + React + Gradle in VSCode
dpTablo
 
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
DK Lee
 
okspring3x
Kenu, GwangNam Heo
 
Spring vs. spring boot
ChloeChoi23
 
04.실행환경 교육교재(화면처리)
Hankyo
 
드래그홈2010홈페이지제안서
draghome
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
SangIn Choung
 
우아한테크세미나-우아한멀티모듈
용근 권
 
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[NEXT] Andorid에 MVC 패턴 적용하기
YoungSu Son
 
Spring Framework - Inversion of Control Container
Kyung Koo Yoon
 
요즘웹개발
Lee MyoungKyu
 
Spring boot-summary(part2-part3)
Jaesup Kwak
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
Myungjin Lee
 
Using AdoRepository
Sunghyouk Bae
 
Front end dev 2016 & beyond
Jae Sung Park
 
Design pattern 4
Daniel Lim
 
Ad

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

PDF
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[IT교육/IT학원]Develope를 위한 IT실무교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[IT교육/IT학원]Develope를 위한 IT실무교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

3.Spring IoC&DI(spring ioc실습, XML기반)

  • 1. Spring Framework Spring IoC & DI Spring IoC 실습 (XML기반, 인터페이스, 세터주입)
  • 2. Spring Framework_Spring Ioc & DI Spring IoC & DI “오라클자바몰”이라는 회사를 만들어서 내가 잘 아는 분야인 차를 팔기로 정했다. 차량의 구매는 현 대자동차와하고, 현대자동차에 돈을 지불하고 차를 받기로 했다. STS New → Project → Spring Legacy Project Project Name : carmaker Simple Projects : Simple Spring Maven 프로젝트생성후 - 프로젝트 루트 아래의 pom.xml 파일을 오픈 후 스프링 버전을 4.2.0으로 변경 - src/main/java 아래에서 edu.biz.ioc 패키지 생성 <!--Spring --> <spring-framework.version>4.2.0.RELEASE</spring-framework.version> 2. Spring IoC 실습 (XML 기반, 인터페이스, 세터주입)
  • 3. Spring Framework_Spring Ioc & DI 2. Spring IoC 실습 (XML 기반, 인터페이스, 세터주입)
  • 4. Spring Framework_Spring Ioc & DI package edu.biz.ioc; public class Money { private int amount; public Money() {} public Money(int amt) { this.amount = amt; } public int getAmount() { return this.amount; } public void setAmount(int amt) { this.amount = amt; } } [Money.java]
  • 5. Spring Framework_Spring Ioc & DI package edu.biz.ioc; public class Car{ private String name; public Car(String name) { this.name = name; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } } [Car.java]
  • 6. Spring Framework_Spring Ioc & DI package edu.biz.ioc; public class HyundaiMaker { public HyundaiMaker () { } //생성자 public Car sell(Money money) { System.out.println("I sold a car."); Car car = new Car(“Sonata”); return car; } } [HyundaiMaker.java] [OrderManager.java] package edu.biz.ioc; public class OrderManager { private HyundaiMaker maker; public OrderManager () { this.maker = new HyundaiMaker(); } public void order() { Car car = this.maker.sell(new Money(1000)); } }
  • 7. Spring Framework_Spring Ioc & DI [src/main/rtesources/ioc.xml] - Project에서마우스우측버튼-> new -> other -> Spring -> Spring Bean Configuration File
  • 8. Spring Framework_Spring Ioc & DI [src/main/rtesources/ioc.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"> <!—아래부분만코딩하세요 <bean id="orderManager" class="edu.biz.ioc.OrderManager"/> </beans>
  • 9. Spring Framework_Spring Ioc & DI [OrderManagerApp.java] package edu.biz.ioc; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.xml.*; import org.springframework.core.io.*; public class OrderManagerApp { public static void main(String[] args) { BeanFactory factory = new XmlBeanFactory(new FileSystemResource(“src/main/resources/ioc.xml")); OrderManager manager = (OrderManager) factory.getBean("orderManager"); manager.order(); } }
  • 10. Spring Framework_Spring Ioc & DI [OrderManagerApp.java] 위 예제에서  OrderManager와 HyundaiMaker는 서로 떼어 놓을 방법이 없다. 이 두 클래스는 정적으로 결합(coupling)되어있다.  하나의 버그를 고치면 그 결과 다른 새로운 버그가 생성되는 ‘두더지잡기(whack-a-mole)’ 버그를 만든다.  다른 한편으로 완벽하게 분리된 코드는 아무 일도 못한다. 자바에서 결합도를 떨어뜨리는 일반적인 방법은 구현을 인터페이스 뒤로 숨기는 인터페이스 기반 프로그래밍을 하는 것이다. 이를 통해 클라이언트 클래스에 영향을 주지 않고도 쉽게 구현 클래스 가 교체될 수 있도록 할 수 있다.
  • 11. Spring Framework_Spring Ioc & DI package edu.biz.ioc; public interface CarMaker { /** 돈을받고차를판다. */ public Car sell(Money money) ; } [CarMaker.java] [HyundaiMaker.java를 인터페이스를 구현하도록 수정] package edu.biz.ioc; publicclass HyundaiMaker implements CarMaker{ public HyundaiMaker() {} public Car sell(Money money) { System.out.println("I sold a car."); Car car = new Car("Sonata"); return car; } }
  • 12. Spring Framework_Spring Ioc & DI [OrderManager.java 수정] package edu.biz.ioc; public class OrderManager { //만약 인터페이스를 사용하지 않는다면 HyundaiMaker 다른 메이커로 교체된다 //면아래의 private CarMaker maker를 포함하여 소스코드가 수정되어야 하지만 //인터페이스를 사용한다면 new HyundaiMaker () 부분만 수정하면 된다. private CarMaker maker; //인터페이스 타입 public OrderManager() { //인터페이스 기반이므로 추후 DaewooMaker()로 수정 용이. this.maker = new HyundaiMaker();} public void order() { Car car = this.maker.sell(new Money(1000)); } }
  • 13. Spring Framework_Spring Ioc & DI  수정된 코드에 대한 검토 • 인터페이스 기반이므로 new HyundaiMaker 부분은 쉽게 다른 메이커로 변경 가능하지만 여전히 HyundaiMaker를 new 하고 있음. 강한 의존관계 • 자주 변경되는 구상클래스(Concrete class)에 의존하지 말라. • 어떤 클래스를 상속받아야 한다면, 기반 클래스를 추상클래스 또는 인터페이스로 만들어서 구현하라. • 어떤 클래스의 참조를 가져야 한다면 참조 대상이 되는 클래스를 추상클래스, 인터페이스로 정의하라. • 인터페이스를 만들어서 이 인터페이스에 의존하라. DIP(Dependency Inversion Principle) “오라클자바몰” 운영 시나리오 –전략수정 나는 사업이 잘 안되었고, 현대자동차도 매우 조건이 안 좋아서 대우자동차로 메이커를 변경하기로 했다.
  • 14. Spring Framework_Spring Ioc & DI [DaewooMaker.java] package edu.biz.ioc; public class DaewooMaker implements CarMaker{ public DaewooMaker () {} public Car sell(Money money) { System.out.println("I sold a car."); Car car = new Car(“Tosca”); return car; } } [OrderManager.java 수정] package edu.biz.ioc; public class OrderManager { private CarMaker maker; public OrderManager(String name) { this.maker = new DaewooMaker(); } public void order() { Car car = this.maker.sell(new Money(1000)); } }  실행결과를 확인하여 DaewooMaker로 바뀐 것을 확인하자.  인스턴스를 생성하는 방법의 문제를 해결하기 위해 스프링 프레임워크의 세터주입을 이용하자.
  • 15. Spring Framework_Spring Ioc & DI [OrderManager.java 수정] public class OrderManager { private String name; private CarMaker maker; public OrderManager() {} public void order() { Car car = this.maker.sell(new Money(1000)); } //setter 메소드를 통해 CarMaker 타입 객체를 주입받는다. public void setMaker(CarMaker maker) { this.maker = maker; } }
  • 16. Spring Framework_Spring Ioc & DI [ioc.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"> <beans> <bean id="hyundaiMaker" class=" edu.biz.ioc.HyundaiMaker"/> <bean id=“daewooMaker" class=" edu.biz.ioc.DaewooMaker"/> <bean id="orderManager" class="edu.biz.ioc.OrderManager"> <!-- 세터 주입을 의미 --> <property name="maker"> <!-- 이부분을 수정하면 소스수정 없이 maker 교체 가능 --> <ref bean="hyundaiMaker"/> </property> </bean> </beans>  OrderManager App 실행 후 결과 확인하자.