ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1.4.1 오브젝트 팩토리
    책/토비의 스프링 2024. 7. 8. 23:37

    책을 읽고 흘려버리기 보단, 꼭꼭 씹어먹기 위해 정리해봅니다.

    이 포스팅은 이일민님의 <토비의 스프링3>에 기반하고 있습니다.


     

     

    1. 문제의 상황

    어떤 Connection 구현 클래스를 사용할지 UserDao에서 결정하던 부분을 UserDaoTest로 이전해주었습니다.

    이번에는 UserDaoTest가 기능이 잘 동작하는지 테스트하는 것 + 사용될 클래스를 결정하는 것 이렇게 2가지일을 하게 되었습니다.

     

     

    2. 해결방법

    새로운 클래스로 분리하기

    UserDao와 ConnectionMaker를 만드는 일, 그리고 두 객체의 관계를 맺는 일을 전담하는 클래스를 생성한다.

     

     

    3. 팩토리 클래스를 만들기

    오브젝트를 생성하는 측과 사용하는 측을 분리하기 위해 만드는 목적!

    (추상 팩토리 패턴, 팩토리 메소드 패턴과 무관)

     

    더보기
    public class DaoFactory {
      public UserDao userDao() {
        ConnectionMaker nConnectionMaker = new NConnectionMaker();
        UserDao dao = new UserDao(nConnectionMaker);
        return dao;
      }
    }
    
    public class UserDaoTest {
      public static void main(String[] args) throws SQLException, ClassNotFoundException {
    
        UserDao dao = new DaoFactory().userDao();
        dao.deleteAll();
    
        User user = new User();
        user.setId("a3_n283u2");
        user.setName("han");
        user.setPassword("1234");
    
        dao.add(user);
        System.out.println(user.getId() + " 등록 성공");
    
        User user2 = dao.get(user.getId());
        System.out.println(user2.getId() + " 조회 성공");
        System.out.println(user2.getId() + " 조회 성공");
    
      }
    }
    public class DaoFactory {
      public UserDao userDao() {
        ConnectionMaker nConnectionMaker = new NConnectionMaker();
        UserDao dao = new UserDao(nConnectionMaker);
        return dao;
      }
    }

     

    이 책에서는 팩토리 클래스를 설계도라고 표현하고 있다.

    UserDao와 ConnectionMaker가 핵심 로직을 다루고 있다면, Factory는 컴포넌트의 구조와 관계를 정의하고 있다.

     

     

    4. 팩토리 클래스를 만들었을 때의 장점

    - 애플리케이션의 컴포넌트 역할을 하는 오브젝트와 구조를 경정하는 오브젝트를 분리

     

     

     

     

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

    1.3.3 관계설정 책임의 분리  (0) 2024.07.07
    1.3.1 클래스의 분리  (0) 2024.07.07
    1.2.3 DB 커넥션 만들기의 독립  (0) 2024.07.07
    1.2.2 커넥션 만들기의 추출  (0) 2024.07.07
    1.1 초난감 DAO  (0) 2024.07.07
Designed by Tistory.