오브젝트 팩토리
팩토리
객체의 생성 방법을 결정하고 만들어진 오브젝트를 돌려주는 일을 하는 오브젝트
public class UserDaoFactory {
public UserDao userDao() {
UserDao dao = new UserDao(connectionMaker());
return dao;
}
public ConnectionMaker connectionMaker() {
ConnectionMaker connectionMaker = new DConnectionMaker();
return connectionMaker;
}
}
팩토리는 ConnectionMaker 메서드를 통해 어떤 커넥션 메이커를 사용할지 정하고
UserDao 메서드를 사용하여 최종적으로 UserDao 오브젝트를 리턴한다.
public class UserDaoTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
UserDao dao = new UserDaoFactory().userDao();
//기존의 코드
}
}
팩토리로부터 생성된 UserDao를 통해 기존과 같이 작업을 처리한다.
이렇게 코드를 작성하면 기존에 Test 클라이언트에서 오브젝트를 생성하고 전달하던 작업을
팩토리에 넘겨서 클라이언트는 온전히 자신의 역할만 수행하게 된다.
설계도와 팩토리
UserDao와 ConnectionMaker는 애플리케이션의 핵심 로직들을 담당하는 컴포넌트라고 볼 수 있고,
팩토리는 이런 오브젝트들을 구성하고 관계를 정의하는 설계도 같은 역할이다.
이렇게 팩토리를 통해 컴포넌트 오브젝트와 구조 오브젝트를 분리하여
컴포넌트 오브젝트들의 코드를 안전하게 보존할 수 있고 자유로운 확장이 가능해졌다.
제어의 역전
말그대로 애플리케이션의 제어 흐름 구조가 역전된다는 것인데
기본적인 애플리케이션의 실행 구조는 각 오브젝트가 자신이 사용할 클래스를 결정하고,
어떻게 오브젝트를 만들지 스스로 참여하는, 작업을 사용하는 쪽에서 제어하는 구조라면
제어의 역전은 이러한 기본 실행 구조를 뒤집는 것이라고 볼 수 있다.
즉, 오브젝트 스스로 자신이 사용할 오브젝트를 선택하지 않고 생성하지도 않고,
모든 제어 권한을 자신이 아닌 다른 대상에게 위임하는 것이다.
라이브러리는 개발자가 필요에 따라 능동적으로 추가하여 사용하지만
프레임워크는 개발자가 능동적으로 사용하는 것이 아닌 끌려가는 구조라고 볼 수 있고,
이를 제어의 역전이 적용되었다고 생각할 수 있다.
팩토리를 통해 UserDao를 생성하는 것도 제어의 역전이 적용된 것이다.
UserDao가 스스로 오브젝트를 생성하고 관리하는 것이 아닌 팩토리에 의해 관리되기 때문이다.
'Back-End > Spring' 카테고리의 다른 글
싱글톤 레지스트리 / 오브젝트 스코프 (0) | 2023.06.07 |
---|---|
스프링 IoC (0) | 2023.06.05 |
초난감 DAO와 객체지향 (0) | 2023.06.05 |
초난감 DAO 리팩토링하기 (0) | 2023.06.05 |
Spring Framework (0) | 2023.06.05 |