2012년 12월 31일 월요일

1장 오브젝트와 의존관계

지금부터 된다면 스터디의 목표는
하루는 이론을 나가고
다음날은 코드 테스트
해서 스프링을 최 대한 빠른 시간 내에 격파하는 것을 목표로 잡겠다.

1장. 오브젝트와 의존관계는 기존 스프링 3.0과 같이 1장에서는 기존의 자바에서 JDBC를 가지고 DB와 연결하여 SQL INSERT,SELECT 하는 코드를 살펴 보며, 확장 시 불편한 점과 해결방법을 토대로 스프링의 기본 개념을 설명 하고 있다.

1장에서 제일 중요한 개념은 DI(의존관계 주입),싱글톤 레지스트리이다.

DI란? 스프링에만 있는 용어가 아니다. 오브젝트 사이의 연결을 느슨하게 해주는 개념을 설명한 용어 이다. 
A라는 클래스가 B라는 클래스를 사용할 경우 직접적으로 사용할 경우 B라는 클래스가 변경이 일어날 시 A라는 클래스도 같이 수정해줘야한다. 이렇게 하나인 경우는 상관이 없지만 여러개가 변경 될 경우 B라는 클래스를 바꿨는데 A라는 클래스 까지 바꿔줘야하는 불필요한 일이 등장한다.
그래서 DI라는 개념을 가지고 오브젝트 사이의 연결을 컴파일 때 연결해주는것이 아니라 런타임 시에 연결 시켜줘서 B가 바뀌어도 A라는 클래스가 바뀌지않게 느슨한 결합을 시도한 것이다.
interface를 통해서 DI 구현
Class A----Interface -----Class B

 <코드>
DaoFactory
@Configuration
public class DaoFactory {
 @Bean
 //UserDao 객체를 리턴하는 함수를 만듬
 public UserDao userDao(){
//  ConnectionMaker connectionMaker = new DConnectionMaker();
//  UserDao userDao = new UserDao(connectionMaker);
  return new UserDao(connectionMaker());
 }
 @Bean
 public ConnectionMaker connectionMaker(){
  return new DConnectionMaker();
 }
}
ConnectionMaker
       public interface ConnectionMaker {
       public Connection makeConnection()
              throws ClassNotFoundException,SQLException;
}

싱글톤 레지스트리란? 스프링은 빈을 생성 시 빈이 디자인패턴에서 나오는 싱글톤 패턴과 같이 하나의 객체로 관리 된다. 디자인 패턴의 싱글톤 같은 경우는 객체를 생성할때 메소드를 사용하여야 하는 단점과 속성이 private으로 되어 있어 접근 하기 어렵다는 단점을 가지고 있다.
하지만 스프링의 빈은 싱글톤 패턴은 따르대 단점은 따르지 않고 있다.
<코드>
         UserDao dao = context.getBean("userDao", UserDao.class);
  UserDao dao3 = context.getBean("userDao", UserDao.class);
  UserDao dao4 = context.getBean("userDao", UserDao.class);
  System.out.println(dao3);
  System.out.println(dao4);
ch1.dao.UserDao@441b45 ch1.dao.UserDao@441b45 1장에서 말하는 내용은 스프링이 왜 나왔는지를 말하고 있다. 

댓글 없음:

댓글 쓰기