묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
[오타 제보] pdf 13장 정리 부분
[오타 제보]대상 강의록: 13. 스레드 풀과 Executor 프레임워크2.pdf위치: p.49대상 문단: 밑에서 3번째 "그래서 일반적인 상황이라면 ~ ..."수정 전(1): 한번에 처리할 수 있는 수를 제안하고 안정적으로 처리하고 싶다면 ...수정 후(1): 한번에 처리할 수 있는 수를 제한하고 안정적으로 처리하고 싶다면 ...--수정 전(2): 그러다가 일반적인 상황을 벋어날 정도로 ~ ...수정 후(2): 그러다가 일반적인 상황을 벗어날 정도로 ~ ... 이번 강의도 잘 들었습니다. 양질의 강의 제공에 감사드립니다! 저랑 너무 잘 맞는 강의스타일 입니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
interrupt() 호출 질문 입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! interrupt() 호출 시점에서 TIMED_WAITING → RUNNABLE로 전환될 때 "run 작업중" 로그가 찍히는 건가요?"작업 중단 지시"가 찍히지 않는 이유는 sleep() 실행 중 InterruptedException이 발생해서 catch를 타는건가요?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
이름 바꾸기
23번째줄에서 for문 i 말고 지뢰라는 이름으로 (예를들어, mines 등 ) 바꿔도 되지 않을까요 ..?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
try-catch-finally를 사용해서 finally { notify() } 를 하지 않는 이유?
예제 3번 코드를 보다 의문이 들어 질문드립니다.코드를 보면,@Override public synchronized void put(String data) { // 버퍼가 가득 찬 경우, 빌 때까지 주기적으로 체크 while (queue.size() == max) { log("[put] 큐가 가득 참, 생산자 대기"); try { wait(); log("[put] 생산자 깨어남"); } catch (InterruptedException e) { throw new RuntimeException(e); } } queue.offer(data); log("[put] 생산자 데이터 저장, notify() 호출"); notify(); // WAIT -> BLOCKED }에서 인터럽트 예외가 발생하면 밑의 notify() 코드가 호출이 되지 않습니다.이 문제 상황에서 한 스레드라도 notify()문을 호출하지 않게되면 영원히 대기 중인 스레드가 생겨서 정상적인 프로그램 종료가 일어나지 않을 것 같습니다. 그래서 제 생각은 notify() 메서드를 finally문으로 감싸줘야 한다고 생각하는데 이게 맞는지 궁금합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 아래처럼 Stack 대신 Queue 를 사용해 BFS 로 변경해도 문제가 없을까요? private void openSurroundedCellsBFS(CellPosition cellPosition) { Queue<CellPosition> queue = new LinkedList<>(); queue.add(cellPosition); while (!queue.isEmpty()) { openAndEnqueueCell(queue); } } private void openAndEnqueueCell(Queue<CellPosition> queue) { CellPosition currentCellPosition = queue.poll(); // 큐에서 꺼냄 if (isOpenedCell(currentCellPosition)) { return; } if (isLandMineCellAt(currentCellPosition)) { return; } openOneCellAt(currentCellPosition); if (doesCellHaveLandMineCount(currentCellPosition)) { return; } List<CellPosition> surroundedPositions = calculateSurroundedPositions(currentCellPosition, getRowSize(), getColSize()); for (CellPosition surroundedPosition : surroundedPositions) { queue.add(surroundedPosition); } }
-
미해결스프링 핵심 원리 - 기본편
2개의 빈 등록 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. https://drive.google.com/file/d/1xmVgaw7U85V7WRYzRUU36ayWkFBmjSZ2/view?usp=sharing CoreApplicationTests 에서 주석 처리 후에도 오류가 발생합니다. 에러 메시지를 읽어보니 같은 이름의 스프링 빈이 두 개 등록되어서 일어난 오류 같은데, 아무리 찾아봐도 어디서 빈이 두 개 등록되었는지 찾을 수 없어 질문 드립니다.
-
미해결스프링 핵심 원리 - 기본편
AI 말고 지식공유자님의 답변 부탁드립니다
https://www.inflearn.com/community/questions/1525242https://www.inflearn.com/community/questions/15265171주일이 지나도 답변이 안 달려서 다시 올려봅니다.
-
미해결스프링 핵심 원리 - 기본편
이 경우는 왜 그런 것일까요?
아래와 같은 AppConfig를 설정 정보로 컨테이너를 생성했을 때@Configuration class AppConfig { @Bean public BeanA beanA1() { return new BeanA(); } @Bean public BeanA beanA2() { return beanA1(); } @Bean public BeanA beanA3() { return new BeanA(); } }빈 이름이 beanA1, beanA2 인 것 끼리는 같은 객체고 beanA3 혼자 다른 객체로 빈이 등록되었는데요결국에는 메서드 beanA2() 의 return문에 쓰인 beanA1() 은메서드 beanA3() 의 return문에 쓰인 new BeanA() 과 다를 게 없다고 생각하였으나 결과는 다르게 나오더라고요. @Configuration 을 적용함으로써beanA2 가 등록될 때, return문에 있는 beanA1() 를 따라갔을 때 있는 new BeanA() 를 만나도CGLIB 를 통해 조작된 바이트코드로 인해 정말 new를 다시 하지 않고 (원래 자바 코드라면 new를 했겠지만)메서드 beanA1() 에서 이미 등록된 빈을 참조하여 등록됩니다. 여기서 의문인 점은 beanA3 가 등록될 때는 왜 원래 자바 코드 그대로 new 를 실행하게 되나요?바이트코드를 조작할 때, return 문에 들어가는 게 '메서드'인지 'new ~' 인지 등의 분기가 또 들어가는 건가요?만약 제 테스트가 틀린 거라면 아래 테스트 코드를 참고해주시기 바랍니다.public class AppConfigTest { @Test void test1() { ApplicationContext ac = new AnnotationConfigApplicationContext(Appconfig.class); BeanA beanA1 = ac.getBean("beanA1", BeanA.class); BeanA beanA2 = ac.getBean("beanA2", BeanA.class); BeanA beanA3 = ac.getBean("beanA3", BeanA.class); System.out.println(beanA1); // BeanA@e54303 System.out.println(beanA2); // BeanA@e54303 System.out.println(beanA3); // BeanA@e8df99a (혼자만 다름) } @Configuration static class Appconfig { @Bean public BeanA beanA1() { return new BeanA(); } @Bean public BeanA beanA2() { return beanA1(); } @Bean public BeanA beanA3() { return new BeanA(); } } }
-
미해결김영한의 실전 자바 - 중급 2편
hashCode() 오타? 질문
강의 자료 보면, 전부 다 해시코드 만들 때, Object.hashCode()를 사용한다고 되어있는데, 막상 equals()와 hashCode() 오버라이딩된 것을 보면, Objects인데, 둘은 서로 다른 것 아닌가요? 오타 아닌가요?
-
미해결김영한의 실전 자바 - 중급 1편
catch 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]예외가 터지면서 객체가 생성이 됐지만 참조값 대입을 안했는데 어떻게 catch (NetworkClientExceptionV2 e)에서 참조값을 가지고 있는 건가요?
-
미해결김영한의 실전 자바 - 중급 2편
자료구조, 알고리즘
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]자료구조, 알고리즘이 재밌어야 할까요? 개발자가 되려면요
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
prestartCoreThread()와의 차이점, active 카운트
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 해당 강의와 관련된 내용을 학습하던 중에 prestartAllCoreThreads()외에도 prestartCoreThreads()라는 메서드가 존재하는 것을 확인했습니다.제가 인지한 두 메서드의 차이점은 다음과 같습니다.|메서드 |prestartAllCoreThreads()|prestartCoreThreads()| |---------------|------------------------|---------------------| |생성되는 스레드 수 |전체 코어 스레드 수 |1개씩 | |생성된 스레드의 상태|active 아님 |active |여기서 후자의 경우 1개씩 생성한다는 점은 이해가 가는데, 왜 두 메서드의 경우에서 생성한 스레드의 상태가 active냐/아니냐로 차이가 나는지는 모르겠습니다.챗지피티와 이에 대해서 대화를 좀 나눴는데 그 내용도 이해가 되지 않습니다.다수의 스레드가 동시에 getTask()를 호출하면 모두 블로킹 상태가되어 락을 기다리지 않기 때문에 active 카운트가 증가하지 않는다.. 라고 하는데 이해가 가지 않습니다. 실행 결과// case1. 생성된 스레드가 active 상태가 아님 poolExecutor.prestartAllCoreThreads(); printState(executorService); //15:31:40.628 [ main] [pool=1000, active=0, queuedTasks=0, completedTasks=0 // case2. 생성된 스레드가 active 상태임 poolExecutor.prestartCoreThread(); printState(executorService); //15:17:53.579 [ main] [pool=1, active=1, queuedTasks=0, completedTasks=0
-
해결됨TS/JS 디자인 패턴 with Canvas: 제로초에게 제대로 배우기
질문 있습니다.
안녕하세요 싱글턴 강의 내용 중 매개변수로 빼거나 클래스라면 this를 사용하면 된다. 면 된다 하셨는데 this를 아래 코드처럼 운용 하는건 말하는 걸까요?? class Singleton<T> { private static instance: Singleton<any>; protected data: T; protected constructor(data: T) { this.data = data; } public static getInstance<T>(data: T): Singleton<T> { if (!this.instance) { this.instance = new this(data); } return this.instance; } public getData(): T { return this.data; } } export default Singleton; 감사합니다!!
-
해결됨김영한의 실전 자바 - 중급 1편
static 사용
package exception.ex; public class NetworkService { public void sendMessage(String data) { String url = "http://example.com"; NetworkClient networkClient = new NetworkClient(url); networkClient.initError(data); String connectResult = networkClient.connect(); if (isError(connectResult)) { System.out.println("[log] 오류 코드: " + connectResult); } else { String sendResult = networkClient.send(data); if (isError(sendResult)) { System.out.println("[log] 오류 코드: " + sendResult); } } networkClient.disconnect(); } private static boolean isError(String resultCode) { return !resultCode.equals("success"); } }오늘 강의 중 작성해주신 코드입니다.isError()를 static method로 잡으신 이유가 궁금합니다.instance method로도 가능할텐데 어떤 의도로 static 여부를 결정해야하는지 팁이 있을까요?
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
[오타 제보] 13. 스레드 풀과 Executor 프레임워크2
[오타 내용]대상 강의록: 13. 스레드 풀과 Executor 프레임워크2.pdf대상 위치: p.2 close() 부분오타 내용변경 전: close() 는 자바 19부터 지원하는 서비즈 종료 메서드이다변경 후: close() 는 자바 19부터 지원하는 서비스 종료 메서드이다
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
스레드 작업 수행중 Ctrl + C 입력을 통한 인터럽트 명령이 제 생각대로 수행되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[소스 코드 다운로드 링크]https://drive.google.com/file/d/1c0QnKniulwUHetmd8iRalCwtm1o3RxSf/view?usp=share_link[질문 내용]질문 대상 소스 코드: NewOrderService.java - line 30 제 생각: 스레드들이 작업을 수행중일 때 (mac 기준) ctrl + c를 누르면 키보드 인터럽트가 발생하여 catch block에 잡혀서 line 31의 log("일부 작업이 실패했습니다."); 코드가 수행될 것이라고 예상했습니다. 하지만 ctrl + c를 입력하더라도 예외는 발생하지 않고, 스레드들이 정상적으로 처리되는 것이 실제 흐름이었습니다.질문 1-1. ctrl + c 입력은 인터럽트인가요?질문 1-2. 만약 1-1에 대한 답변이 yes라면, 시스템 상의 인터럽트(?)는 맞지만 자바 프로그램 상의 인터럽트는 아닌 것인가요?질문 1-3. 만약 1-1에 대한 답변이 yes라면, 이는 터미널 상에서만 입력 가능한 인터럽트이고, 인텔리제이에서는 불가능한 입력인가요?질문 2. (인텔리제이에서) 자바 프로그램에 대해서 예외를 일부러 발생시키려면 throw new IllegalStateException(); 등과 같이 코드를 통해서만 가능한가요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
향상된 for 문 사용법 의문점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 배열의 입력과 출력 문제입니다. 스캐너로 배열을 입력받을 때 향상된 for문을 사용했더니 결과가 0,0,0,0,0이 나왔습니다. 주석처리된 일반 for 문으로 문제를 풀면 제대로 나옵니다. 두 가지가 같은 결과가 나올거라고 생각했는데 왜 다른 결과가 나온건지 알고싶습니다.package array.ex; import java.util.Scanner; public class Array02 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int[] nums = new int[5]; //왜 안되는거지 for (int num : nums) { num = input.nextInt(); } // for (int i = 0; i < 5; i++){ // nums[i] = input.nextInt(); // } for (int i = 0; i < 5; i++){ System.out.print(nums[i]); if (i == 4){ break; } System.out.print(", "); } } }
-
미해결김영한의 실전 자바 - 중급 1편
str.concat("!!!")) 부분 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]앞에 내용에서는 concat은 반환값이 있기 때문에String str1 = "Hello" 일 경우 뒤에 느낌표를 붙여주기 위해서는String str2 = str1.concat("!!!"); 이렇게 해야된다고 했는데강의 1분 45초 부분에서 str.concat("!!!")이라고 했는데 str 뒤에 느낌표 세 개가 붙어서 출력되는 이유가 먼가요 ??
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
맥북 intelliJ 키맵 설정 질문
안녕하세요. 김영한님 강의를 입문편부터 쭉 듣고 있다가 중간에 윈도우에서 맥북으로 바꿨습니다. 단축키가 처음에 익숙하지 않더라고요.그래서 선생님 강의에서 단축키 쓰실때마다 무슨 단축키 쓰셨는지 나오는 부분을 항상 참고해서 써보는데 맥북에서는 선생님의 단축키 설정과 제 단축키 설정이 다른건지 잘 안되더라고요.현재 제 인텔리J 키맵은 IntelliJ IDEA Classic으로 되어있습니다. 김영한님의 키맵 세팅이 궁금합니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
선생님 에버리지 값 질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.선생님 에버리지 값에 SUM 을 안쓰고 저렇게 가져다 쓰면 40이 나오는 이유를 알려주시면 감사하겠습니다