클래스의 분리
UserDao
AwsConnectionMaker
UserDaoTest
다이어그램
UserDao가 AwsConnectionMaker에 종속되어 UserDao 코드 변경 없이 커넥션 생성 기능을 변경할 수 없다.
인터페이스 사용
MakeConnection 인터페이스 생성
AwsConnectionMaker 리팩토링
LocalConnectionMaker 생성
UserDao 리팩토링
UserDaoTest 리팩토링
다이어그램
추상화를 통해 이제 UserDao는 어떤 접속방법을 사용(구현) 할 지에 대한 책임에서 벗어나 sql을 생성하고 실행하는 책임만 하면 된다. 하지만 UserDaoTest의 코드와 다이어그램을 보면 어떤 구현체를 사용 할지 에 대한 책임이 UserDaoTest에게 넘어왔다.
팩토리 적용
관계설정 책임의 분리
UserFactory 리팩토링
UserDaoTest 리팩토링
다이어그램
팩토리에 스프링 적용
스프링은 싱글톤 컨테이너를 제공합니다. 이 컨테이너에 의한 관리를 받으려면 @Configuration 애노테이션을 단 설정파일(지금은 UserFactory)에 빈을 정의(@Bean)해주면 됩니다.
여기서 주의할 점은 @Bean을 달아서 싱글톤이 되는 것이 아닌 @Configuration을 달았기 때문에 싱글톤으로 관리가 된다 는 점입니다!
즉, @Configuration 없이 @Bean만 있어도 빈을 등록할 수 있지만, 싱글톤이 아닌 거죠.
그래서 ApplicationContext에서 빈을 가져오는 getBean()은 싱글톤 컨테이너에 이미 인스턴스가 존재하면 공유 빈을 가져옵니다.
UserFactory 리팩토링
UserDaoTest 리팩토링
다이어그램