///////
Search
🎃

인터페이스 사용 및 팩토리 적용

클래스의 분리

UserDao
AwsConnectionMaker
UserDaoTest
다이어그램
문제점
UserDao가 AwsConnectionMaker에 종속되어 UserDao 코드 변경 없이 커넥션 생성 기능을 변경할 수 없다.

인터페이스 사용

위의 문제를 해결 하고자 인터페이스를 사용하여 리팩토링
MakeConnection 인터페이스 생성
AwsConnectionMaker 리팩토링
LocalConnectionMaker 생성
UserDao 리팩토링
UserDaoTest 리팩토링
다이어그램
문제점
추상화를 통해 이제 UserDao는 어떤 접속방법을 사용(구현) 할 지에 대한 책임에서 벗어나 sql을 생성하고 실행하는 책임만 하면 된다. 하지만 UserDaoTest의 코드와 다이어그램을 보면 어떤 구현체를 사용 할지 에 대한 책임이 UserDaoTest에게 넘어왔다.

팩토리 적용

관계설정 책임의 분리
위의 문제를 해결하여 UserDaoTest가 자신의 관심사인 test 기능만을 하도록 수정
UserFactory 리팩토링
UserDaoTest 리팩토링
다이어그램
최종적으로 팩토리의 사용으로 인해 모두가 각자의 책임을 가지게 되었고 제어의 역전이 일어났다.
UserDao: 데이터 로직에 대한 책임
MakeConnection: DB 연결 기술에 대한 책임
UserFactory: 오브젝트를 구성하고 관계를 정의하는 책임
UserDaoTest: 동작을 테스트하는 책임

팩토리에 스프링 적용

스프링은 싱글톤 컨테이너를 제공합니다. 이 컨테이너에 의한 관리를 받으려면 @Configuration 애노테이션을 단 설정파일(지금은 UserFactory)에 빈을 정의(@Bean)해주면 됩니다. 여기서 주의할 점은 @Bean을 달아서 싱글톤이 되는 것이 아닌 @Configuration을 달았기 때문에 싱글톤으로 관리가 된다 는 점입니다! 즉, @Configuration 없이 @Bean만 있어도 빈을 등록할 수 있지만, 싱글톤이 아닌 거죠. 그래서 ApplicationContext에서 빈을 가져오는 getBean()은 싱글톤 컨테이너에 이미 인스턴스가 존재하면 공유 빈을 가져옵니다.
UserFactory 리팩토링
UserDaoTest 리팩토링
다이어그램

Spring 용어 정리