오브젝트 팩토리
- 팩토리 : 객체의 생성 방법을 결정하는 클래스
- 오브젝트 생성을 하나의 관심사로 분리할 때 사용함.
- ex. UserDao 코드에서 DaoFactory 클래스를 통해 UserDao 오브젝트 생성 관심을 분리할 때 사용
설계도로서의 팩토리
- UserDao에서는 실질적인 로직, DaoFactory에서는 애플리케이션의 오브젝트 구성과 그 관계가 정의되어 있음
- ex. DaoFactory에서 UseDao와 ConnectionMaker 간의 관계를 확인할 수 있음.
- 애플리케이션의 실제 로직과 오브젝트 관리 부분을 분리 가능
오브젝트 팩토리 활용하기
import java.sql.Connection;
public class DaoFactory {
public UserDao userDao(){
return new UserDao(connectionMaker());
}
public MessageDao messageDao(){
return new MessageDao(connectionMaker());
}
public ConnectionMaker connectionMaker(){
return new DConnectionMaker();
}
}
-
이렇게 되면, connectionMaker()를 호출하는 것 만으로 적절한 ConnectionMaker 구현체를 갖고올 수 있다.
→ 코드 중복을 줄일 수 있고, 수정 ( 다른 DB Connection이 필요한 경우 )에 용이함.
제어권 이전을 통한 제어관계 역전
- 일반적인 흐름
- 모든 종류의 작업을 사용자가 정의해야 한다.
- 각 오브젝트가 프로그램의 흐름을 결정하고 능동적으로 오브젝트 구성에 참여
- 라이브러리의 경우, 애플리케이션 코드에 따라서 프로그램이 실행되므로 일반적인 흐름임.
- 제어 역전 ( IoC )
- 기존의 일반적인 흐름을 거꾸로 뒤집는 것
- 특별한 오브젝트가 모든 오브젝트의 생성과 관리에 대한 권한을 위임받아서 관리함.
- 프레임워크의 경우, 우리가 작성한 코드를 사용해서 프레임워크가 작동하는 제어 역전을 따름 (IoC)
- 특정 오브젝트 (DaoFactory)에 오브젝트의 생성과 관리(UserDao, ConnectionMaker)를 결정하도록 하는 것이 IoC이다.