-
토비의 스프링 - 3. 관심사의 분리기술/Java - 토비의 스프링 2022. 8. 3. 14:53
관심사의 분리
관심이 같은 것 끼리는 하나의 객체 안으로 또는 친한 객체로 모이게 하고, 관심이 다른 것은 가능 한 따로 떨어져서 변경에 서로 영향을 주지 않도록 분리하는 것이다.
UserDao 의 관심사항
- 커넥션을 가져오는 방법에 대한 관심사
- DB 에 보낼 Statement 를 만들고 실행하는 관심사
- 작업이 끝났을 때 리소스를 돌려주는 관심사
상속을 통한 관심사 분리
템플릿 메소드 패턴, 팩토리 메소드 패턴을 통해 서브 클래스에서 Connection 을 가져오는 방법을 유연하게 변경했다.
하지만 상속을 사용했을 때 단점이 존재한다.
- UserDao 가 다른 목적을 위해 상속을 사용하고 있다면 어쩔 것인가? 자바는 클래스의 다중상속을 허용하지 않는다. 단지, 커넥션 객체를 가져오는 방법을 분리하기 위해 상속 구조로 만들어버리면, 후에 다른 목적으로 UserDao에 상속을 적용하기 힘들다.
- 상속의 문제라기보단 관심사가 분리되지 않아서 생긴 문제이지 않은가?
상속의 단점
- 서브 클래스만 보고 모든 필드와 메서드를 확인할 수 없다.
- 서브 클래스에서 슈퍼 클래스의 구현을 알고 있어야 한다.
- 슈퍼 클래스의 메서드가 서브 클래스의 코드에서 의도하지 않게 동작한다면 문제가 될 수 있다.
- 상속 구조의 계층이 많아지는 경우 슈퍼 클래스의 변경이 자식의 변경에 어떻게 영향을 줄 지 모른다.
조합과 인터페이스를 통한 관심사 분리
전략 패턴을 통해 관심사를 인터페이스로 추출하고 그 인터페이스를 구현하고 주입하는 형식으로 변경했다. 이를 통해 상속의 단점을 해결할 수 있다.
하지만 인터페이스를 사용함으로서 구현체를 결정하는 관심사가 생긴다. 이는 사용하는 클라이언트가 선택하게 함으로서 관심사를 분리할 수 있다.
'기술 > Java - 토비의 스프링' 카테고리의 다른 글
토비의 스프링 - 5. DI ( Dependency Injection ) (0) 2022.08.03 토비의 스프링 - 4. 제어의 역전 ( IoC ) (0) 2022.08.03 토비의 스프링 - 2. 예시 코드를 따라 하기 위한 환경설정 방법 (0) 2022.08.03 토비의 스프링 - 1. 객체 지향 프로그래밍 (0) 2022.08.03