인프런 커뮤니티 질문&답변

nippert님의 프로필 이미지
nippert

작성한 질문수

스프링 핵심 원리 - 기본편

새로운 구조와 할인 정책 적용

OrderApp에서 비용을 20000으로 고쳐도 2000이 출력되지 않습니다.

작성

·

338

·

수정됨

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요.

새로운 할인정책 강의를 수강하면서 discountPolicy()에서 new RateDiscountPolicy()를 해주었는데도 불구하고 OrderApp을 실행하면 그 전에 주입하여 준 FixDiscountPolicy()에 대한 결과가 자꾸 나옵니다.

어떤 부분에서 문제가 있나요?

https://drive.google.com/file/d/1oYEjMlDCO0MAknYbEoPR96Boi4SZyQIk/view?usp=sharing

답변 1

1

안녕하세요. nippert님

https://bit.ly/3fX6ygx

위의 링크를 확인하시고 링크의 권한을 풀어주시겠습니까?

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명

감사합니다.

nippert님의 프로필 이미지
nippert
질문자

링크의 권한 수정했습니다.

강의 영상에서 AppConfig의 메소드 discountPolicy()를 통해 RateDiscountPolicy()를 주입하고 OrderApp에서 Order order = orderService.createOrder(memberId, "itemA", 20000); 해당 문장을 실행하면 discountPrice가 10%인 2000이 출력되어야 한다고 하였습니다.

하지만, 제 파일에서는 RateDiscountPolicy()로 수정을 하여도 기존 FixDiscountPolicy()가 호출되어 discountPrice가 1000이 계속 나옵니다.

해당 문제를 해결하는 방법을 알고 싶습니다.

참고로, jdk 11 사용중입니다.

보내주신 코드와 예외 재현 방법 모두 살펴보았습니다!

AppConfig 리팩토링 중 누락된 부분이 있었습니다 :)

public class AppConfig {

	//...
	
	public OrderService orderService()
	{
//		return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy());
		return new OrderServiceImpl(memberRepository(), discountPolicy());
	}
	
	//...
}

위와 같이 AppConfig에 설정한 다른 객체들을 주입하도록 변경해주십시오!

아 그리고 개인적으로 궁금한 것이 있습니다! 프로젝트 스프링 부트 버전이 3.0.6 이었는데 어떻게 jdk 11로 구동하고 계신 지 여쭤봐도 되겠습니까?

 

nippert님의 프로필 이미지
nippert
질문자

답변해주셔서 감사합니다.

스프링 입문 강의를 들었을 때 초기 설정을 했었습니다. 그때는 jdk 17를 사용 중인 상태로 설치를 하였습니다.

하지만, 이번 강의를 듣기 시작하면서 jdk 17을 삭제하고 jdk 11 버전을 설치하여서 사용 중인 상태입니다.

image

저도 말씀을 듣고 인터넷에 스프링 부트 버전과 jdk 버전에 대해 검색해봤는데, 스프링 부트 3.0.x 버전은 jdk 11을 지원하지 않네요. 현재는 스프링 부트를 사용하지 않는 상태여서 정상 작동되는 건가요? 강의가 진행된다면 jdk 17로 버전을 바꾸는게 맞을까요?

제가 nippert 님 코드를 실행할 때는 에러가 나서 build.gradle에서 17버전으로 바꾸고 refresh해주고 나서야 정상 작동했습니다.
스프링 부트 3버전부터는 jdk 17이상부터 지원하니 가능하시다면 17버전으로 사용하시는 것을 권장합니다!

nippert님의 프로필 이미지
nippert
질문자

네 감사합니다!

nippert님의 프로필 이미지
nippert

작성한 질문수

질문하기