학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 김영한님은 이렇게 푸셨는데 저는 이렇게 풀었습니다. 이게 문제가 있는 건지 알고 싶습니다. package operator.ex; public class OperationEx3 { static void main(String[] args) { int score = 88; System.out.println(80 <= score && score <= 100); } }
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] synchronized 이전 강의에서 join 을 활용하여 순서를 쓰레드의 순서를 보장하여 실행하는 방법에 대해 배웠습니다. 만약 동시에 같은 값에 대해 접근하는 것이 문제 라고 가정 할 경우 join 을 활용하여 특정 쓰레의 종료 이전 까지 다음 쓰레드 를 시작하는 것을 막는 다면 해결할수 있는 문제가 아닌가 생각합니다. 예를들어 다음과 같이 t1.join() 을 사용하면 t1 의 쓰레드가 종료 이전 까지는 t2 는 대기 상태가 될 것이고 t1 에서 최종 결과가 나오기 전까지는 t2 는 실행하지 못할 것 입니다. public class BankMain { public static void main(String[] args) throws InterruptedException { //BankAccount account = new BankAccountV1(1000); BankAccount account = new BankAccountV1(1000); Thread t1 = new Thread(new WithdrawTask(account, 800), "t1"); Thread t2 = new Thread(new WithdrawTask(account, 800), "t2"); t1.start(); t1.join(); sleep(500); log("t1 state :"+t1.getState()); log("t2 state :"+t2.getState()); t2.start(); //t2.join(); log("최종 잔액 : "+account.getBalance()); } }
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 메모리 가시성 문제 가 발생하는 이유는 쓰레드가 공유 된 runFlag 값에 대해 반영이 않되어서 발생하는 문제라고 설명을 해주셨습니다. 예를들어 main 쓰레드에서는 false 를 true 로 변경하였으나 work 쓰레드에서는 해당 값이 변경되었는지 모르기 때문에 계속 동작하는 상태 입니다. 여기서 이해가 않가는 부분이 모든 프로그램은 보조기억 장치에서 실행을 하고 실행에 필요한 변수가 값 들은 모두 ram 과 같은 주 기억 장치에 저장되고 사용되는 걸로 알고 있습니다. 그렇다면 이 과정에서 쓰레드는 캐시메모리가 아닌 주기억 장치에서 값을 읽어서 사용해야 합니다. 지금 과정으로 설명된 것을 이해 하면 주기억 장치 또한 단순히 값을 저장하는 것 뿐이고 실제로는 캐시 메모리에서 한번더 데이터를 저장하고 cpu 는 캐시메모리에 접근하여 데이터를 연산한다고 이해 했습니다. 맞을까요?
안녕하세요 좋은 강의 너무 잘 듣고 있습니다. 강의 내용중 parseCommand 메서드를 분리하는 과정에서 sealed interface 를 사용하셨는데 sealed interface 를 쓴 목적이 컴파일타임에 모든 가능한 명령어 케이스를 처리했는지 검증하기 위함인가요? sealed interface 는 주로 모든 케이스를 검증하고 싶을 때 사용한다고 판단하면 될까요?
현재 인앱 결제 시스템 관련 수업 내용을 듣고 있는데, 25년 8월부터 IAP v4에서 v5로 바뀌면서 강의에서 사용한 방식이 현재는 동작하지 않게 바뀌었더라구요. 혹시 v5으로 작성하는 방법을 공유해주실 수 있나요? 강의 코드랑 유니티 문서를 번갈아가면서 기능을 만들고 있는데, StoreController로 구매 처리 단계부터 완전히 갈피를 못잡겠습니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 퀴즈들을 다시 풀어보고 싶은데 한번 풀면 정답이 공개돼 불편함이 있습니다. 방법이 따로 없나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 쇼핑카트 문제 요구사항이 명확하지 않아서 혼돈을 준다고 생각합니다. -상품을 최대 10개만 담을 수 있다. 라는 것을 저는 상품의 '개수'(quantity 총 합) 를 생각했으나, 문제 풀이하시는 것을 보니 상품의 '종류'가 총 10개 더군요. 둘의 풀이는 완전히 달라지기에, 더 명확히 해야한다고 봅니다.
안녕하세요! 질 좋은 강의에 감사인사부터 드립니다! 해당 강의에서 네임스페이스 내부에 정의되는 변수, 함수들이 비록 특정(강의 속에서는 Test 라는) 네임스페이스에 소속되어 있기는 하지만 전역 변수 및 전역 함수로 간주된다고 하셨는데요! 그러면 디폴트로 제공되는 네임스페이스(ex. std) 또는 사용자가 새롭게 정의하는 네임스페이스 영역 내에서 정의되는 변수, 함수들은 스택과 힙 메모리 중 힙 메모리 영역에 저장되는 걸까요!?
1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. Future를 거치는 SumTaskMainV2에서 future2.get()이 future1.get() 실행 후 task1의 call() 완료를 기다리지 않고 바로 실행되는 것을 콘솔 로그로 확인 가능했는데요. 그렇다면 Future를 거치지 않고 결과를 반환한다 가정할 때, task2가 task1 완료를 기다린 후 수행된다고 나와있는데, "Future는 한 스레드 작업의 future1.get() 실행 후, 다른 스레드의 작업 future2.get()은 future1의 call() 완료까지 기다리지 않는 기능이 있다" 이렇게 이해해도 될까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 네트워크 프로그램 자원종료 관련 이해가 안되는 부분이 있어서 문의드립니다. [SessionManagerV6] public synchronized void closeAll() { for (SessionV6 session : sessions) { session.close(); } sessions.clear(); } [SessionV6] // 세션 종료시, 서버 종료시 동시에 호출될 수 있다. public synchronized void close() { System.out.println("closed : " + closed); System.out.println(Thread.currentThread().getName()); if (closed) { return; } closeAll(socket, input, output); // shutdown closed = true; log("연결 종료: " + socket); } 서버에서 ShutdownHook이 발생했을 때 2개의 Client에 Socket이 연결되어 있었다고하면 첫번째 Clinet의 Socket이 정리되고 난 후 2번째 Clinet의 Socket이 정리되는 시점에서는 closed 변수가 true이기 때문에 정리가 안되고 return되는거 아닌가요? 제가 잘 못 이해하고 있는걸까요? 추가적으로 로그를 찍어서 상태값을 확인해 봤는데 이해가 잘 되지 않아서 문의드립니다. 아래는 로그 정보입니다. 17:34:32.806 [ shutdown] shutdownHook 실행 closed : false shutdown 17:34:32.806 [ shutdown] 연결 종료: Socket[addr=/127.0.0.1,port=58474,localport=12345] closed : false shutdown 17:34:32.806 [ shutdown] 연결 종료: Socket[addr=/127.0.0.1,port=58480,localport=12345] 17:34:32.807 [ Thread-2] java.net.SocketException: Socket closed closed : true Thread-2 17:34:32.807 [ Thread-3] java.net.SocketException: Socket closed closed : true Thread-3 17:34:32.807 [ main] 서버 소켓 종료: java.net.SocketException: Socket closed 종료 코드 130 (interrupted by signal 2:SIGINT)(으)로 완료된 프로세스
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 관련 내용이 많아서 질문 검색으로 3~4가지 방식으로 시도해봤는데 gradle만 바꾸는 방식에서 실패했습니다. @Primary 사용, CoreApplicationTests에 따로 classes = AutoConfig.class 옵션넣기 요땐 성공하더라고요 유료 intellij 사용하고 있고 자바 21 사용하고 있습니다. 17로 바꿔봐도 별 상관이 없더라고요 java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@65b97f47 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.OnFailureConditionReportContextCustomizerFactory Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\hyukj\Downloads\core\core\build\classes\java\main\hello\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type ' hello.core.discount .DiscountPolicy' available: expected single matching bean but found 2: rateDiscountPolicy,DiscountPolicy Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type ' hello.core.discount .DiscountPolicy' available: expected single matching bean but found 2: rateDiscountPolicy,DiscountPolicy
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] FileInputStream의 transferTo를 사용할 경우 buffer는 어떻게 설정되는 건가요? 웹 검색을 해보니 개발자가 직접 버퍼를 설정할 필요가 없다고 하는데 기본적인 버퍼의 크기가 정해져 있는건지? 만약 정해져 있다면 어떤 기준을 따라가는지 궁금합니다. 파일처리 시 자바의 메모리를 사용해야하고 이 부분을 잘 처리하지 못할 경우 OOM으로 이어지는 경우가 많아서 정확히 이해하고 싶어서 문의드립니다.
spring.main.allow-bean-definition-overriding=true 07:05~ 부분에서 위 코드를 작성하면 스프링 부트 애플리케이션을 에러가 발생하지 않는 모습을 보여주셨는데요. 20:53:29.311 [main] DEBUG o.s.b.d.LoggingFailureAnalysisReporter --Application failed to start due to an exception org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'drj9812.spring.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:192) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1739) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1651) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:912) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1382) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1221) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1218) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1184) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:983) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:620) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:765) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:454) at org.springframework.boot.SpringApplication.run(SpringApplication.java:321) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1374) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) at drj9812.spring.Application.main(Application.java:10) 20:53:29.311 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter -- *************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of constructor in drj9812.spring.member.MemberServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined by method 'memberRepository' in class path resource [drj9812/spring/AutoAppConfig.class] - memberRepository: defined by method 'memberRepository' in class path resource [drj9812/spring/AppConfig.class] This may be due to missing parameter name information Action: Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed Ensure that your compiler is configured to use the '-parameters' flag. You may need to update both your build tool settings as well as your IDE. (See https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-6.1-Release-Notes#parameter-name-retention) 저의 경우엔 위와 같은 에러가 발생합니다. 강사님과 다르게 저는 에러가 발생한 이유가 무엇인가요? 로그 내용을 보아 AutoAppConfig 과 AppConfig 이 충돌이 난 것 같은데, 이미 AutoAppConfig 에서 excludeFilters 로 AppConfig 은 스캔하지 않도록 설정했으니 에러가 발생하지 않아야 되는 거 아닌가요?