본문 바로가기
Spring

[스프링] AppConfig을 리팩터링 해 보자

by 새발의 피 2023. 3. 15.

 

 

스프링 호록 ~!

 

안녕하세요? 새발의 피입니다.

 

지난 번 글에서 작성한 AppConfig 기억나시나요? (지난 번 작성한 AppConfig가 뭐지? (tistory.com))

 

AppConfig는 물론 훌륭한 역할을 해내고 있지만 아직 부족한 상태입니다.

 

해당 로직은 인스턴스 중복 생성이 존재하고 역할에 따른 구현이 잘 보이지 않는 문제점이 있습니다.

 

더 편리한 프로그래밍을 위해 AppConfig를 더 알맞게 리팩터링 하는 글을 작성하겠습니다.

 

 

 


 

수정 전 AppConfig

 

public MemberService memberService() {
	return new MemberServiceImpl(new MemoryMemberRepository());
}

public OrderService orderService() {
	return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy());
}

 

앞서 언급했듯이 인스턴스를 생성하는 코드가 중복으로 들어가고 역할에 따른 구현이 한 눈에 보이지 않습니다.

 

중복되는 MemoryMemberRepository 인스턴스 생성을 반환하는 메서드를 만들어 중복 코드를 대체하겠습니다.

 

뿐만 아니라 구현과 역할을 확실히 보이게 하기 위해 FixDiscountPolicy를 반환하는 메서드 또한 생성 해 줍니다.

 

 

수정 후 AppConfig

public MemberService memberService() {
	return new MemberServiceImpl(memberRepository());
}

private MemberRepository memberRepository() {
	return new MemoryMemberREpository();
}

public OrderService orderService() {
	return new OrderServiceImpl(memberRepository(), discountPolicy());
}

public DiscountPolicy discountPolicy() {
	return new FixDiscountPolicy();
}

 

이렇게 하면 처음 언급한 문제점들이 모두 해결됩니다.

 

중복 생성하는 코드가 없어지고 역할에 따른 구현이 한 눈에 보입니다.

 

뿐만 아니라 기획의 변경으로 MemoryMemberRepository를 다른 구현으로 바꿔줘야 할 때

 

memberRepository 메서드의 반환 객체만 손쉽게 바꿔줄 수 있습니다.

 

물론 discountPolicy도 마찬가지입니다.

 

 

 

 

이해를 돕기 위해 AppConfig를 리팩터링 해야하는 이유에 대해 설명하겠습니다.

 

< 중복 생성 제거해야 하는 이유 >

구현체를 바꿀 때 중복된 부분에서 모두 수정을 해야한다. 

 

한 객체만 변경을 해도 번거롭게 해당 객체를 사용하는 모든 부분에서 바꿔줘야 한다.

 

 

< 역할에 따른 구현이 눈에 잘 보여야 하는 이유 >

애플리케이션 전체 구성이 어떻게 되어있는지 빠르게 이해할 수 있다.

 

가독성을 높여 코드의 유지보수를 수월하게 할 수 있다.

 

 

 


지난 번 작성한 AppConfig 생성에 이어 리팩터링 하는 방향에 대해서 알아보았습니다.

 

지금은 간단한 프로젝트이기 때문에 AppConfig의 역할이 크게 와닿지 않지만 기획 수정 시 아주 획기적이고

 

편리하게 수정이 가능한 걸 느꼈습니다.

 

참고로 프로젝트의 객체들은 구성영역과 사용영역으로 나눌 수 있고 구성영역에는 AppConfig가 존재하고

 

사용영역은 클라이언트 클래스를 포함한다고 합니다. 

 

 때문에 구성영역에 있는 AppConfig만 수정하면 간단하게 확장이 가능해집니다.

 

그럼 다들 좋프 (좋은 프로그래밍이라는 뜻) 하세요 ~!

 

AppConfig는 편리한 거구나 !

 

지난 번 작성한 AppConfig 보러가기 !

AppConfig가 뭐지? (tistory.com)

 

AppConfig가 뭐지?

한창 강의를 통해 비즈니스 요구를 만족하는 프로젝트를 설계해 구현하던 중 객체 지향 원칙을 어긴다는 예감이 들었고 절망적이게도 그 예감이 맞았습니다. 열림 교회 닫힘과도 같은 OCP 원칙

kes0917.tistory.com

 

 

해당 글은 김영한님의 스프링 핵심 강의를 기반으로 작성 되었습니다.

(링크: 스프링 핵심 원리 - 기본편 대시보드 - 인프런 | 강의 (inflearn.com) )

댓글