묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
섹션 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처럼 여러 개를 넣을 수 있는경우는 상관이 없는건가요?
-
미해결김영한의 실전 자바 - 기본편
키보드 뭐쓰는지 궁금해요ㅠㅠ
학습과 관련은 없지만, 키보드 소리가 너무 좋아서요..
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
인텔리제이 자바버전 17버전..
스프링 공부떄매 17버전을 쓰고있는데 17버전에서는 해당 강의들으면서 실습 불가능한가요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
섹션8_문제와풀이3
범위가 아닌 값이 딱딱 떨어지는거면 switch문을 사용하는게 좋다고 강의시간에 들었습니다. 그래서 저는 switch 문으로 풀어봤습니다. Q1 : switch 문에서 break는 이렇게 사용하는게 맞을까요? continue는 굳이 사용할 필요가 없을까요? switch 문에서 break랑 continue 적절히 쓰는법 알려주시면 감사합니다 !Q2 : 가독성면에서는 어떤지도 피드백 부탁드립니다 !package array.ex; import java.util.Scanner; public class ArrayEx10 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] productPrices = new int[10]; String[] productNames = new String[10]; int productCount = 0; while (true) { System.out.println("1. 상품 등록 | 2. 상품 목록 | 3. 종료"); System.out.print("메뉴를 선택하세요 : "); int option = scanner.nextInt(); scanner.nextLine(); switch (option) { case 1 -> { if (productCount < 10) { System.out.print("상품 이름을 입력하세요 : "); productNames[productCount] = scanner.nextLine(); System.out.print("상품 가격을 입력하세요 : "); productPrices[productCount] = scanner.nextInt(); productCount++; } else { System.out.println("더 이상 상품을 등록할 수 없습니다."); } break; } case 2 -> { if (productCount == 0) { System.out.println("등록된 상품이 없습니다."); } else { for (int i = 0; i < productCount; i++) { System.out.println(productNames[i] + " : " + productPrices[i] + "원"); } } break; } case 3 -> { System.out.println("프로그램을 종료합니다."); System.exit(0); } default -> { System.out.println("올바른 메뉴가 아닙니다."); break; } } } } }
-
미해결스프링 핵심 원리 - 기본편
특정 타입으로 조회 시 빈 이름을 지정하는 테스트 코드 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]수업 내용 중에서 스프링 빈 조회 테스트 코드를 짤 때,동일한 타입이 둘 이상인 경우에는public class ApplicationContextSameBeanFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class); @Test @DisplayName("타입으로 조회 시 같은 타입이 둘 이상 있으면, 빈 이름을 지정하면 된다.") void findBeanByName() { MemberRepository memberRepository = ac.getBean("memberRepository1", MemberRepository.class); assertThat(memberRepository).isInstanceOf(MemberRepository.class); } }인스턴스를 비교할 때 인터페이스인 MemberRepository.class를 사용해줬는데,상속 관계 설명 시에는public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); @Test @DisplayName("부모 타입으로 조회 시 자식이 둘 이상 있으면, 빈 이름을 지정하면 된다.") void findBeanByParentTypeBeanName() { DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class); assertThat(rateDiscountPolicy).isInstanceOf(RateDiscountPolicy.class); } }구체화 타입인 RateDiscountPolicy.class로 인스턴스를 확인한 이유가 뭔지 궁금합니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
If else
안녕하세요 선생님...else가 ㅈㅏ꾸 없는 단어라고 뜨고 else sout 이후 부터 sout도 없는 단어라고 떠요어떻게 해결하나요 감사합니다
-
해결됨김영한의 실전 자바 - 기본편
static 메서드 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. findPay 메서드가 static이면 이 안에서 호출되는 메서드는static이어야 하는것 아닌가요? equals 메서드는 String 메서드로 단지 option에만 쓰여서 해당되지 않는 건가용
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
개념이 잘 이해가 안가요 ㅠ 도와주세요
고민.1 chap 12 부터 이해가 안갔는데 threadA.start(),threadB.start(); 이부분에서 그냥 출력하면 되지 굳이 왜 try catch를 써서 해주는지 궁금합니다. try catch는 예외 처리를 할떄 쓰는 것인데 예외 처리 할게 있는게 아닌데 왜쓰는건가요?고민 2.Runnable 인터페이스를 가져오려면 무조건 추상메소드 run을 정의해줘야하는게 아닌가요? ㅠㅠ 고민 3. Thread는 클래스고 Runnable은 인터페이스인데이런식으로 쓰레드 객체를(?) 만들 떄 runnableA를 괄호안에 넣는 이유가 runnableA를 쓰레드화를 할려고 그런건 가요? 질문을 조금 두서 없이했지만 도와주시면 감사하겠습니다.