-
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