Spring
앞서 관심사를 분리하기 위해 DB 연결로직을 인터페이스로 분리하고 구현하였다. 그리고 그 구현체를 생성자의 파라미터로 전달해 객체를 생성하는 과정을 실습해보았다.
public class UserDao {
private ConnectionMaker connectionMaker;
// DB 연결의 의존도를 낮추고 관심사를 분리하기 위해 ConnectionMaker 구현체를 주입받음
public UserDao(ConnectionMaker connectionMaker) {
this.connectionMaker = connectionMaker;
}
// ...
}
public class UserDaoTest {
public static void main(String[] arg) {
// UserDao 객체를 생성하기 위해 ConnectionMaker 구현 객체가 필요하기 때문에 AwsConnectionMaker 생성
ConnectionMaker awsConnectionMaker = new AwsConnectionMaker();
// awsConnectionMaker를 UserDao에 주입하여 UserDao 객체 생성
UserDao dao = new UserDao(awsConnectionMaker);
// dao 사용
dao.add(..);
}
}
Java
복사
그리고 UserDaoTest 에서 객체를 생성하고 주입하는 과정을 담당하는 UserDaoFactory 또한 구현해보았다.
이 과정을 공부한 이유는 앞으로 공부할 스프링에서 알아서 해주고 있는, 뒤에서 우리 모르게 해주고 있는 작업을 이해하고 사용하기 위해서 였다.
동작 방식
1.
스프링이 컴포넌트를 스캔한다.
컴포넌트 : Controller, Configuration, Service 등 …
2.
스캔한 컴포넌트를 Bean으로 생성해 IoC 컨테이너에 담는다.
이전 실습과정이 이 2번 과정을 직접 해본것 이다.
UserDaoFactory.awsUserDao() 를 실행하면 UserDao에 AwsConnectionMaker를 담아 리턴해주는데 스프링의 BeanFactory가 컴포넌트들을 빈에 등록하고 빈에 등록할때 필요한 Bean이 있으면 등록된 Bean을 찾아서 알아서 넣어주는 과정을 한다.