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