반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 티스토리챌린지
- effectivejava
- 엘라스틱서치
- 이펙티브자바
- 김영한
- Spring
- 오블완
- 스프링 핵심원리
- 이차전지관련주
- 코딩테스트
- 스프링
- 알고리즘
- k8s
- 자바
- 예제로 배우는 스프링 입문
- 자바스크립트
- ElasticSearch
- Effective Java 3
- 스프링부트
- 알고리즘정렬
- 스프링핵심원리
- java
- 이펙티브 자바
- 카카오
- Effective Java
- 클린아키텍처
- Sort
- kubernetes
- 카카오 면접
- JavaScript
Archives
- Today
- Total
Kim-Baek 개발자 이야기
[스프링 핵심원리] 17. AppConfig 리팩토링 본문
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅
지난번에 AppConfig를 만들어서 관심사를 분리해서, 각자 역할들이 본인들의 역할의 수행에만 집중할 수 있는 코드를 완성했다. 그런데 다시한번 보면 AppConfig가 중복이 있고, 역할에 따른 구현이 잘 안보이는 문제가 있다.
우리가 원하는 그림은 이런 것 일 것이다. 역할이 있고 구현 객체들이 어떤 것인지 명확하게 보이는 그림이다.
package core.order;
import core.order.discount.FixDiscountPolicy;
import core.order.member.MemberService;
import core.order.member.MemberServiceImpl;
import core.order.member.MemoryMemberRepository;
import core.order.order.OrderService;
import core.order.order.OrderServiceImpl;
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(new MemoryMemberRepository());
}
public OrderService orderService() {
return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy());
}
}
리팩토링을 하기 전의 AppConfig 의 모습이다. 중복으로 MemoryMemberRepository를 만드는 것도 있고, 역할에서 어떤 구현을 사용하는 지도 명확하게 보이지 않는다.
package core.order;
import core.order.discount.DiscountPolicy;
import core.order.discount.FixDiscountPolicy;
import core.order.member.MemberRepository;
import core.order.member.MemberService;
import core.order.member.MemberServiceImpl;
import core.order.member.MemoryMemberRepository;
import core.order.order.OrderService;
import core.order.order.OrderServiceImpl;
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
private MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
private DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
리팩토링을 한 AppConfig의 코드이다. 역할과 구현을 명확하게 파악할 수 있도록 변경했다. 이제 MemberRepoistory의 구현체를 변경하고 싶다면 memberRepositoy()에서 리턴해주는 구현체만 변경해주면 전체가 동일하게 변경이 될 것이다.
이렇게 변경하니 한눈에 애플리케이션의 구성이 어떻게 되는지 알아볼 수 있게 되었다.
https://github.com/bgc8214/spring-core/tree/step7
반응형
'개발 > Spring' 카테고리의 다른 글
[스프링 핵심원리] 19. 좋은 객체 지향 설계의 5가지 원칙 적용 (0) | 2021.10.23 |
---|---|
[스프링 핵심원리] 18. 새로운 구조와 할인 정책 적용 (0) | 2021.10.10 |
[스프링 핵심원리] 16. 관심사의 분리 (0) | 2021.10.07 |
[스프링 핵심원리] 15. 새로운 할인 정책 적용과 문제점 (0) | 2021.10.05 |
[스프링 핵심원리] 14. 새로운 할인 정책 개발 (0) | 2021.10.04 |
Comments