묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
싱글톤빈에 항상 새로운 프로토타입빈을 주입하는 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 싱글톤빈에 항상 새로운 프로토타입빈을 주입하는 방법에 대해 생각해보았는데요. 혹시 이 방법은 사용하면 안되는걸까요??logic을 실행하기 전 new PrototypeBean이 생성돼서 항상 1이 반환됩니다.static class ClientBean { private PrototypeBean prototypeBean; public int logic() { this.prototypeBean = new PrototypeBean(); this.prototypeBean.addCount(); return this.prototypeBean.getCount(); } }
-
해결됨스프링 핵심 원리 - 기본편
스프링 컨테이너 라이프사이클 질문입니다.
10: 07초에 보시면스프링 컨테이너는 크게 두가지 라이프사이클 있다라고 말씀하셨는데1. 스프링 빈 등록 단계- 생성자에 @Autowired는 이때 자동적으로 의존관계 주입2. 의존관계 설정 단계 (Autowired가 걸린애를 자동으로 주입)- 수정자에(setter) @Autowired는 이때 자동적으로 의존관계 주입이렇게 이해를 했는데 맞는지 궁금합니다.답변주시면 정말 감사하겠습니다.
-
해결됨스프링 핵심 원리 - 기본편
@Autowired 관련 질문입니다.
다른분 질문에서안녕하세요. g g님, [공식 서포터즈](https://www.inflearn.com/blogs/617) David입니다.자동 빈 등록, 자동 의존관계 주입은 수동 빈 등록, 수동 의존관계 주입을 애노테이션 몇가지를 통해 대체해 주는 게 핵심입니다.이 과정에서 @ComponentScan, @Component, @Autowired 같은 애노테이션이 사용되거나 필요로 합니다.그 중 @Autowired 는 자동 빈 등록에 해당합니다.이런 글이 있었는데 (아래 코드를 예시로 들겠습니다)@Component public class MemberServiceImpl implements MemberService{ //구현 객체를 선택해줘야함 아님null값 private final MemberRepository memberRepository; @Autowired //ac.getBean(MemberRepository.class) 와 비슷(Autowired가 더 기능이 있음) public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; }저는 @ComponentScan 이 @Component 가 붙은 MemberServiceImpl 클래스와 memberRepository를 스프링 빈으로 등록하고 그 다음에 생성자에 @Autowired가 자동으로 MemberServiceImpl 과 의존관계를 가지는 memberRepository(스프링 빈)을 타입으로찾아서 의존 관계를주입한다.getBean(MemberRepository.class) 와 비슷(Autowired가 더 기능이 있음)라고 이해하고 있었는데 @Autowired도 빈을 등록하는 것인가요?제가 예시로 든 코드에서 생각하는 과정이 맞는건가요??
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
강사님, 질문 하나 더 드립니다!
참조 강의 마지막 영상에 기존에 있던 참조를 끊어버리는 코드를 보여주셨는데요. null 할당 후, 다시 객체의 인스턴스 변수에 값을 입력해주려면 어떻게 해야하나요?다시 객체 생성부터 해서 진행하면 되는 것인지? 궁금해서 여쭤봅니다. cam1 = null; cam2 = null; cam1.name = "길동이"; cam2.name = "똥개"; System.out.println(cam1.name); System.out.println(cam2.name);이런식으로 코드를 작성해보니, NullPointerException이 에러가 발생해서, 어떻게 해야할지 궁금해 여쭤봅니다!
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
public, class, static, void 언제 어떻게 조합해서 쓰는건지
현재 챕터07 접근제어자(후반전) 까지 강의를 들었고 퀴즈도 다 풀어냈습니다.그런데 public, class, static, void 등을 조합해서 코드 앞부분에 쓰는데 언제 어떻게 왜 조합해서 저것들을 붙이는 건지 정확한 개념을 잘 모르겠습니다. 이럴때는 강의를 다시 돌려보며 개념을 알고 가야하나요? 아니면 그냥 강의 쭉 들으면서 서서히 익히면 되는건가요유튜브 영상으로 9시간 다 보고 인프런 결제했는데 갑자기 진행속도가 너무 빨라진 듯한 느낌이 듭니다. 유튜브 기초 9시간때는 이해하면서 잘 들었는데 지금은 코드 따라적기 바쁘네요ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
싱글톤 적용 관련 질문
옵션처리 부분의 강의에서 모든 테스트 케이스를 돌려보았을 때, 선생님과 다른 오류가 나오고 해결방법을 잘 모르겠어서 질문 남깁니다. 이러한 테스트 문을 작동 시켰을 때이러한 오류가 뜹니다.우선은테스트를 실행시켰을 때의 로그를 통해 보시는 바와 같이 스프링 빈에 잘 올라가있음을 알 수 있습니다.memberServiceImpl와OrderServiceImpl은 컴포넌트 스캔과 Autowired 또한 잘 적용되어 있음을 알 수 있습니다. 또한 AppConfig에서 지정한 코드를 보면위와 같이 작성되어 있고, 의존관계에 따라 구현 함수의 내용을 보면MemberRepository의 구현체 MemoryMemberRepository DiscountPolicy의 구현체 RateDiscountPolicy 또한 컴포넌트 스캔이 잘 작성되어 있음을 알 수 있습니다. 따라서 스프링 부트에 올라가있고, 싱글톤이 적용되어야하는데, 왜 객체가 다르게 반환되는 지 궁금합니다.
-
해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
유틸리티 클래스
유틸리티 클래스 예시 자바 코드가 아래처럼 되어 있는데요. 추상클래스이다 보니 상속도 안되고 생성자가 private이다보니 인스턴스도 만들수 없는데, isDirectoryPath 메소드를 사용할 수 있는 방법이 있을까요?isDiretoryPath 메소드가 static 메소드가 되어야하는게 아닐까 싶어서요!package com.lannstark.lec11; public abstract class StringUtils { private StringUtils() {} public boolean isDirectoryPath(String path) { return path.endsWith("/"); } }
-
미해결Java TPC (생각하고, 표현하고, 코딩하고)
강사님 private 관련해서 궁금한점 있습니다!
클래스에 생성자 메서드를 여러개 생성할 수 있잖아요(overloading)을 통해서 만약에 하나의 생성자 메서드에는 private 가걸려있고다른 하나는 안걸려 있으면 다른하나를 통해서 static이 안걸린 메서드에 접근이 가능할까요???
-
미해결스프링 핵심 원리 - 기본편
싱글톤패턴 사용사례
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요!스프링 컨테이너가 싱글톤 기반이라고 하셨고, 단점도 많은데 실무에서는 어떠한 경우에 싱글톤 패턴이 적용되는지 궁금합니다!
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
CachedNetworkImage 로 인한 memory leak 문제..
안녕하세요 코드팩토리님!선생님의 dart강의를 듣고flutter로 혼자 사이드 프로젝트를 진행하고 있는 중에 질문이 있어 이렇게 글을 남깁니다.다만 무료 dart 강의만 듣고 flutter 질문을 드리는 것이 죄송하네요..ㅜㅜ 우여곡절끝에 제가 생각하던 앱을 비슷하게나마 완성을 했는데요.아기 사진을 가족들과 공유할수 있는 사진앨범 앱을 만들었습니다. 기본적으로 firebase를 연동하여 데이터를 받아와서, gridview 이미지들을 보여주고있습니다.스크롤 시, 추가적으로 데이터들을 받아와서 이미지들을 보여주게 되는데요여기서 이미지들이 다 불러와지지 않은 상태에서빠르게 스크롤을 하면 앱이 꺼져버리는 문제가 생겼습니다. 구글링 및 디버깅을 해보니 memory leak으로 앱이 꺼지는 것 같은데Image.network를 CachedNetworkImage로 바꿔도 보고setState를 남발해서 그런가 싶어서 코드팩토리님 유튜브의 'provider로 sns 스타일 infinite scroll 구현하기!' 를 참고하여provider로 상태관리를 하도록 바꿔도 보고const를 선언할수 있는 부분은 선언하고최대한 build를 호출 안하게끔, build에 복잡한 로직이 안들어가게끔 수정하였는데요.그럼에도 불구하고 이 문제는 고쳐지지가 않더라구요 ㅜㅜ 불러오는 이미지 url을 CachedNetworkImage로 보여주지 않고그냥 Text로 보여주면 해당 문제가 안나오는걸로 봐선뭔가 이미지 관련해서 문제가 있는것 같긴한데어떻게 해결해야하는지 감이 잡히지도 않고, 답답한 심정입니다 ㅜㅜ괜찮으시다면 방법을 제시해주실수 있을까 싶어 질문남깁니다.감사합니다!
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
강사님, 아무래도 제 개념의 혼동 때문에 그러는 것 같은데요..!
if (factoryCam instanceof FactoryCam) { (FactoryCam)factoryCam; }이 구문에 혼동이 생겨서 질문드립니다! if 안에 조건문의 내용이 " factoryCam 이 FactoryCam 클래스의 인스턴스가 맞다면 " 이라고 설명을 해주셨는데요 (8분 27초경) 만약에 factoryCam 이 FactoryCam 클래스의 인스턴스가 맞다면 형변환이 필요 없는거 아닌가요? 또 헷갈린거 하나 더 문의드립니다. 다형성에 대한 예시를 위해 작성해주셨던 코드 내용인데요.Camera factorycCam = new FactoryCam();만약에 위 코드로 작성한게 부모클래스인 " Camera" 로 객체를 생성한 거라면, factoryCam 의 참조 클래스는 Camera 인 것 같은데요. (그러니까 FatoryCam 의 인스턴스 메서드를 불러왔을 때 에러가 나는 것으로 보이구요.) 근데 이 설명과 "factoryCam instanceof FactoryCam" 이 구문이 " factoryCam 이 FactoryCam 클래스의 인스턴스가 맞다면 " 이라고 설명을 해주시니 상충되는 내용이 아닌가 싶어 혼동이 옵니다. 내용 요약factoryCam 은 부모 클래스로 만들어진 객체라서 FactoryCam 의 인스턴스 메서드를 사용할 수가 없다고 설명을 해주셨습니다!헌데 if 조건문은 "factoryCam 이 FactoryCam 클래스에 포함되어 있다면 " 이라고 설명해주신 부분이 상충되지 않나 하여 헷갈립니다.그리고 2번에 내용처럼 만약 factoryCam 이 FactoryCam 클래스에 이미 포함되어 있다면, 굳이 형변환을 하지 않고도 detectFire 메서드를 호출할 수 있어야 하지 않는지..?제가 개념을 잘못 이해하고 있을 것 같은데, 혹시 설명을 좀 부탁드려도 될까요?이 부분에 자꾸 혼동이 생겨서 다음으로 넘어가기가 어렵네요 🤣ps. 이전에 강사님 파이썬 강의로 난생 처음 태어나 클래스란 개념을 이해했던 수강생으로써, 이번 자바편도 개인적으로 큰 도움되고 있습니다. 감사합니다!
-
미해결스프링 핵심 원리 - 기본편
Appconfig 질문 / 생성자 호출
public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(new MemoryMemberRepository()); } public OrderService orderService() { return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy()); } }Appconfig 에서orderService() 조회하면(호출하면) ( 생성자니까 Appconfig 객체가 생성되면 호출된다 ) ( MemoryMemberRepository() 객체 생성 ,FixDiscountPolicy() 객체 생성 )--> 이 생성된 객체의 참조값을 OrderServiceImpl 객체 생성할 때 생성자로 전달 public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy;OrderServiceImpl 에 생성자 호출 - 참조값이 넘어감 OrderServiceImpl 객체의MemberRepository 에 MemoryMemberRepository 할당DiscountPolicy 에 FixDiscountPolicy 할당나중에 할인 정책이 변경되어 수정해야한다면 OrderServiceImpl 변경하지않고 AppConfig 에서만 변경하면 됨 public OrderService orderService() { return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy()); } 제가 자바 기초 문법 (생성자? ) 을 깊이 몰라서 ,, ㅜ 이렇게 이해했는데맞는지 확인 부탁드립니다 !!
-
미해결스프링 핵심 원리 - 기본편
내부 클래스 static 질문입니다.
@Configuration @ComponentScan( includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class), excludeFilters= @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyExIncludeComponent.class) ) class ComponentFilterAppConfig{ } } 이 코드 static class ComponentFilterAppConfig{ }에서 static 이 있는 이유가 궁금하여 빼서 돌려보니org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'componentFilterAppConfigTest.ComponentFilterAppConfig': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.scan.filter.ComponentFilterAppConfigTest' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}이런 오류가 나왔습니다.구글링을 해보니 제생각에는CommponentFilterAppConfigTest.class에서 빈을 찾지 못하여 발생한 것 같은데 보통 어노테이션을 지정하지 않으면 이런 오류가 나온다고 하더군요https://sas-study.tistory.com/385하지만 저는 단지 static 만 뺏을 뿐인데 이런 오류가 왜 나는지 궁금했습니다.마우스를 올려보니Inner class 'ComponentFilterAppConfig' may be 'static'이런 글이 있었습니다.그래서 찾아보니 https://siyoon210.tistory.com/141'외부 참조'로 인한 단점때문에 내부 클래스는 가능한 static으로 만들어야 합니다. 라고 하고'외부 참조'로 인한 2가지 단점은아래 와 같다고 하더군요참조값을 담아야 하기 때문에, 인스턴스 생성시 시간적, 공간적으로 성능이 낮아진다.외부 인스턴스에 대한 참조가 존재하기 때문에, 가비지 컬렉션이 인스턴스 수거를 하지 못하여 메모리 누수가 생길 수 있다.그러면 종합에서 생각한게 빈을 찾지 못하는건 외부참조가 가능해서인가? 라는 의문이 들었습니다.그리고 정확한 이유가 궁금해졌습니다.<전체 코드>public class ComponentFilterAppConfigTest { @Test void filterScan(){ ApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class); BeanA beanA = ac.getBean("beanA", BeanA.class); assertThat(beanA).isNotNull(); assertThrows( NoSuchBeanDefinitionException.class, () -> ac.getBean("beanB", BeanB.class)); } @Configuration @ComponentScan( includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class), excludeFilters= @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyExIncludeComponent.class) ) static class ComponentFilterAppConfig{ } }정리하자면 이 코드에서 static class ComponentFilterAppConfig{ } 가 static 이 없으면 왜 오류가 나는지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
프로젝트 생성 관련 질문있습니다.
안녕하세요. 혹시 스프링 프로젝트를 새로 만들 때마다 initializer로 매번 generate을 해서 라이브러리를 매번 다운 받아야 하는 걸까요???
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Switch case 관련 질문
안녕하세요.switch case(후반전) 강의 3분 30초 부분에서 궁금한 점이 생겨 질문을 남깁니다. 제가 알기로는 switch case를 사용할 때, 그 case에 해당하는 경우에만 수행 동작을 실행하는 걸로 알고 있습니다. 이 영상에서도 마찬가지로 grade를 1이라고 가정할 때, case 1은 조건을 만족하므로 price에 1000을 더해주었습니다. 하지만 그 이후 case 2를 만족하지 않음에도 불구하고 1000을 더해주고, case 3도 만족하지 않지만 1000을 더한 결과 값이 출력 되었습니다.즉, break를 넣으면 switch문을 빠져나갈 수 있다는 것은 알고 있으나, 왜 break가 없어졌다는 이유로 다음 case의 수행 동작이 실행되는지 잘 모르겠습니다. 이와 관련하여 매커니즘을 조금 더 자세히 설명해주시면 감사할 것 같습니다..!
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Thread 질문
선생님이 하신거랑 똑같이 했는데 저는 컴파일결과가 사장청소와 직원청소가 섞여서 안나오네요... package chap_12; import chap_12.clean.CleanThread; public class _01_Thread { public static void main(String[] args) { // 하나의 프로세스 (Process) // 쓰레드 (Thread) // 1 3 5 7 9 // ---복도--- // 2 4 6 8 10 // cleanBySelf(); CleanThread cleanThread = new CleanThread(); // cleanThread.run(); // 직원 청소 cleanThread.start(); cleanByBoss(); // 사장 청소 } public static void cleanBySelf() { System.out.println("-- 혼자 청소 시작 --"); for (int i = 1; i < 10; i++) { System.out.println("(혼자) " + i + "번방 청소 중"); } System.out.println("-- 혼자 청소 끝 --"); } public static void cleanByBoss() { System.out.println("-- 사장 청소 시작 --"); for (int i = 1; i <= 10; i += 2) { System.out.println("(사장) " + i + "번방 청소 중"); } System.out.println("-- 사장 청소 끝 --"); } } package chap_12.clean; public class CleanThread extends Thread { public void run() { System.out.println("-- 직원 청소 시작 (Thread) --"); for (int i = 2; i <= 10; i += 2) { System.out.println("(직원) " + i + "번방 청소 중 (Thread)"); } System.out.println("-- 직원 청소 끝 (Thread) --"); } } ------------ 결과 --------------------- -- 사장 청소 시작 -- (사장) 1번방 청소 중 (사장) 3번방 청소 중 (사장) 5번방 청소 중 (사장) 7번방 청소 중 (사장) 9번방 청소 중 -- 사장 청소 끝 -- -- 직원 청소 시작 (Thread) -- (직원) 2번방 청소 중 (Thread) (직원) 4번방 청소 중 (Thread) (직원) 6번방 청소 중 (Thread) (직원) 8번방 청소 중 (Thread) (직원) 10번방 청소 중 (Thread) -- 직원 청소 끝 (Thread) -- Process finished with exit code 0
-
미해결은종쌤과 자바로 디자인 패턴 쉽게 시작하기
수업내용을 개인 블로그에 정리하여 게시해도 될까요?
선생님 안녕하세요! 자바 강의부터 디자인패턴 강의까지 선생님의 수업으로 많은 것을 배우고 있는 수강생입니다. 선생님의 디자인패턴 강의를 복습차 정리하여 개인 블로그에 올려도 괜찮을지 문의드립니다. 허락하신다면, 강의에서 배운 디자인패턴 내용을 제가 이해한 부분 중심으로 정리하고, 예시코드 일부를 함께 게시하려고 합니다! (해당 강의 링크를 출처로 기재하겠습니다)혹시 강의 자료와 내용의 저작권과 관련된 문제가 생길 수 있다면 게시하지 않겠습니다!
-
미해결스프링 핵심 원리 - 기본편
CoreApplication을 실행 후,테스트 코드까지 같이 실행되어 문제가 발생했습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]CoreApplication을 실행하면 테스트 코드 속 내용까지 실행되는 것 같습니다...1. BeanDefinitionOverrideException 오류CoreApplication 실행 후 다음과 같은 오류가 떴습니다.BeanDefinitionOverrideException: Invalid bean definition with name 'rateDiscountPolicy' defined in class path resource [com/example/core/beanfind/ApplicationContextExtendsFindTest$TestConfig.class]해당 ApplicationContextExtendsFindTest 테스트 파일 속 TestConfig의 @Configuration을 제거하자 정상 작동 되었습니다.2. 1번 문제 해결 후 로그 보니 NetworkClient 관련 테스트 로그가 뜹니다.위 사진을 보면 앞에서 lifecycle 강의할 때 쓴 테스트 코드가 실행돼서 `call: http://hello-spring.dev message = 초기화 연결 메시지`같은 것이 출력된 것으로 추측하고 있습니다.결론: 이처럼 테스트 코드까지 실행돼서(제 추측) 문제가 생겼고, 앞으로 진행하면서도 에로사항이 될 것 같습니다.이를 어떻게 해결하면 좋을지 여쭤봅니다. 프로젝트 파일 링크:https://drive.google.com/file/d/1PFJv9O46d9ny42RcxwIcFQjcoMA2oBK-/view?usp=sharing
-
해결됨스프링 핵심 원리 - 기본편
스프링 컨테이너 생성시 타입
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);이렇게 생성 타입을 ApplicationContext로 하는 것과 AnnotationConfigApplicationContext로 하는 것 차이와 어떤 방법이 더 나은지 알 수 있을까요?
-
미해결스프링 핵심 원리 - 기본편
discount 에 대해서.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. discount 메서드가 제가 제대로 이해한게 맞나요?public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); // map 에서 해당 key 값을 주입 System.out.println("discountCode = " + discountCode); System.out.println("discountPolicy = " + discountPolicy); return discountPolicy.discount(member,price); }DiscountPolicy discountPolicy = policyMap.get(discountCode);이 부분이 policyMap 에 있는 key값이 스프링 빈 이름이고 그에 해당하는 value를 가져와서 부모인 DiscountPolicy discountPolicy 에 구현체인 fix나 rate 값을 넣고 discountPolicy.discount(member,price); }fix나 rate discountPolicy 를 실행하기 위한 값member,price 값을 넣어주는 메서드가 맞을까요 ? 2. list, policies를 이용한 discount 실행 시 코드 DiscountService discountService = ac.getBean(DiscountService.class);실행 시 DiscountService에 있는 출력 결과가 fix는 key, value 값을 제대로 조회해 주는데 policyMap = {fixDiscountPolicy=hello.core.discount.FixDiscountPolicy@246f8b8b, rateDiscountPolicy=hello.core.discount.RateDiscountPolicy@278bb07e}rate의 경우 value 만 출력이 되는데 private final List<DiscountPolicy> policies;policies를 사용 시 어떻게 코드를 짜야 할까요 ??int listNum = 0; if(discountCode == "fixDiscountPolicy"){ listNum = 0; }else{ listNum = 1; } DiscountPolicy discountPolicy = policies.get(listNum);list 등록 순서를 알아서 이렇게 짜긴 했는데 더 간단한 방법이 있나 질문 남깁니다.