묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
static을 붙이면 싱글톤이 깨지는이유
제가 실수로 메서드에 static을 붙였는데 MemberServiceImpl과OrderServiceImpl의 주소값이 다르게 나오더라구요 이유가 뭔가요?@Bean public static MemberRepository memberRepository() { return new MemoryMemberRepository(); } 결과값:memberRepository = helllo.core.member.MemoryMemberRepository@5a755cc1memberRepository1 = helllo.core.member.MemoryMemberRepository@7ae42ce3
-
미해결스프링 핵심 원리 - 기본편
조회 빈이 2개 이상일 때 우선순위를 설정하는 3가지 방법이 객체 지향적인 방법인가? 라는 의문점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 의존관계 자동 주입 파트를 수강하고 있는 김민희입니다.다름이 아니라 이번 섹션을 들으며 궁금한 점을 질문드리고 싶습니다. 아래부터는 저의 질문 내용인데, 혼자서 메모장에 의문인 부분을 정리한 것을 복사해온 것이라 경어체가 아닌 점을 양해 부탁드립니다.=====================================조회된 빈이 2개 이상일 때 사용할 수 있는 방법은 총 3가지가 있다고 하셨다.- @Autowired 필드 명 매칭Service 코드에서 생성자의 파라미터 이름, 필드 이름을 조회된 빈 들중 사용할 빈의 이름으로 변경해줌 → service 코드 수정- @Qualifier 사용서브 이름을 설정해주는 것.컴포넌트에 서브 이름을 설정해주고, Service 코드에서 생성자의 파라미터를 입력할 때 그 서브이름을 같이 적어줌 → service 코드 수정- @Primary 사용조회되는 빈이 2개 이상이 될 때, 우선순위를 가질 컴포넌트에 @Primary를 지정함 → 컴포넌트 코드 수정 이 세가지 방법 다, 만약 사용할 빈이 달라진다면 코드를 변경해야 하는 방법이다.우리 예제를 예로 들자면, rateDiscountPolicy와 fixDiscountPolicy 둘 다 빈 등록을 해놓고, OrderServiceImpl에서 discountPolicy를 호출할 때 rateDiscountPolicy를 사용하다가, 나중에 비즈니스 로직이 바뀌어서 fixDiscountPolicy를 사용해야 하는 것으로 바뀐다면…세 가지의 방법 모두 OrderServiceImpl 코드나, rateDiscountPolicy와 fixDiscountPolicy 코드를 변경해줘야하는 방법이다.그렇다면 세 가지 방법 전부 처음에 배웠던 객체 지향 프로그래밍의 컴퓨터 부품을 갈아끼우듯이 구현체를 변경해주는게 아니지 않나? 객체 지향적으로 프로그래밍되었다면 구현체를 변경할 때 실제 자바 파일의 소스코드를 가서 수정해주지 않아도, 설정 파일이나 기타 등등 설정을 위한 객체(혹은 클래스, 혹은 뭐든… 아직 배우기 전이어서 뭐가 있는지 모르겠음) 내용만 변경해주어야 하는것이 아닌가???==================================== 글을 깔끔하게 정리하지 못한 점 죄송합니다... 시간에 쫓기고 있어서 강의를 빨리 들어야 해서요ㅠㅠㅠ 저의 질문은 밑줄친 부분입니다. 제가 생각한 것이 맞는건지, 틀린건지,,, 틀렸다면 어떤 부분을 잘못 생각한 것인지 궁금합니다. 감사합니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
Scanner 큐
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("첫 번째 숫자와 두 번째 숫자 모두 0을 입력하면 프로그램을 종료합니다."); while (true) { System.out.print("첫 번째 숫자를 입력하세요:"); int num1 = scanner.nextInt(); System.out.print("두 번째 숫자를 입력하세요:"); int num2 = scanner.nextInt(); if (num1 == 0 && num2 == 0) { System.out.println("프로그램 종료"); break; } int sum = num1 + num2; System.out.println("두 숫자의 합: " + sum); } }위 코드를 실행시켰을때첫 번째 숫자를 입력하세요 : 10\n이렇게 입력하고 두번째 줄에 두 번째 숫자를 입력하세요 : 20\n이렇게 제가 입력했다고 가정했을때 큐에서 문자열이 어떻게 들어가고 나오는지 궁금합니다.10하고 enter를 치면 num1은 정수 부분을 읽어들여서 10만 저장하고 큐에는 현재 '\n'가 남아있는 상황이고 그 이후에 20enter를 치게 된다면 20\n을 큐에 집어넣은 상황이므로 큐에는 현재 \n20\n이렇게 들어가있을텐데 여기서 num2는 바로 20을 꺼낼 수 있는 건가요?? 앞에 있는 \n 값은 무시하고 정수만 바로 뽑아내는건가요?
-
미해결김영한의 실전 자바 - 기본편
인텔리제이 단축키 일부가 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]김영한님 강의 듣는 중인데, 강의 중 나오는 단축키 중에 안먹히는 것들이 있어서요... 예를 들면 ctrl+alt+m / ctrl+o 등이 안먹힙니다 해결할 수 있는 방법이 있을까요?
-
해결됨김영한의 실전 자바 - 기본편
부모의 부모 인스턴스
예를 들어 ElectricCar extends Car, Car extends Vehicle의 상속 관계를 가질 때 new ElectricCar()를 호출하면 부모 인스턴스인 Car도 같이 생성하는데 이 경우 Car는 Vehicle 의 상속을 받으니까 Vehicle 인스턴스도 함께 생성되나요?
-
미해결스프링 핵심 원리 - 기본편
getBean() 관련 질문 - MemberServiceImpl
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]제가 제대로 잘 이해를 못하는 지 관련 질문을 못 찾겠습니다. ConfigurationSingletonTest 학습할 때 MeberServiceImpl과 OrderServiceImpl의 getMemberRepository 매써드를 사용하기 위해서 getBean의 타입을 다음과 같이 지정한다고 하였는데 @Beand을 통해 생성된 memberService 매써드가 MemberService 클래스를 반환하는 데 그게 아닌 구현한 MemberServiceImpl 클래스를 변환해서 가져오겠다는 건가요? 어떤 식으로 작동하게 되는 지 잘 모르겠습니다.
-
미해결스프링 핵심 원리 - 기본편
web 라이브러리 추가 시 CoreApplication 무한 로딩
안녕하세요. request 스코프 예제를 시작하려다가 web 라이브러리를 다음과 같이 추가하고,CoreApplication에서 main method를 실행하였는데요.무한 로딩 되는 현상이 발생합니다. 체크 표시가 뜨지 않고계속 이 상태에서 돌아가는데 왜이런지 알 수 있을까요..? 어떻게 해결하면 좋을까요ㅜㅠ
-
해결됨스프링 핵심 원리 - 기본편
섹션 6, 7 AutoAppConfig Spring Container에서 에러발생
섹션 6, 7 AutoAppConfig.class파일을 활용하여 AutoAppConfigTest.class에서 Spring Container에서 에러발생합니다.Spring Container에 Bean이 등록이 안되는것같은데, Component와 Autowired 설정은 제대로 한것같은데도 Bean으로 등록이 안되는것같습니다 . 제 core 코드를 압출하여 링크로 첨부합니다.https://we.tl/t-a2UUbo53a8 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [Z:\ㄴㅇ\Study_Workdir\spring\1_spring_core_principle\core\core\out\production\classes\hello\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:802) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:241) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:960) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:93) at hello.core.scan.filter.AutoAppConfigTest.basicScan(AutoAppConfigTest.java:14) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1880) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1406) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:911) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789) ... 17 more
-
해결됨김영한의 실전 자바 - 기본편
메서드 관련 질문
현재 상속 파트를 공부하다가 든 의문증입니다.상위 클래스에서 void 타입의 메서드명 : call() { System.out.println("이름 : " +name);}하위 클래스에서 void 타입 메서드명 : GetInfo()GetInfo(){out.println("호출명 : " + call()); [해당 부분이 컴파일 오류가 발생하여서 상위 클래스 타입을 String으로 바꾸니 컴파일 오류도 없었고 원하는대로 출력이 되었습니다.]그래서 생각을 좀 해봤는데 void는 반환값이 없는 메서드이고 GetInfo()에 출력문을 만나면 이중출력문이 되어서 컴파일 오류가 난 것이라고 생각했는데 맞나요..?
-
해결됨스프링 핵심 원리 - 기본편
의존성에 대해 궁금한것이있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 보면 9분에 FixDiscountPolicy가 DIscountPolicy를 의존하고 있다고하는데 제가 알고있는 의존은 A클래스에서 B클래스를 new 로 생성하면 A가 B를 의존한다라고 알고있는데 인터페이스를 구현한 구현 객체도 의존한다고하니까 잘모르겠네요
-
해결됨스프링 핵심 원리 - 기본편
Interface를 구현한 객체가 2개라면 Dependency Injection은?
@Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Component public JDBCMemberRepository implements MemberRepository {...} @Component public MybatisMmeberRepository implements MemberRepository{...} <전제>ConfigurationFile에 @ComponentScan 을 적용한 상태고아래와 같은 상황이 있으며,dependency 관계가 위와 같다면 <상황>ApplicationContext에서 getBean()을 통해 객체를 사용하고자 할때 dependency injection을 한다면 <결과예상>어떤 객체가 injection되는건가요?JDBC MemberRepositoryMybatisMemberRepository <질문하는 이유>Spring Container에서는 Component로 등록한 Bean을 ComponentScan으로 자동으로 등록하며, ApplicationContext 객체를 만드는 시점에서 dependency를 추적하고 , getBeans로 객체를 만드는 시점(`new [xxx]`)에서 그에 따라 Runtime에 dependent한 객체를 주입한다고 알고 있습니다.그럼, <상황> 의 경우에는, 역할인 interface를 type으로 하여 생성자 주입을 받고있는데, Spring에서는 무엇을 선택하는지 모르겠고,근거는 무엇이고제가 영상에서 놓친 부분이 있다면, 그것이 어느 영상의 어느 부분까지인지는 몰라도어느 영상이나 어느 파트에서 알려주신건지라도 알려주세요. 제가 글로 적은 부분에서 오류가 있다면 같이 잡아주셨으면 합니다.
-
해결됨김영한의 실전 자바 - 기본편
다음 강의는 몇월쯤에 나오나요?
2024년도 초반이라고 하셨는데, 조금 급한 상황이라서요 ㅠㅠ 몇월쯤에 나오는 지 궁금합니다!
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
4.조건문에서 switch문 강의 관련 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Switch1에서 알려주신 코드 방식이 아닌, 이렇게 해도 맞는 것일까요?잘못된 방식이라면 설명 좀 부탁드려도 될까요?알려주신 코드 방식에서 int coupon; 부분이 이해가 안 가는 것 같아요.package Cond; public class Switch1 { public static void main(String[] args) { int grade = 2; if (grade == 1){ System.out.println("발급받은 쿠폰 : 1000"); } else if (grade == 2) { System.out.println("발급받은 쿠폰 : 2000"); } else if (grade == 3){ System.out.println("발급받은 쿠폰 : 3000"); } else { System.out.println("발급받은 쿠폰 : 500");} } }
-
미해결김영한의 실전 자바 - 기본편
ProductOrderMain3 문제 풀이 방법에 질문 있습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]저는 enterProduct라는 메서드에서 객체를 생성하고 사용자의 입력까지 모두 받아 해당 객체를 return하도록 풀었습니다. 제가 풀은 방식처럼 메서드 안에서 입력까지 받는 방식이 지양해야 하는 방식인지 궁금합니다 package ref.ex; import java.util.Scanner; public class ProductOrderMain3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("입력할 주문의 개수를 입력하세요: "); int count = scanner.nextInt(); ProductOrder[] product = new ProductOrder[count]; for (int i = 0; i < product.length; i++) { product[i] = enterProduct(i); } printProduct(product); int totalPrice = calTotalPrice(product); System.out.println("총 결제 금액: " + totalPrice); } static ProductOrder enterProduct(int i) { Scanner scanner = new Scanner(System.in); ProductOrder productOrder = new ProductOrder(); System.out.println((i + 1) + "번째 주문 정보를 입력하세요."); System.out.print("상품명: "); productOrder.productName = scanner.nextLine(); System.out.print("가격: "); productOrder.price = scanner.nextInt(); System.out.print("수량: "); productOrder.quantity = scanner.nextInt(); return productOrder; } static void printProduct(ProductOrder[] product) { for (ProductOrder p : product) { System.out.println("상품명: " + p.productName + ", 가격: " + p.price + ", 수량: " + p.quantity); } } static int calTotalPrice(ProductOrder[] product) { int totalPrice = 0; for (ProductOrder p : product) { totalPrice += p.price * p.quantity; } return totalPrice; } }
-
해결됨스프링 핵심 원리 - 기본편
@Configuration과 @ComponentScan 질문입니다
@Configuration이 설정 정보임을 알려주며 동시에 싱글톤을 보장할 수 있게 설정 파일 클래스에 사용하는 것은 이해했습니다. 마찬가지로 @ComponentScan 또한 @Component가 붙은 클래스들을 스캔하여 스프링 빈 자동 등록과 동시에 싱글톤 유지가 되도록 하는 것도 이해했습니다. 여기서 @ComponetScan(빈 자동 등록)을 사용할 때도 @Configuration 어노테이션도 사용이 필수인가요?@Component 사용 시에도 싱글톤을 유지하기 할 수 있다고 하셨는데, @ComponetScan위에 @Configuration 어노테이션을 사용하는 이유가 따로 있을까요?설정 파일 인식용인가요?아래와 같이 AutoAppConfig 파일 자체도 빈에 등록하기 위함인가요?@Configuration @ComponentScan( /* 탐색할 패키지의 시작 위치를 지정. 이 패키지 포함 하위 패키지 모두 탐색 두 개 이상일 때 → basePackages = {"hello.core", "hello.service"} */ basePackages = "hello.core", // 지정한 클래스의 패키지를 탐색 시작 위로 지정 basePackageClasses = AutoAppConfig.class ) public class AutoAppConfig { } 답변 부탁드립니다!감사합니다
-
미해결김영한의 실전 자바 - 기본편
[섹션2 문제풀이] scanner 질문
위에서 int price = scanner.nextInt(); 밑에는 scanner.nextLine();를 안 쓰는 이유가 궁금합니다.버퍼에 개행문자(엔터)가 int quantity 변수 맨 앞으로 입력되지 않나요??
-
미해결스프링 핵심 원리 - 기본편
빈 이름으로 조회 x
[질문 내용]여기에 질문 내용을 남겨주세요. @Test @DisplayName("빈 이름으로 조회X") void findBeanByName_X() { // MemberService memberService = ac.getBean("xxxxx", MemberService.class); assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("xxxxx", MemberService.class)); } }이 코드에서 주석을 제거하면 여전히 NoSuchBeanDefinitionException이 발생하는데 이는 주석 코드에서 오류가 생겨서 더이상 진행되지 않기때문에 assertThrows코드가 실행되지 않은것인가요?
-
미해결스프링 핵심 원리 - 기본편
인텔리제이 유로 무료
안녕하세요 자바로 졸작을 만들어보기 위해 공부중인 컴공 4학년 학생입니다.해당 강의를 들으면서 프로젝트도 만들어보고 싶은데 유로로 듣는게 나을까요??
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
자바 17버전
나도 코딩님 강의로 자바를 수강을 완료한 후 스프링 공부를 위해 자바 17 다운 스프링 다운을 받았는데해당 화면이 되었습니다. 궁금한게 다시 하루에 한 번씩 나도 코딩님 강의를 복습하고 싶은데 자바 17에서 컴파일이 될까요? 똑같이 src 부분에서 (예) cha_04_ ) 이런식으로 작성 후 공부하면 될까요?그전에 나도 코딩님강의로 공부한 javaworkspace 프로젝트 파일을 다시 불러올수는없는건가요?ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
@Autowired 주입
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 중 @Autowiredpublic DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); }이 코드에서 Autowired로 DiscountPolicy에 해당하는 빈을 불러와 Map에 저장하는걸로 알고있는데 수업 내용 중 @Autowired는 타입으로 조회를 해 2개 이상인 경우에는 오류나 난다고 배웠습니다. 그렇다면 1개를 선택해야하는데 2개 이상이 있기 때문에 오류가 발생하는것이고 Map처럼 여러 개를 넣을 수 있는경우는 상관이 없는건가요?