묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
챕터9 문제와 풀이2 이렇게 메서드 사용해서 이렇게 풀어도 괜찮은건가요..?
package method.ex; import java.util.Scanner; public class MethodEx4 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int balance = 0; while (true) { printMenu(); int option = getMenuOption(scanner); balance = processOption(option, balance, scanner); if (option == 4) { break; } } } public static int getMenuOption(Scanner scanner) { System.out.print("선택: "); return scanner.nextInt(); } public static int processOption(int option, int balance, Scanner scanner) { if (option == 1) { return deposit(balance, scanner); } else if (option == 2) { return withdraw(balance, scanner); } else if (option == 3) { showBalance(balance); } else if (option == 4) { printFinish(); } else { printError(); } return balance; } public static void printMenu() { System.out.println("---------------------------------"); System.out.println("1.입금 | 2.출금 | 3.잔액 확인 | 4.종료"); System.out.println("---------------------------------"); } public static void printFinish() { System.out.println("시스템을 종료합니다."); } public static void printError() { System.out.println("올바른 선택이 아닙니다. 다시 선택해주세요."); } public static int deposit(int balance, Scanner scanner) { System.out.print("입금액을 입력하세요: "); int deposit = scanner.nextInt(); balance += deposit; System.out.println(deposit + "원을 입금하였습니다. 현재 잔액: " + balance); return balance; } public static int withdraw(int balance, Scanner scanner) { System.out.print("출금액을 입력하세요: "); int withdraw = scanner.nextInt(); if (balance >= withdraw) { balance -= withdraw; System.out.println(withdraw + "원을 출금하였습니다. 현재 잔액: " + balance); } else { System.out.println(withdraw + "원을 출금하려 했으나 잔액이 부족합니다."); } return balance; } public static void showBalance(int balance) { System.out.println("현재 잔액: " + balance + "원"); } }
-
미해결고도 엔진(Godot Engine)을 통한 게임 개발 박치기!! - 기본 개념부터 실전 게임 제작까지 한방에!
시그널 - 자식에서 부모노드로 접근
훌륭한 강의 잘 보고 있습니다~! 감사합니다. ● 의문점:시그널 강의 결론은,"자식 노드쪽에서 부모 노드 쪽을 접근할 때 시그널을 사용하라" 입니다.헌데 강의의 예시를 살펴보면부모 씬의 스크립트(game .gd) 에서 시그널을 선언하고, 그 시그널을 부모 씬의 스크립트 함수와 연결하고, 부모 씬의 함수가 발동되고 있는데요그럼 그냥 부모 씬에서 모든 것이 이루어지는 것이지 자식 쪽에서 부모를 접근하는 것으로 보기가 어려웠습니다.뭔가 자식 쪽 시그널이 발동되면부모의 함수가 호출되는 상황이어야 할 것 같은데시그널로 이게 가능한지요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
ExecutorService close() 메소드 동작 설명 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]ExecutorService 우아한 종료 - 구현01:07 close() 메소드 설명 부분에"shutdown() 을 호출하고, 하루를 기다려도 작업이 완료되지 않으면 shutdownNow() 를 호출한다." 에 오류가 있어 보입니다. [내용 정정]"shutdown() 을 호출하고, 작업이 완료될 때까지 무한정 반복대기한다. 인터럽트가 발생하면 shutdownNow() 를 호출한다." 로 변경해야 하지 않나요? [근거]Eclipse Temurin-21.0.4+7 (JDK 21) 버전 코드 원문public interface ExecutorService implements Executor, AutoClosable { // .. @Override default void close() { boolean terminated = isTerminated(); if (!terminated) { shutdown(); boolean interrupted = false; // 작업 미완료시 재시도 while (!terminated) { try { // 하루간 작업 종료 대기, 작업 미완료시 `false` 반환 terminated = awaitTermination(1L, TimeUnit.DAYS); } catch (InterruptedException e) { if (!interrupted) { shutdownNow(); interrupted = true; } } } if (interrupted) { Thread.currentThread().interrupt(); } } } }1일이 지났다고 해서 interrupt() 를 호출하지 않고 재시도 하는 것으로 보입니다. [증명 코드]MyExecutor 로 close() 메소드 대기 시간을 1일 -> 1초로 조정하여 오버라이드합니다.10초간 대기하는 Task 를 실행시킵니다.class ShutdownTest { record CallableSleepTask( String name, long sleepMs ) implements Callable<Long> { @Override public Long call() throws Exception { sleep(this.sleepMs); return this.sleepMs; } } static class MyExecutor extends ThreadPoolExecutor { public MyExecutor() { super(1, 1, 0, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); } @Override public void close() { boolean terminated = isTerminated(); if (!terminated) { shutdown(); boolean interrupted = false; while (!terminated) { try { // 종료 대기 시간 1초로 조정 terminated = awaitTermination(1L, TimeUnit.SECONDS); } catch (InterruptedException e) { if (!interrupted) { shutdownNow(); interrupted = true; } } } if (interrupted) { Thread.currentThread().interrupt(); } } } } @DisplayName("Should wait infinitely when .close()") @Test void executorServiceCloseTest() { // given try (ExecutorService myExecutor = new MyExecutor()) { log("작업 시작"); CallableSleepTask sleepTask = new CallableSleepTask("test", 10_000L); myExecutor.submit(sleepTask); // 10 초간 테스크 실행 log("작업 진행중.. close 대기"); // 기다리지 않고 .close() 자동 호출 } } }실행 결과18:38:39.524 [ main] 작업 시작 18:38:39.527 [ main] 작업 진행중.. close 대기 (약 10초 대기 후 종료) Process finished with exit code 0테스크 종료를 위해 10초 대기가 이뤄졌습니다.close 가 조정된 대기시간인 1초 뒤에 인터럽트를 발생시켰다면 인터럽트 로그가 남았을 것이고, shutdownNow()가 호출됐다면 10초 대기없이 즉시 종료되었을 것입니다. 따라서 정정이 필요해보여요.close 메소드는 "shutdown() 을 호출하고, 작업 완료시까지 무한정 반복대기한다. 인터럽트가 발생하면 shutdownNow() 를 호출한다."
-
미해결김영한의 실전 자바 - 중급 1편
지역변수와 캡처 변수의 값이 달라지는게 문제인 이유?
지역클래스가 접근하는 지역 변수는 사실상 final이어야 하고,그 이유는 '지역 변수의 값과 캡처된 변수의 값이 서로 달라지는 문제가 발생하기 때문' 이라는 것은 이해했습니다! 그런데 지역 변수의 값과 캡처된 변수의 값이 서로 달라지는게 왜 문제인가에 대해서 의문이 남아서 질문 드립니다 ㅠㅠ 제가 의문을 가지는 부분을 말씀드리면캡처된 지역변수를 가지고 있는 지역클래스의 인스턴스를 생성 후 사용하는 시점에서는 어차피 원래 지역변수가 있던 스택은 제거된 상태이고,그래서 값이 서로 같고 다름을 떠나서 아예 없는건데 애초에 동기화 문제 자체를 신경쓸 필요가 없는것 아닌가요??
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
경고성 콘솔창 출력
[질문 내용]혹시 이 부분은 어디서 해결할 수 있을까요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
72강 method1Ref 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]아래에 public static int add(int a, int b) 이 부분에서 빨간줄이 그어지며 실행이 안되는 상황입니다. 해결방법이 있을까요?
-
미해결스프링 핵심 원리 - 기본편
초기화 콜백과 생성자 DI
[질문 템플릿]1. 강의 내용과 관련된 질문인가요?예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 빈 생명주기 콜백에서 질문이 생겨 여쭤봅니다.이전 강의에서는 '생성자 주입'을 사용하는 것이 좋다고 하셨는데, 이번 NetworkClient 클래스에서는 setter로 DI를 하시면서 스프링 빈의 이벤트 라이프사이클을 설명해주고 계십니다.그러면, 생성자 주입으로 의존관계를 주입할 경우 이번 강의 주제인 '초기화 콜백'은 동작하지 않는 것일까요 ?설명해주신 스프링 빈의 이벤트 라이프사이클이 생성자DI 기준에서는컨테이너 생성 -> 빈 생성,의존관계 주입 -> 사용 -> 종료가 되는 것일까요 ? 혹여나 제가 잘못 이해하고 있는 부분이 있다면 지적 부탁드립니다, 좋은 강의 제공해주셔서 항상 감사드립니다 !!
-
해결됨김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
instance의 다운캐스팅 문제
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]지금 강의에서 instance를 이런식으로 선언해서 사용하고 있습니다. Object instance = constructor.newInstance("hello"); 이렇게 사용한다는건 instance가 Object타입으로 선언이 된거고 그렇다면 BasicData로 다운캐스팅을 해준 후에 call 메서드를 불러야 맞는게 아닌가요? 이게 Object 타입인데 call 메서드가 문제 없이 작동하는게 조금 괴리감이 들어서 질문드립니다..!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
프로세스의 메모리 구성과 자바 메모리 구조의 상관 관계
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 저는 영한님의 강의를 듣고 자바와 스프링을 공부하고 있는 수강생입니다. 양질의 강의를 제공해 주셔서 감사합니다.강의를 전부 듣고 복습을 하던 중에 궁금한 부분이 생겨서 질문 드립니다. 섹션 2 "프로세스와 스레드" 강의에서는 프로세스의 메모리 구성에 대한 내용과,섹션 3 "스레드 시작1" 강의에서는 자바 메모리 구조에 대한 내용의 상관 관계에 대해서 이해가 어려운 부분이 있어서 질문드립니다. 프로세스의 메모리는 4가지 영역(코드, 데이터, 힙, 스택)으로 나눠서 설명해 주셨고자바의 메모리 구조는 크게 3가지 영역(메서드, 힙, 스택)으로 나눠서 설명해 주셨는데요.여기서 프로세스의 힙, 스택 영역과 자바의 힙 스택 영역이 같은 것을 의미하나요?만약 같다면, 프로세스에서 코드, 데이터 영역은 자바의 메모리 구조로 봤을 때 메서드 영역에 포함되는 개념인가요?중복되는 질문일 수 있지만.. 검색해보니, 일반적으로 프로세스당 하나의 jvm 인스턴스를 가진다고 하는 것을 확인했는데요. 그럼 한 jvm 인스턴스에서 하나의 프로세스만을 관리하고 있을 때, (프로세스의 메모리 구조 == 자바의 메모리 구조)라고 생각해도 되는 걸까요?질문 확인해 주셔서 감사합니다. 좋은 하루 되세요!
-
미해결파이썬 알고리즘 트레이딩 파트1: 알고리즘 트레이딩을 위한 파이썬 데이터 분석
read_html 오류 해결법
sp500 = pd.read_html(url)에서 오류가 나는 경우,pip install lxml해주면 됩니다
-
해결됨오브젝트 - 기초편
설계( DB or 도메인 ) 순서 질문
안녕하세요. 용호님 좋은 강의 만들어 주셔서 감사합니다. 강의를 통해 객체지향에 대해 많이 알게 되었습니다. 저의 질문은 용호님 께서는 신규프로젝트를 시작하실때 db설계를 먼저 완료하시는지, 도메인설계를 먼저 완료하시는지, 아니면 두 과정을 병렬로 진행하사는지 궁금합니다. 감사합니다.
-
미해결김영한의 실전 자바 - 기본편
수업 자료 문서
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]수업자료로 사용하시는 메모장은 어떤 프로그램을 사용하신건가요?
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
강사님 덕에 요즘 열심히 수강하고 있습니다
2년 전에 c언어를 배웠었는데 다트 언어는 그에 비해 너무 친절해서 행간에 추론이 필요한 부분이 있네요..사진 상 print(newBlackPink.toList());나 print(newBlackPink2);가 value는 똑같은데 괄호만 종류가 다른데요, 이때 toList를 안 먹이면 Map으로 나오는 건지, 그렇다면 final과 newBlackPink사이에는 Map이 생략되어 있는건지 궁금합니다. 아니라면 어째서 괄호의 종류가 다르게 나오는 건지 알려주세요!요지는 newBlackPink2의 자료형이 궁금합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
문제 1번 동시성 오류의 이유
간단한 질문 하나가 있습니다! 혹시 문제 1번에서는 "멀티 코어" 이기 때문에 발생한 상황으로 봐도 맞을까요? count = count + 1 이 세가지 작업을 수행하긴 하지만, 한 줄이기 때문에 CPU 가 한 줄씩 수행하는 입장에서 도중에 스레드를 변경하진 않는 것 아닌가 싶은 의문이 들어서 문의드리게 되었습니다!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
[오타 제보] pdf 4.
오타 제보 드려요 4. 스레드 제어와 생명 주기2.pdf 6페이지 이때 work 스레드는 TIMED_WAITNG부분입니다.
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
Rest API - 많이하는 실수 에서 복수형
회사 컨벤션마다 다르긴한데 생각보다 단수로도 많이 사용하지 않나요? 단일 데이터를 생성하는것과 여러 데이터를 생성하는 것을 구분하는 경우도 많은 것으로 알고있습니다. 실제로 naver, kakao의 많은 부서에서도 이런 컨벤션을 지키는것으로 아는데 반드시 복수형으로 쓰면 안되는것일까요? 참고 공식자료가 있을까요?
-
미해결파이썬 알고리즘 트레이딩 파트1: 알고리즘 트레이딩을 위한 파이썬 데이터 분석
KeyError: 'Adj Close' 해결법
KeyError: 'Adj Close'오류가 나는 이유는, yahoo finance method가 변경되어 Adj Close를 안 가져오기 때문입니다.#기존 df = yf.download(tickers=["AAPL","MSFT","GOOG","AMZN"])["Adj Close"] #고침 df = yf.download(tickers=["AAPL","MSFT","GOOG","AMZN"])["Close"]으로 변경하면, 오류가 해결됩니다.
-
미해결파이썬 알고리즘 트레이딩 파트1: 알고리즘 트레이딩을 위한 파이썬 데이터 분석
nbformat>=4.2.0 해결법
ValueError: Mime type rendering requires nbformat>=4.2.0 but it is not installed오류가 나오는 경우,pip install ipykernel pip install --upgrade nbformat코드를 돌리고Visual Studio Code 윗쪽에 Restart 버튼을 눌려 Kernel 재시작하면 작동합니다.
-
미해결김영한의 실전 자바 - 중급 2편
강의 중 이중연결리스트
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 이중연결리스트는 안다루나요?
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
Metaspace에 대한 질문
안녕하세요 널널한개발자님 수업들으면서 많은 것을 배우고 있습니다! 다름이 아니고 Method Area 수업에서는 Method Area가 Java 8부터는 PermGen에서 Metaspace에 속하게 되고, JVM Heap 영역이 아니라 Native Memory에서 관리한다고 배웠는데 JVM Heap 영역 수업에서 영구 세대(Metaspace)가 같은 것을 지칭하는 것일까요? 제가 보기에는 같은 것을 지칭하는 것 같다고 생각합니다. 그러면 Meataspace는 더 이상 Heap 영역에서 관리하지 않기 때문에 GC로 제거가 되지 않는 것이 맞을까요? 또한 저는 처음에 PermanentGen = Method Area라고 생각했는데 그게 아니라 Permanent 영역이 Method Area 영역을 포괄하는 큰 영역이기 때문에Java 8 이전: PermentGen에 포함된 MethodArea까지 GC가 관리(full시)Java 8 이후: MethodArea가 PermGen인 Heap 영역에서 분리되었으니 더이상 GC 관리 X 다만 다른 PermGen 영역만 full gc때 관리라고 생각하면 될까요?
주간 인기글
순위 정보를
불러오고 있어요