[add] AppConfig 리팩터링 [#6] #10
현재 AppConfig를 보면 중복이 있고, 역할에 따른 구현이 잘 안보인다
new가 2번 나와서 중복이다.
이런 것을 리팩토링 할 때 잡아준다.
MemoryMemberRepository에 커서를 갖다댄 후에 ctrl + alt + m
단축키를 누르면 Extract method가 실행된다.
return타입은 구체클래스를 선택하면 안되고 인터페이스를 선택한다.
(MemberRepository ⭕, MemoryMemberRepository ❌)
처음에 ctrl + alt + m을 아무리 입력해도 강의와 같이 Extract method가 실행되지 않았다.
그래서 일단 ctrl + alt + m을 실행시키고 보기가 나오는데 보기 중 하나를 엔터 클릭했더니
코드가 추가되면서 톱니바퀴가 나왔다.
More options를 클릭해보니 강의와 같이 Extract method가 나왔다.
인터페이스로 수정하고 refactor 후 replace를 하면 잘 나온다.
// 애플리케이션의 전체를 설정하고 구성한다.
public class AppConfig {
// → 생성자 주입
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
// MemberServiceImpl을 만들고 내가 만든 MemberServiceImpl은 MemoryMemberRepository를 사용할 것이다.
}
private MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
이제 메소드 명을 보면 역할이 다 드러나는 것을 볼 수 있다.
MemberService는 MemberServiceImpl을 쓴다.
MemberRepository 대한거는 MemoryMemberRepository를 쓸 것이다.
만약 나중에 JdbcMemoryMemberRepository로 바뀌면
private MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
에서
private MemberRepository memberRepository() {
return new JdbcMemoryMemberRepository();
}
private MemberRepository memberRepository() {
return new MemoryMemberRepository(); ← 이 코드만 바꾸면 된다.
}
private MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
orderService도 보면은 orderService 구체적인 것은 memberRepository() 쓰는거 가져온다.
어플리케이션에서 결정한 discountPolicy()를 가져올 것이다.
discountPolicy는 Fix니깐 Fix를 가져온다.
memberRepository는 MemoryMemberRepository니깐 MemoryMemberRepository 객체가 들어온다.
정리
new MemoryMemberRepository() 이 부분이 중복 제거되었다.
이제 MemoryMemberRepository 를 다른 구현체로 변경할 때 한 부분만 변경하면 된다.
AppConfig 를 보면 역할과 구현 클래스가 한눈에 들어온다.
애플리케이션 전체 구성이 어떻게 되어있는지 빠르게 파악할 수 있다.
중복도 제거가 되었다.
'TIL' 카테고리의 다른 글
174일차(모험 83일차) (0) | 2022.03.07 |
---|---|
171일차(모험 80일차) - 새로운 구조와 할인 정책 적용 (0) | 2022.03.04 |
170일차(모험 79일차) - 스터디 2 (0) | 2022.03.02 |
169일차(모험 78일차) - 스터디 (0) | 2022.03.01 |
168일차(모험 77일차) - 프로젝트(페이징 문제 해결😂) (0) | 2022.02.28 |