학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 9. 메소드, 문제와 풀이2 코드에서 저는 if문으로 풀었지만, 강사님께서는 switch문으로 푸셨더라구요. 궁금한점은 switch문에 case4: 부분은 왜, return이 들어가나요? break나 continue는 안되는 이유는 알겠지만, return은.. 반환값도 없는데... 잘 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] OrderApp에서 appCofig.memberService()와 appCofing.orderService() 를 실행하고, memberService.join과 orderService.createOrder를 실행하는데 memberService()에서 생성된 MemoryMemberRepository와 orderService()에서 생성된 MemoryMemberRepository가 둘 다 new로 다른 객체라고 생각이 되는데 어떻게 createOrder에서 아이디가 1L인 회원을 조회할 수 있는건가요? join된 메모리와 createOrder에서 하는findById를 실행하는 메모리는 다른 MemoryMemberRepository 객체 아닌가요?
즉 ValueObject 라는 클래스에 만약 hello 라는 변수로 만들었다고 가정해보겠습니다. ValueObject hello = new ValueObject(); 그러면 hello 라는 객체가 생긴거고 오른쪽 그림에는 hello 인스턴스가 생성된 것인가요 ? 아니면 hello 라는 객체가 생성되었꼬, ValueObject 라는 인스턴스가 생성된 것인가요 ?
안녕하세요 저는 선생님께서 작성해주신 코드와 다르게 하기 처럼작성하였습니다. 자체적으로 총 합계를 구해서 displayitems에 같이 도출했는데 하기 처럼 작성해도 무관할까요? 값을 동일하게 도출됩니다. public class ShoppingCart { //배열 private Item[] items = new Item[10]; private int itemCount; public void addItem(Item item) { //item에 데이터 넣어야 함.. 순환할 필욘 없는 듯 if (itemCount >= 10) { System.out.println("장바구니가 가득 찼습니다."); return; } items[itemCount] = item; itemCount++; } public void displayItems() { System.out.println("장바구니 상품 출력"); int sum = 0; for (int i = 0; i < itemCount ; i++) { System.out.println("상품명 : " + items[i].itemName() + ", 합계 : " + items[i].itemTotalPrice()); sum += items[i].itemTotalPrice(); } System.out.println("전체 가격 합 : " + sum); } }
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 의존성 자동 주입의 방법 4가지 중 필드 주입의 방법만 스프링 의존적이라고 하시는 건가요? 아니면 @Autowired를 이용한 의존관계 자동주입 방법 4가지가 모두 스프링 의존적이라는 의미인가요? 제 생각에는 필드 주입만 스프링 의존적이라는 게 좀 이해가 안가서요... 4가지 방법 모두 @Autowired 를 이용한 주입방법인데, 오직 필드 주입만 스프링 의존적이라서 단위 테스트가 불가능하다고 하시는건까요? +추가 혹시 제가 이해한 내용이 맞을까요?! 4가지 방법 모두 스프링 의존적인게 맞음. 그러나 다른 방법은 단위 테스트 시 의존관계가 안들어왔을 경우 내가 직접 넣어줄 수 있는데 필드 주입은 그럴 방법이 아예 없기 때문에 테스트를 꾸리는 것이 힘들어진다는 의미임.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 수정자 주입을 통한 의존관계 주입 시, 해당 의존관계 빈이 컨테이너에 없더라도 예외가 발생하지 않고 실행된다고 하셨는데요. 그러면 의존관계가 주입되지 않은 상태에서 실행이 됐고, 이후 의존관계가 없는 해당 빈을 사용하게 되면 런타임 에러가 발생하나요? 아니면 해당 타입의 추상체가 의존관계로 주입이 될까요?? 어떻게 동작하는지 궁금합니다. +추가 혹시 제가 이해한 게 맞을까요?! 4가지 방법 모두 스프링 의존적인게 맞음. 그러나 다른 방법은 단위 테스트 시 의존관계가 안들어왔을 경우 내가 직접 넣어줄 수 있는데 필드 주입은 그럴 방법이 아예 없기 때문에 테스트를 꾸리는 것이 힘들어진다는 의미임.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 김영한의 실전자바 기본편 섹션6 연습문제 두번째 문제에서 코드에서 제가 작성한 코드와 김영한 선생님이 작성한 코드가 다른데 차이점을 알고 싶습니다. //저의 코드 public void displayItems() { System.out.println("장바구니 상품 출력"); for (int i = 0; i < itemCount; i++) { System.out.println("상품명:" + items[i].getName() + ", 합계:" + items[i].sumPrice()); } //비교하고싶은 부분 System.out.println("전체 가격 합: "+totalPrice()); } //김영한 선생님 코드 public void displayItems() { System.out.println("장바구니 상품 출력"); for (int i = 0; i < itemCount; i++) { Item item = items[i];//저와 다른 부분 System.out.println("상품명: " + item.getName() + ", 합계: " + item.getTotalPrice()); } System.out.println("전체 가격 합: " + calculateTotalPrice()); } 저의 코드는 items[i] 의 참조값의 getName과 sumPrice를 불러서 프린트 했고, 김영한 선생님은 items[i]를 item에 할당해서 item의 getName과 Price를 프린트 했지 않습니까? 질문 1. 기능적으로는 똑같은거 같은데 둘의 차이가 있습니까? 질문 2. 뭔가 똑같아 보이긴 하지만 김영한 선생님이 작성한 코드니까 더 좋아 보이는 이유가 있는거 같은데 혹시 둘의 차이 설명 가능한가요?
<섹션 4. 스프링 컨테이너와 스프링 빈> 파트에서 질문 드리고 싶은게 있습니다. 저와 비슷한 질문을 하신 분이 있어서 그 게시물에 달린 답변을 읽어보았지만, 여전히 이해가 되지 않습니다... https://www.inflearn.com/questions/1045843/%ED%8A%B9%EC%A0%95-%ED%95%98%EC%9C%84-%ED%83%80%EC%9E%85%EC%9C%BC%EB%A1%9C-%EC%A1%B0%ED%9A%8C%ED%95%A0-%EB%95%8C-%EA%B6%81%EA%B8%88%ED%95%9C-%EC%A0%90-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4 void findBeanBySubType() { RateDiscountPolicy bean = ac.getBean(RateDiscountPolicy.class); assertThat(bean).isInstanceOf(RateDiscountPolicy.class); } @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } } 컨테이너를 보면 rateDiscountPolicy() 메소드의 리턴 타입은 DiscountPolicy 타입으로 되어있습니다. 따라서, rateDiscountPolicy라는 이름을 가진 빈은, DiscountPolicy 타입의 RateDiscountPolicy 객체를 저장할 것이라고 생각했습니다. 이러한 상황에서 ac.getBean(RateDiscountPolicy.class) 로 빈을 조회하면 RateDiscountPolicy 타입과 그것의 자식 타입 빈이 조회될 것입니다. 저는 ac.getBean(RateDiscountPolicy.class) 이 어떻게 rateDiscountPolicy라는 이름의 빈을 조회할 수 있는지 알고 싶습니다. 해당 빈은 RateDiscountPolicy 객체이지만, 타입은 DiscountPolicy 타입이므로 ac.getBean(RateDiscountPolicy.class) 로 조회했을 때 걸리지 않을 것이라 생각했습니다... 답변 부탁드립니다. 감사합니다!
6. 접근 제어자.pdf 본문에 오타 수정이 여러 군데 필요합니다. 스피커에 대한 내용 중 폭팔 -> 폭발로 오타 수정이 필요합니다. ‘폭발’은 ‘불이 일어나며 갑작스럽게 터지다’라는 뜻과 함께 ‘속에 쌓여 있던 감정 따위가 일시에 세찬 기세로 나옴’ 또는 ‘힘이나 열기 따위가 갑작스럽게 퍼지거나 일어남’이라는 뜻으로 사용됩니다. ‘폭팔’은 ‘폭발’의 잘못된 표현이므로 사용해서는 안되겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의 16분쯤에 ClientBean 클래스 안에 @Autowired로 스플링 컨테이너를 가져오는 의존관계 등록후. 가져온 스프링 컨테이너 안에서 프로토타입을 빈을 호출하는 것 까진 이해를 했습니다. 궁금한점은 스프링 컨테이너가 여러개 있는 경우 ClinetBean에 있는 ApplicationContext에 무엇이 들어올지 어떻게 알 수 있나요??
[질문 내용] Dog dog = new Dog(); 위의 코드는 Dog 내부에 extends로 Animal이 있기에 Dog 클래스는 Animal 이라는 부모가 있는걸 알 수 있습니다. 하지만 Animal dog = new Dog(); Animal 타입으로 Dog를 생성하면 힙메모리에는 Dog와 Animal이 하나의 영역에 생기지만 Animal 타입으로 선언하였기 때문에 힙메모리에서 Animal 부분을 먼저 바라볼 것으로 생각하는데 어떻게 Animal에서 자식 요소가 있는걸 알고 오버라이딩된 메서드가 우선적으로 처리되는건지 궁금합니다. annotation의 영향인가요? ======= 추가 질문! Animal dog = new Dog(); 위 코드와 같이 선언하면 자바에서는 자동으로 업캐스팅이 이뤄지는것 이라고 이해해도 될까요? Animal dog = (Animal) new Dog(); 위와 같이 자바에서 자동으로 형 변환을 시켜준다고 생각하면 되는건가요?!
안녕하세요. 강의를 들으며 문제를 해결하던 중 질문이 생겨 남깁니다. 섹션 7번 훈련 문제와 풀이 2에서 마지막 문제 사이 정수 구하는 문제인데요. 강사님이 풀어주신 방법과 다르게 이 방법으로 해결해도 맞는걸까요? 답은 똑같이 나옵니다! 항상 잘 듣고 있습니다 감사합니다.
문제 1번 답 public class Car { private static int count; private String car; public Car(String car) { System.out.println("차량 구입, 이름: " + car); this.car = car; count++; } public static void showTotalCars() { System.out.println("구매한 차량 수: " + count); } } 나의 풀이 public class Car { private static int count; public Car(String car) { System.out.println("차량 구입, 이름: " + car); count++; } public static void showTotalCars() { System.out.println("구매한 차량 수: " + count); } } 답과 제 풀이를 비교해보면, 멤버변수로 String car를 지정하고, Car 생성자에서 this 키워드로 car를 받는데, 이 부분을 생략하여도 결과가 같게 나옵니다. 어떤 차이가 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 오류 내용입니다. java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@bd1111a testClass = hello.core.CoreApplicationTests, locations = [], classes = [hello.core.CoreApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@13e3c1c7, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6c6c5427, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1e63ec0b, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@62dae540, org.springframework.boot.test.context.SpringBootTestAnnotation@9ec68d48], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:141) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:97) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) at java.base/java.util.Optional.orElseGet(Optional.java:364) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [/Users/user/Desktop/core/out/production/classes/hello/core/member/MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository 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.boot.SpringApplication.refresh(SpringApplication.java:762) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:464) at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1458) at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:552) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) ... 17 more Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:218) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1420) 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) ... 41 more 어느부분을 수정해야할지 모르겠습니다..ㅠㅠ
이전에 설치할 때는 다른 프로그램 설치할 때와 똑같았는데 이번에는 파일이 이런 형태로 뜨면서 다운이 되는지 안 되는 건지 모르겠어요 첫 강의때 알려주신 홈페이지로 접속해서 그대로 한건데 ,, 다운로드 되지 않으면 클릭하라고 돼있는 버튼 눌러도 똑같은 게 뜨네요 혹시 해결법 아실까요?
스코프를 벗어나면 변수를 쓸 수 없다고 했는데 위 코드는 맨 위에 미리 선언해놨기 때문에 모든 if문에서 쓸 수 있는것으로 확인했습니다. 근데 궁금한것이 if(choice==1)에서 반영된 가격이 어떻게 다음 if문인 choice==2 조건일 때 결제가 가능하게 되는거에요? 1번 눌렀을 때 실행되는 if문에서 가격과 수량이 맨 위(while문 위쪽) 변수에 반영되어 있는건가요?