5장 서비스 추상화 - 5.3 서비스 추상화와 단일 책임 원칙
5.3 서비스 추상화와 단일 책임 원칙
수직, 수평 계층구조와 의존관계
추상화 기법을 이용하면 특정 기술환경에 종속되지 않는 코드를 만들 수 있습니다.
UserService, UserDao 를 관심사에 따라 어플리케이션 비즈니스 로직을 분리한 것을 수평적인 분리라고 합니다.
트랜잭션의 추상화는 트랜잭션 기술을 비즈니스 로직을 분리한 것은 수직적인 분리입니다.
애플리케이션 로직의 종류에 따른 수평적인 구분이든, 로직과 기술의 수직적인 구분이든 자유롭게 확장할 수 있는 구조를 만드는데는 스프링 DI 가 중요한 역할을 합니다.
단일 책임 원칙
적절한 분리가 가져오는 특징은 단일 책임 원칙 Single Responsibility Principle 로 설명할 수 있습니다.
단일 책임 원칙은 하나의 모듈은 한 가지 책임을 가져야 한다는 뜻입니다.
UserService 에서는 사용자 레벨을 관리와 트랜잭션을 관리하는 두가지 책임을 갖고 있었습니다.
트랜잭션 추상화 방식을 도입하고 DI 를 통해 외부에서 제어하도록 변경하므로써 UserService 의 책임을 한가지로 줄였습니다.
단일 책임 원칙의 장점
단일 책임 원칙을 잘 지키고 있다면, 어떤 변경이 필요할 때 수정 대상이 명확해 집니다.
객체지향 설계와 프로그래밍의 원칙은 서로 긴민한 관계가 있습니다.
단일 책임 원칙을 잘 지키는 코드를 만들려고 인터페이스를 도입하고 이를 DI 로 연결하고, 개방 폐쇄 원칙도 잘 따르게 만들면 그 결과로 높은 응집도의 코드로 만들어집니다.
이런 과정에서 디자인 패턴들이 자연스럽게 적용되기도 합니다.
객체 지향 설계 원칙을 잘 지켜서 만든 코드는 테스트하기도 편리합니다.
스프링의 의존관계 주입 기술인 DI 는 모든 스프링 기술의 기반이 되는 핵심 엔진이자 원리입니다.