관심사의 분리
, 리팩토링
)DB 커넥션
과 SQL 작업
인터페이스
를 만들어 구현하도록 하고, 다른 클래스에서 인터페이스를 통해서만 접근하도록 만들었다. 인터페이스를 정의한 쪽의 구현 방법이 달라져 클래스가 바뀌더라도, 그 기능을 사용하는 클래스의 코드는 같이 수정할 필요가 없게 만들었다. (전략 패턴
)UserDao
에서는 책임 자체가 변경되는 경우 외에는 불필요한 변화가 발생하지 않도록 막아주고, UserDao
가 사용하는 외부 오브젝트의 기능은 자유롭게 확장하거나 변경할 수 있게 만들었다. (개방 폐쇄의 원칙
)낮은 결합도
), 자신의 책임과 관심사에만 순수하게 집중하는(높은 응집도
) 깔끔한 코드를 만들 수 있었다.Factory
)를 만들어 넘겼다. 이후 Factory
의 기능을 일반화한 IoC 컨테이너로 넘겨 오브젝트 자신이 사용할 대상의 생성이나 선택에 관한 책임으로부터 자유롭게 만들었다. (제어의 역전/IoC
)싱글톤 레지스트리
를 이용하여 컨테이너를 활용하는 방법에 대해 알아봤다. (싱글톤 레지스트리
)DI 컨테이너
)의 도움을 받아 주입받아서 동적인 의존관계를 갖게 해주는 IoC
의 특별한 케이스를 알아봤다.(의존관계 주입/DI
)XML 설정
)스프링이란 '어떻게 오브젝트가 설계되고, 만들어지고, 관계를 맺고 사용되는지에 관심을 갖는 프레임워크'이다. 오브젝트 설계, 분리, 개선, 의존관계를 설정하는 책임은 개발자에게 있다. 스프링은 원칙을 잘 따르는 설계를 적용하려고 할 때 번거로운 작업을 편하게 도와주는 도구임을 잊지말자.
객체지향 설계와 프로그래밍에 대한 학습, 훈련, 경험이 뒷받침되어야 스프링을 이용한 깔끔하고 유연한 코드를 만들어낼 수 있다.