advanced java programming n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
고급자바프로그래밍 (Advanced Java Programming) PowerPoint Presentation
Download Presentation
고급자바프로그래밍 (Advanced Java Programming)

Loading in 2 Seconds...

play fullscreen
1 / 20

고급자바프로그래밍 (Advanced Java Programming) - PowerPoint PPT Presentation


  • 117 Views
  • Uploaded on

고급자바프로그래밍 (Advanced Java Programming). 강원대학교 컴퓨터학부 2012 년 가을학기 담당교수 정충교. 1.4 제어의 역전 ( IoC - Inversion of Control). 애플리케이션 코드가 프레임워크에 의해 제어됨 1.4.3 제어권 이전을 통한 제어관계 역전 메인 메소드 없이 프레임워크에 의해 프로그램들이 실행됨. 1.3.3 관계설정 책임의 분리. 관계설정 책임을 담당하는 클라이언트 userDaoTest 추가

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '고급자바프로그래밍 (Advanced Java Programming)' - tovah


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
advanced java programming

고급자바프로그래밍(Advanced Java Programming)

강원대학교컴퓨터학부

2012년 가을학기

담당교수정충교

1 4 ioc inversion of control
1.4 제어의 역전 (IoC - Inversion of Control)

애플리케이션 코드가 프레임워크에 의해 제어됨

1.4.3 제어권 이전을 통한 제어관계 역전

메인 메소드 없이 프레임워크에 의해 프로그램들이 실행됨

1 3 3
1.3.3 관계설정 책임의 분리
  • 관계설정 책임을 담당하는 클라이언트 userDaoTest추가
  • 특정 ConnectionMaker이름이 들어 있지 않은 “범용” UserDao가 됨
  • 어떤 ConnectionMaker를 사용할지 클라이언트가 결정해줌
  • 리스트 1-11, 리스트 1-12, 리스트 1-13
  • spring30-1.3.3
1 4 1
1.4.1 오브젝트 팩토리

클라이언트 기능 중 테스트 기능과 관계설정기능을 분리

public class UserDaoFactory {

public UserDaouserDao() {

UserDaodao = new UserDao(connectionMaker());

return dao;

}

public ConnectionMakerconnectionMaker() {

ConnectionMakerconnectionMaker = new DConnectionMaker();

return connectionMaker;

}

}

public class UserDaoTest {

public static void main(String[] args)

throws ClassNotFoundException, SQLException {

UserDaodao = new UserDaoFactory().userDao();

...

1 5 ioc
1.5 스프링의 IoC

1.5.1 오브젝트 팩토리를 이용한 스프링 IoC

스프링 빈 (bean)

스프링에 의해 제어되는 오브젝트

스프링이 만들고 관계를 부여함

빈 팩토리

빈의 생성과 관계 설정을 담당

Application context

빈 팩토리를 확장한 것

slide7
스프링 설정

ApplicationContext가 필요로 하는 정보

어떤 bean을 어떤 클래스로부터 생성할지

오브젝트간 관계는 어떻게 설정할지

ApplicationContext에게 정보를 제공하는 방법

애노테이션이 첨가된 자바 코드

xml 설정 파일

applicationcontext
ApplicationContext에게 정보를 제공하는 방법

애노테이션이 첨가된 자바 코드

리스트 1-18

리스트 1-19

ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class);

UserDaodao = context.getBean("userDao", UserDao.class);

spring30-1.5.1

applicationcontext1
ApplicationContext에게 정보를 제공하는 방법

xml 설정 파일

리스트 1-40

ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");

UserDaodao = context.getBean("userDao", UserDao.class);

1 7 di dependency injection
1.7 의존관계 주입 (DI – Dependency Injection)

1.7.1 IoC and DI

1.7.2 런타임 의존관계

  • 인터페이스를 통한
  • 느슨한 결합을 갖는 의존관계
  • 런타임에 오브젝트간 의존관계가 결정됨
  • 클래스의 의존관계
  • 고정된 의존관계
slide11
의존관계 주입 (DI)
  • 어떤 객체가 사용할 (의존할) 대상 객체를 런타임에 지정해 주는 작업
    • 두 클래스가 인터페이스에의 의해 느슨하게 결합한다. 클래스 코드에는 클래스간 런타임 의존관계가 나타나지 않는다.
    • 런타임 의존관계는 컨테이너나 팩토리같은 제 3자가 결정한다.
    • 의존관계는 사용할 오브젝트 레퍼런스를 제공(주입)해 줌으로써 만들어진다.
3 userdao connectionmaker di userdao setter
제 3자가 런타임에 UserDao객체에게 ConnectionMaker객체를 주입(DI)하려면 UserDao의 코드가 아래와 같은 생성자를 갖거나 setter 메소드를 가져야 함

public class UserDao {

private ConnectionMakerconnectionMaker;

public ConnectionMaker(ConnectionMakerconnectionMaker) {

this.connectionMaker = connectionMaker;

}

public void setConnectionMaker(ConnectionMakersimpleConnectionMaker) {

this.connectionMaker = simpleConnectionMaker;

}

런타임 의존관계 주입에 의한 객체간 의존관계

1 8 xml
1.8 XML을 이용한 설정

<beans>

<bean id="myConnectionMaker" class="springbook.user.dao.DConnectionMaker">

</bean>

<bean id="userDao" class="springbook.user.dao.UserDao">

<property name="connectionMaker" ref="myConnectionMaker" />

</bean>

</beans>

public class UserDao {

private ConnectionMakerconnectionMaker;

public void setConnectionMaker(ConnectionMakerconnectionMaker) {

this.connectionMaker = connectionMaker;

}

1 8 3 datasource 1 8 4
1.8.3 DataSource인터페이스로 변환 1.8.4 프로퍼티 값 주입
  • ConnectionMaker대신 javax.sql.DataSource를 사용
  • 리스트 1-41
  • 리스트 1-42 DataSource를 사용하는 UserDao
  • 리스트 1-48 dataSource를 bean으로 등록하는 xml 설정
slide15
1.6 싱글톤레지스트리와 오브젝트 스코프
  • 스프링의 애플리케이션 컨텍스트가 생성하는 빈은 기본적으로 싱글톤임
    • 싱글톤(Singleton) - 두 개 이상의 인스턴스들이 동시에 존재할 수 없는 클래스, 항상 한 개의 인스턴스만을 가짐
    • 클래스를 작성할 때 두 개 이상의 인스턴스를 만들 수 없도록 코드를 작성할 수 있음 (싱클톤 클래스)
    • (싱글톤 클래스를 작성하는 방법 - 교재 108쪽 하단 - 109쪽 상단 참고)
  • 스프링의 애플리케이션 컨텍스트는 빈을 만들 때 기본적으로 싱글톤으로만듬(클래스가 싱글톤 패턴에 맞춰 작성된 것이 아니라도)
    • 싱글톤이되지 않도록 설정하는 것도 가능
    • 엔터프라이즈 애플리케이션은 서버로 작동하므로 각 사용자 요청마다 빈을 만들면 서버 성능에 문제가 생기므로...
slide16

UserDao, ConnectionMaker는 빈이다.

  • User는 빈이 아니다.
  • 싱글톤인 빈을 설계할 때 인스턴스 필드 지정에 신중해야 함
  • 각 사용자의 요청을 처리하는 쓰레드들이 동시에 하나의 빈을 실행하므로 인스턴스 필드에 상태정보를 저장할 수 없음
slide17
잘 못된 예

public class UserDao {

private DataSourcedataSource;

private Connection c;

private User user;

public void setDataSource(DataSourcedataSource) {

this.dataSource = dataSource;

}

public User get(String id) throws SQLException {

User user = new User();

Connection c = this.dataSource.getConnection();

PreparedStatementps = c.prepareStatement(...);

...

}

1 7 4
1.7.4 의존관계 주입의 응용
  • 기능 구현의 교환
    • LocalDBConnectionMaker <--> ProductDBConnectionMaker
  • 부가기능추가
    • 개발 중 DB 연결 횟수를 세고 싶다. (부가기능)
    • Dao에 이 기능을 추가하는 것은 좋지 않다.
    • 개발 후 모두 제거해야 하므로
    • Dao의 관심사항이 아니므로 (Dao의 응집도!)
dao connectionmaker
Dao와 connectionMaker사이에 연결횟수를세는 (부가기능) 오브젝트를 삽입
  • 리스트 1-30 <----- 매우 중요!
  • 기존 런타임 오브젝트 의존관계
  • CountingConnectionMaker를 적용한 후의 오브젝트 런타임 의존관계