본문 바로가기
Programming/토비의 스프링 예제

예제7. 팩토리

by 막이 2014. 8. 20.

UserDaoTest는 UserDao의 기능이 잘 동작하는지를 테스하려고 만든 것임으로 책임이나 관심사를 분리해버려야 한다.

분리될 기능 : UserDao와 Connection 구현 클래스의 오브젝트를 만드는 것

그렇게 만들어진 두개의 오브젝트가 연결돼서 사용될 수 있또록 관계를 맺어 주는 것


팩토리 : 객체의 생성 방법을 결정하고 그렇게 만들어진 오브젝트를 돌려줌. 오브젝트를 생성하는 쪽과 생성된 오브젝트를 사용하는 쪽의 역할과 책임을 깔끔하게 분리하려는 목적으료 사용.


DaoFactory.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package springbook.user.dao;
 
public class DaoFactory {
    
    //팩토리의 메소드는 UserDao 타입의 오브젝트를 어떻게 만들고 ,어떻게 준비시킬지를 결정한다.
    public UserDao userDao(){
        //UserDao가 사용할 ConnectionMaker 구현 클래스를 결정하고 오브젝트를 만든다.
        ConnectionMaker connectionMaker = new DConnectionMaker();
        /*
         * 1. UesrDao생성
         * 2. 사용한 ConnectionMaker 타입의 오브젝트 제공
         * 결국 두 오브젝트 사이의 의존관계 설정 효과
         */
        UserDao dao = new UserDao(connectionMaker);
        return dao;
    }
 
}
 


UserDaoTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package springbook.user.test;
 
import java.sql.SQLException;
 
import springbook.user.dao.ConnectionMaker;
import springbook.user.dao.DConnectionMaker;
import springbook.user.dao.DaoFactory;
import springbook.user.dao.UserDao;
import springbook.user.domain.User;
 
public class UserDaoTest {
    
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        
        UserDao dao = new DaoFactory().userDao();
        
 
        User user = new User();
        user.setId("otep");
        user.setName("황은주");
        user.setPassword("password");
        
        dao.add(user);
        
        System.out.println(user.getId()+" 등록 성공 ");
        
        User user2 = dao.get(user.getId());
        System.out.println(user2.getName());
        System.out.println(user2.getPassword());
        System.out.println(user2.getId()+" 조회 성공 ");
    }
 
}
 


'Programming > 토비의 스프링 예제' 카테고리의 다른 글

예제9. 관계설정  (0) 2014.08.26
예제8. 생성 오브젝트 코드 수정  (0) 2014.08.21
예제6. 관심사의 분리  (0) 2014.08.20
예제5. 인터페이스의 도입  (0) 2014.08.20
예제4. 클래스의 분리  (0) 2014.08.20