SlideShare a Scribd company logo
스프링프레임워크 & 마이바티스
(Spring Framework, MyBatis)
2-2. Spring Ioc 실습(XML 기반, 인터페이스, 세터주입)
“오라클자바몰”이라는 회사를 만들어서 내가 잘아는 분야인 차를 팔기로 정했다. 차량의 구매는
현대자동차와 하고, 현대자동차에 돈을 지불하고 차를 받기로 했다.
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>
[Money.java]
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;
}
}
[Car.java]
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;
}
}
[HyundaiMaker.java]
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;
}
}
[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));
}
}
[src/main/rtesources/ioc.xml]
Project에서 마우스 우측버튼 -> new -> other -> Spring -> Spring Bean Configuration File
<?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>
[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();
}
}
위 예제에서
 OrderManager와 HyundaiMaker는 서로 떼어 놓을 방법이 없다. 이 두 클래스는 정적으로 결
합(coupling)되어 있다
 하나의 버그를 고치면 그 결과 다른 새로운 버그가 생성되는 „두더지잡기(whack-a-mole)‟ 버
그를 만든다.
 다른 한편으로 완벽하게 분리된 코드는 아무일 도 못한다.
자바에서 결합도를 떨어뜨리는 일반적인 방법은 구현을 인터페이스 뒤로 숨기는 인터페
이스 기반 프로그래밍을 하는 것이다. 이를 통해 클라이언트 클래스에 영향을 주지 않고
도 쉽게 구현 클래스가 교체될 수 있도록 할 수 있다.
[CarMaker.java]
package edu.biz.ioc;
public interface CarMaker {
/** 돈을 받고 차를 판다. */
public Car sell(Money money) ;
}
[HyundaiMaker.java를 인터페이스를 구현하도록 수정]
package edu.biz.ioc;
public class HyundaiMaker implements CarMaker{
public HyundaiMaker() { }
public Car sell(Money money) {
System.out.println("I sold a car.");
Car car = new Car("Sonata");
return car;
}
}
[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));
}
}
 수정된 코드에 대한 검토
- 인터페이스 기반이므로 new HyundaiMaker 부분은 쉽게 다른 메이커로 변경 가능하지만
여전히 HyundaiMaker를 new 하고 있음. 강한 의존관계
- 자주 변경되는 구상클래스(Concrete class)에 의존하지 말라.
- 어떤 클래스를 상속받아야 한다면 , 기반 클래스를 추상 클래스 또는 인터페이스로 만들
어서 구현하라.
- 어떤 클래스의 참조를 가져야 한다면 참조 대상이 되는 클래스를 추상 클래스, 인터페이
스로 정의하라.
- 인터페이스를 만들어서 이 인터페이스에 의존하라. DIP(Dependency Inversion Principle)
[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로 바뀐것을 확인하자.
인스턴스를 생성하는 방법의 문제를 해결하기 위해 스프링 프레임워크의 세터주입을 이용하자.
[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;
}
}
[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/bean
s 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>
OrderManagerApp 실행 후 결과 확인하자.

More Related Content

PPTX
C#,자마린실습(Hello 안드로이드,이뮬레이터와 휴대폰에서 직접실행)_닷넷기초/C#기초/자마린,Xamarin 앱개발강좌
PPTX
Angular2를 위한 타입스크립트
PPTX
3.Spring IoC&DI(spring ioc실습, XML기반)
PPTX
Angular2를 활용한 컴포넌트 중심의 개발
PDF
Xamarin.Android(자마린.안드로이드) HelloWorld2_크로스플랫폼 자마린교육, 자마린을 잡으세요~
PPTX
Angular2 가기전 Type script소개
PDF
(탑크리에듀 Xamarin강좌)자마린 안드로이드 HelloWorld 따라하기_Xamarin교육/자마린교육/자마린강좌
PDF
ReactJS | 서버와 클라이어트에서 동시에 사용하는
C#,자마린실습(Hello 안드로이드,이뮬레이터와 휴대폰에서 직접실행)_닷넷기초/C#기초/자마린,Xamarin 앱개발강좌
Angular2를 위한 타입스크립트
3.Spring IoC&DI(spring ioc실습, XML기반)
Angular2를 활용한 컴포넌트 중심의 개발
Xamarin.Android(자마린.안드로이드) HelloWorld2_크로스플랫폼 자마린교육, 자마린을 잡으세요~
Angular2 가기전 Type script소개
(탑크리에듀 Xamarin강좌)자마린 안드로이드 HelloWorld 따라하기_Xamarin교육/자마린교육/자마린강좌
ReactJS | 서버와 클라이어트에서 동시에 사용하는

What's hot (20)

PPTX
AngularJS의 개발방식에 대하여
PPTX
Angular2 router&http
PPTX
5.Spring IoC&DI(DI와 관련된 어노테이션)
PDF
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
PDF
Protocol Oriented Programming in Swift
PPTX
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
PDF
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
PPTX
Angular 2 rc5 조사
PDF
01.실행환경 실습교재(공통기반)
PDF
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
PPTX
Angular2 NgModule
PDF
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
PDF
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
PDF
자바스크립트 프레임워크 살펴보기
PDF
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
PPTX
(AngularJS,React를 위한 자바스크립트)getter, setter of class_AngularJS교육/ReactJS교육/자바스...
PDF
스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
PDF
06.실행환경 실습교재(easy company,해답)
AngularJS의 개발방식에 대하여
Angular2 router&http
5.Spring IoC&DI(DI와 관련된 어노테이션)
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
Protocol Oriented Programming in Swift
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
Angular 2 rc5 조사
01.실행환경 실습교재(공통기반)
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
Angular2 NgModule
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
자바스크립트 프레임워크 살펴보기
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(AngularJS,React를 위한 자바스크립트)getter, setter of class_AngularJS교육/ReactJS교육/자바스...
스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
06.실행환경 실습교재(easy company,해답)
Ad

Viewers also liked (14)

PDF
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
PDF
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
PDF
[스프링/Spring교육학원,자바교육,근로자교육,실업자교육추천학원_탑크리에듀]#6.스프링프레임워크 & 마이바티스 (Spring Framew...
PDF
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
PDF
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
PDF
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
PDF
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
PDF
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
PPTX
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
PDF
#11.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원학원,재직자/실업자교육학원,스프링교육,마이바...
PDF
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
[스프링/Spring교육학원,자바교육,근로자교육,실업자교육추천학원_탑크리에듀]#6.스프링프레임워크 & 마이바티스 (Spring Framew...
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
#11.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원학원,재직자/실업자교육학원,스프링교육,마이바...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
Ad

Similar to (탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis) (20)

PPTX
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
PDF
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
PPTX
[자바카페] 자바 객체지향 프로그래밍 (2017)
PPTX
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
PPTX
객체지향 프로그래밍 기본
PDF
Java(2/4)
PPTX
객체지향프로그래밍 특강
PDF
Spring Framework - Inversion of Control Container
PPTX
[HaU] 신입 기술 면접 준비 java
PDF
자바 웹 개발 시작하기 (4주차 : MVC)
PPTX
[스프링 스터디 1일차] 오브젝트와 의존관계
PDF
[오픈소스컨설팅]Spring 3.1 Core
PDF
Java 강의자료 ed11
PDF
Java programming pdf
PDF
스프링 스터디 1장
PPTX
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
PPTX
[Spring]오브젝트와 의존관계
PDF
Spring 교육 자료
PDF
Spring 교육 자료
PDF
11장 시스템
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
[자바카페] 자바 객체지향 프로그래밍 (2017)
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
객체지향 프로그래밍 기본
Java(2/4)
객체지향프로그래밍 특강
Spring Framework - Inversion of Control Container
[HaU] 신입 기술 면접 준비 java
자바 웹 개발 시작하기 (4주차 : MVC)
[스프링 스터디 1일차] 오브젝트와 의존관계
[오픈소스컨설팅]Spring 3.1 Core
Java 강의자료 ed11
Java programming pdf
스프링 스터디 1장
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
[Spring]오브젝트와 의존관계
Spring 교육 자료
Spring 교육 자료
11장 시스템

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

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

(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

  • 1. 스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis) 2-2. Spring Ioc 실습(XML 기반, 인터페이스, 세터주입) “오라클자바몰”이라는 회사를 만들어서 내가 잘아는 분야인 차를 팔기로 정했다. 차량의 구매는 현대자동차와 하고, 현대자동차에 돈을 지불하고 차를 받기로 했다. 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. [Money.java] 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; } } [Car.java] package edu.biz.ioc;
  • 3. 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; } } [HyundaiMaker.java] 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; } } [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)); } }
  • 4. [src/main/rtesources/ioc.xml] Project에서 마우스 우측버튼 -> new -> other -> Spring -> Spring Bean Configuration File
  • 5. <?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> [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"));
  • 6. OrderManager manager = (OrderManager) factory.getBean("orderManager"); manager.order(); } } 위 예제에서  OrderManager와 HyundaiMaker는 서로 떼어 놓을 방법이 없다. 이 두 클래스는 정적으로 결 합(coupling)되어 있다  하나의 버그를 고치면 그 결과 다른 새로운 버그가 생성되는 „두더지잡기(whack-a-mole)‟ 버 그를 만든다.  다른 한편으로 완벽하게 분리된 코드는 아무일 도 못한다. 자바에서 결합도를 떨어뜨리는 일반적인 방법은 구현을 인터페이스 뒤로 숨기는 인터페 이스 기반 프로그래밍을 하는 것이다. 이를 통해 클라이언트 클래스에 영향을 주지 않고 도 쉽게 구현 클래스가 교체될 수 있도록 할 수 있다. [CarMaker.java] package edu.biz.ioc; public interface CarMaker { /** 돈을 받고 차를 판다. */ public Car sell(Money money) ; } [HyundaiMaker.java를 인터페이스를 구현하도록 수정] package edu.biz.ioc; public class HyundaiMaker implements CarMaker{
  • 7. public HyundaiMaker() { } public Car sell(Money money) { System.out.println("I sold a car."); Car car = new Car("Sonata"); return car; } } [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)); } }  수정된 코드에 대한 검토 - 인터페이스 기반이므로 new HyundaiMaker 부분은 쉽게 다른 메이커로 변경 가능하지만 여전히 HyundaiMaker를 new 하고 있음. 강한 의존관계 - 자주 변경되는 구상클래스(Concrete class)에 의존하지 말라. - 어떤 클래스를 상속받아야 한다면 , 기반 클래스를 추상 클래스 또는 인터페이스로 만들 어서 구현하라. - 어떤 클래스의 참조를 가져야 한다면 참조 대상이 되는 클래스를 추상 클래스, 인터페이 스로 정의하라. - 인터페이스를 만들어서 이 인터페이스에 의존하라. DIP(Dependency Inversion Principle)
  • 8. [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(); }
  • 9. public void order() { Car car = this.maker.sell(new Money(1000)); } } 실행결과를 확인하여 DaewooMaker로 바뀐것을 확인하자. 인스턴스를 생성하는 방법의 문제를 해결하기 위해 스프링 프레임워크의 세터주입을 이용하자. [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; } } [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/bean s 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"> <!-- 세터 주입을 의미 -->
  • 10. <property name="maker"> <!-- 이부분을 수정하면 소스수정 없이 maker 교체 가능 --> <ref bean="hyundaiMaker"/> </property> </bean> </beans> OrderManagerApp 실행 후 결과 확인하자.