묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
@ComponentScan 범위 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]설정 정보에 @ComponentScan 어노테이션을 붙이면 해당 클래스의 패키지를 기준으로 하위 모든 클래스를 확인하여 Bean을 등록해주는 것으로 압니다.이번 강의에서 ComponentFilterAppConfigTest에 어노테이션을 붙여주었으니 filter폴더 하위 클래스 모든 곳을 스캔해야할것으로 예상했습니다. 하지만 includefilters를 주석처리하니 BeanA를 빈으로 등록하지 못하는데 왜 그런것인가요?
-
미해결스프링 핵심 원리 - 기본편
의존관계 주입 질문입니다.
4. '스프링 컨테이너와 스프링 빈'강의에서 빈을 한번에 등록하고 그 이후에 의존관계를 주입한다고 알고있습니다. 그런데 '@Configuration과 싱글톤'강의에서 @Bean public MemberRepository memberRepository() { if (memoryMemberRepository가 이미 스프링 컨테이너에 등록되어 있으면?) { return 스프링 컨테이너에서 찾아서 반환; } else { //스프링 컨테이너에 없으면 기존 로직을 호출해서 MemoryMemberRepository를 생성하고 스프링 컨테이너에 등록 return 반환 } } 이렇게 되어있는데 else로직은 앞에서 말했던 것처럼 처음에 빈을 한번에 등록했을 때 실행되는 로직이 맞나요?
-
해결됨스프링 핵심 원리 - 기본편
Thread.sleep 질문입니다.
제가 이해한 바로는 챕터9장 request스코프 강의에서 Thread.sleep을 이용해서 request소멸을 지연하였습니다.이때 sleep메서드는 InterruptedException를 가지고 있기때문에 예외처리를 해줘야합니다.그래서 throws로 예외를 넘겼는데 어떻게 처리되는 건지 궁금합니다.package hello.core2.web; import hello.core2.common.MyLogger; import hello.core2.logdemo.LogDemoService; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequiredArgsConstructor public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider<MyLogger> myLoggerProvider; //의존관계 주입이 일어남 -> MyLogger는 스코프가 request이다. //request의 생존범위는 고객의 요청이 들어오고 나오기까지의 범위이다. //그런데 고객의 요청이들어오지를 않으니 오류가 난다. @RequestMapping("log-demo") @ResponseBody //뷰 화면이 없으므로 ResponseBody로 바로 반환 //원래는 뷰리졸버에게 템플릿을 넘긴다. public String logDemo(HttpServletRequest request) throws InterruptedException { MyLogger myLogger = myLoggerProvider.getObject();// getObject를 호출시키게해서 request 요청을 한다. String requestURL = request.getRequestURL().toString(); myLogger.setRequestURL(requestURL); //request 시작 myLogger.log("controller test"); Thread.sleep(1000); logDemoService.logic("testId"); //request 요청 마지막 //request close //request 요청이 끝남 return "OK"; } }
-
해결됨자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
지역 내부 클래스 질문드립니다.
"메서드 호출 이후에도 사용해야 하는 경우가 있을 수 있으므로 지역 내부 클래스에서 사용하는 메서드의 지역 변수나 매개 변수는 final로 선언됨"라고 말씀하셨는데 final로 선언되면 저장되는 영역이 달라지나요? 왜 final을 사용하는지 궁금해서 여쭤봅니다
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
배열 문제와풀이 2 ArrayEx7 질문..
[질문 내용]배열 문제와풀이 2 ArrayEx7문제인데요총점구할 때 궁금해서 질문드립니다 ㅜㅜ ;총점 int total = 0; 인데 왜 for i(행) 문에서 변수를 선언하는 건지 원리를 잘 모르겠습니당..
-
해결됨김영한의 실전 자바 - 기본편
기본형 관련 메모리 질문이 있습니다.
안녕하세요. 우선!! 강사님 덕분에 자바에 대해 이해가 더 잘 되고 있습니다. 감사합니다강의를 듣다 궁금한 내용이 생겨 질문하게 되었습니다. 자바의 변수는 기본형과 참조형으로 나눌 수 있고, 기본형의 경우 변수에 값이 저장되어 출력되지만 참조형은 메모리에 저장된 위치 값이 저장되어 출력된다고 가르쳐주셨습니다. 그렇다면 기본형 int a = 10;이 있다면 메모리상에는 변수 a가 가리키는 공간에 10이라는 값이 저장되는데 a를 출력하였을 때 어떻게 바로 10이라는 값이 나오는지 궁금합니다. a를 출력하게 되면 메모리상에서 a라는 변수 값을 저장한 공간을 찾게 되고 그 공간에 있는 값인 10을 출력하게 되는데 참조형과 다르게 바로 값이 나오는 이유가 궁금합니다. 감사합니다..!
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
[은행 계좌 입출금 코드 작성] 해당 코드도 맞는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요, 다름이 아니라 [김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음] / 9. 메서드 / 은행 계좌 입출금 문제에 관련하여 질문이 있어 작성하게 되었습니다.해당 문제에 대해 입력값은 다음과 같다고 생각하고 BufferedReader로 풀었습니다.1 10000 2 8000 2 3000 3 4package method; // TODO 1. 공통 출력 부분을 start()라는 메서드로 따로 빼서 반복 호출하여 수행 // TODO 2. 입금 출금 등 요구 사항에 따라 구현이 다른 부분을 메서드로 추출 // TODO 3. 이때, 선택에 따른 숫자값과 입금액 및 출금액 등을 파라미터로 전달 // TODO 4. 잔액 확인 및 종료는 별다른 연산이 필요 없으므로 void로 설계 // TODO 5. 이때, 종료는 종료라는 책임이 해당 메서드에 배당이 되어야 하므로 메서드 내부에서 System.exit(0);을 수행 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Method { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; String str; int balance = 0; while ((str = br.readLine()) != null) { st = new StringTokenizer(str, " "); int index = Integer.parseInt(st.nextToken()); // TODO Operator '==' cannot be applied to 'boolean', 'int' // TODO == 연산자는 boolean 타입과 int 타입 사이에서 지원 / 적용될 수 없습니다. -> int가 아닌 boolean을 지원한다는 것 int money = (st.hasMoreTokens()) ? depositOrWithdraw(st) : 0; if (index == 1) { balance = deposit(index, balance, money); } else if (index == 2) { balance = withDraw(index, balance, money); } else if (index == 3) { check(index, balance); } else { exit(index); } } } private static int depositOrWithdraw(StringTokenizer st) { return Integer.parseInt(st.nextToken()); } private static void start() { System.out.println("---------------------------------"); System.out.println("1.입금 | 2.출금 | 3.잔액 확인 | 4.종료"); System.out.println("---------------------------------"); } private static int deposit(int index, int balance, int depositAmount) { start(); System.out.println("선택: " + index); balance += depositAmount; System.out.println("입금액을 입력하세요: " + balance); System.out.println(balance + "원을 입금하였습니다. 현재 잔액: " + balance + "원"); return balance; } private static int withDraw(int index, int balance, int withdramAmount) { start(); System.out.println("선택: " + index); if (balance >= withdramAmount) { balance -= withdramAmount; System.out.println("출금액을 입력하세요: " + withdramAmount); System.out.println(balance + "원을 출금하였습니다. 현재 잔액: " + balance + "원"); } else { System.out.println(withdramAmount + "원을 출금하려 했으나 잔액이 부족합니다."); } return balance; } private static void check(int index, int balance) { start(); System.out.println("선택: " + index); System.out.println("현재 잔액: " + balance + "원"); } private static void exit(int index) { start(); System.out.println("선택: " + index); System.out.println("시스템을 종료합니다."); System.exit(0); } } 그런데, 답지 코드를 보니 BufferedReader가 아닌 Scanner더군요.제가 아직 Scanner는 잘 써보지 않아서 입력값이 주어지지 않은 상황에서 Scanner로 작성된 코드를 BufferedReader로 어떻게 변환해야할지를 잘 모르겠습니다. 따라서 질문은 다음과 같습니다.입력값이 위와 같이 주어진다고 생각하고 푸는게 맞는지맞다면, 해당 BufferedReader 코드도 동일한 값을 내는게 맞는지아니라면, 어느 부분을 잘못 작성하였으며 어떻게 수정하면 되는 것인지앞으로 하드 코딩이 아니라 프로그램을 작성하는 문제에 대해서는 입력값을 어떻게 고려하여 작성하면 좋을지 궁금합니다. 감사합니다.
-
해결됨자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
큐 구현하기 질문드립니다
public String deQueue() { if(isEmpty()){ System.out.println("Queue is Empty"); return null; } String data = front.getData(); front = front.next; if( front == null ){ // 마지막 항목 rear = null; } return data; }강사님께서 올려주신 코드인데 처음에는 head가 null이니까 isEmpty가 true라서 return null이 되는데enQueue 실행하고 deQueue를 2번 실행하면 head가 null이 아니라서 isEmpty가 false가 되면서NullPointerException이 발생합니다. 어떻게 수정하면 좋을까요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
대문자 추출
안녕하세요. 만약 String input = " HelLo WorLD" 가 있다고 했을때, 대문자만 뽑을려면 어떻게 해야하나요? 이 강의 기본편 , 기초편 들으면 풀 수 있나요 ?
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
변하는 값을 추상화 시켜라
안녕하세요 강의 잘 보고 있습니다.다름이 아니라 5분 48초에 나오는 부분에서 DIP 원칙으로 설계 하셨는데..그럼 결국에 프로덕션에서는 getMils() 메서드를 사용하면 똑같이 내부적으로 의존성이 감춰지기 때문에 초반에 설명하신거하고 똑같은 상황이 되는게 아닌가요?? 감사합니다!
-
미해결김영한의 실전 자바 - 기본편
객체 지향 프로그래밍 개념에 대한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 영한님 편안한 설 연휴 보내고 계신가요? :)자바 중급, 고급편 준비하시느라 고생이 많으실 것 같고, 또 정말 감사하다는 말씀 드리고 싶습니다. 강의 준비하시면서 목이 많이 상하시진 않을지 걱정도 되네요 감기 조심하시길 바랍니다제가 질문 드리는 부분은 해당 강의에서 설명하신것 처럼 ‘객체지향 프로그래밍은 속성(데이터)과 기능(메서드)이 하나의 클래스에 포함되어 하나의 객체를 완전히 형성하는 것’으로 설명해주셨습니다. 그런데 도메인 패키지에 있는 데이터만 들어있는 클래스와 서비스 패키지에 있는 서비스 클래스에 있는 기능만 포함된 메소드가 있다면 데이터와 기능이 분리된 형태로 보이는데요, 해당 부분 또한 객체지향프로그래밍이라고 볼 수 있을까요? 개념에 대한 간극이 생겨서 궁금해져 질문 드리는점 양해 부탁드립니다(_ _) 좋은 강의 해주셔서 정말 감사합니다!
-
해결됨김영한의 실전 자바 - 기본편
인텔리제 기능 질문 드립니다.
밑줄친 value에 커서 올렸을때강사님 처럼 언더라인 활성화되서 클릭하면 선언되어 있는 파일로 이동하는것 설정 법 알 수 있을까요
-
미해결김영한의 실전 자바 - 기본편
아스키코드
혹시 Integer.parseInt , toString 이런거나 아스키코드 관련 혹은 Final 혹은 int x = 49532 ; 가 있을때 이걸 배열에 { 4, 9 , 5, 3, 2 } 로 만드는 것을 가르쳐주는 회차가 있을까요? 항상 강의 너무 잘 듣고 있습니다.
-
미해결스프링 핵심 원리 - 기본편
싱글톤과 프로토타입의 차이점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 싱글톤과 프로토타입의 차이점은 이해가 됐지만헷갈리는 부분이 있어서 질문 남깁니다. 테스트 진행할때 프로토 타입을 주입 받을 당시에 인스턴스를 계속 가지고 있어서 결국 클라이언트 빈을 호출 할때 새로운 프로토타입 인스턴스를 가지는 것이 아니라 주입받을 당시에 생성되었던 인스턴스가 유지된다는 것은 이해했습니다.다만 프로토타입으로 지정했던 빈이 싱글톤 빈이 였어도 똑같은 값이 나오지 않나요..?테스트를 진행한것이싱글톤인 빈을 주입받으면 똑같은 인스턴스를 갖기때문에 새로운 인스턴스를 받기 위해 프로토타입 빈을 받으려고 테스트 한것일까요??
-
해결됨스프링 핵심 원리 - 기본편
SpringApplication 내부에서 getBeanDefinition 호출
지금까지 수업에서는 빈검색할때 AnnotationConfigApplicationContext 를 사용해서 설정파일을 주입했습니다. 마찬가지로 @SpringBootApplication 가 붙어있는 main 안에서 빈검색해서 ac.getBeanDefinition(beanDefinitionName) 을 호출하고 싶습니다. 어떻게 해야 하나요? SpringApplication.run(CoreApplication.class, args) 은 AnnotationConfigApplicationContext 이 아니라 ConfigurableApplicationContext 타입을 리턴해서 getBeanDefinition 메서드가 존재하지 않습니다.
-
해결됨김영한의 실전 자바 - 기본편
메모리 구조(인터페이스는 정확히 어느 시점에 호출 되는지?)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 공부를 하면서 상속된 클래스랑 인터페이스가 있는 경우 어떻게 메모리상 에서 어떻게 될까?라고 생각하다가 답이 안 나와서 질문을 드립니다.poly.ex6 예제 에서 추상 클래스 및 인터페이스 클래스를 만들었습니다. 근데 메모리상에 이 그림처럼 만들어 진다고 하였는데 Bird 를 만들었을때 인터페이스Fly 가 어느때 호출이 되고 호출이 종료되는지 를 자세히 모르겟더라고요.그래서Bird ,AbstractAnimal 생성자에 soutm을 찍고 하였지만,이렇게 만 나오지. Fly는 인터페이스라 body를 못 만드니 soutm도 못 만들고 알 수 있는 방법이 없더군요. 이럴 경우 어떻게 Fly 인터페이스가 언제 호출이 되는지 알고 싶습니다. 예상으로는 Bird 호출 -> AbstractAnimal 호출 -> AbstractAnimal 종료 -> Fly 호출 -> Fly 종료 -> Bird 종료 라고 생각하기는 했습니다.(extend를 먼저 쓰니까 부모가 먼저 호출되고 implements 에서 맨 앞에 있는것부터 순차적으로 호출 종료 된다고 생각했습니다.)답변 부탁드립니다.
-
미해결스프링 핵심 원리 - 기본편
질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.안녕하세요 회원도메인개발 강의에서 9분 34초에 나오는 MemberServiceImpl 클래스내에서 memberRepository를 final로 설정했는데 그 이유가 무엇일까요? final을 붙이지 않아도 되나요?
-
미해결스프링 핵심 원리 - 기본편
Autowired members must be defined in valid Spring bean
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.@Autowired 를 명시했을 때 Autowired members must be defined in valid Spring bean (@Component|@Service|...)에러가 발생합니다. 해당 에러를 조사해보니 의존성 주입을 받는 클래스가 스프링 빈으로 등록되지 않았을 때 혹은 정의된 빈이 스프링 컨테이너에 의해 관리되지 않는 경우 에 발생한다고 하는데, Q1.명시하지않았을 때는 정상적으로 수행되는데, 명시했을 때 위문제가 발생하는 이유가 궁금합니다. Q2.@Autowired 를 명시했을 때는 다른 에노테이션들도 다 명시해야 되는건가요?
-
미해결김영한의 실전 자바 - 기본편
인스턴스 메소드는 힙 영역에 생성되나요?
안녕하세요. 강의 잘 듣고 있습니다 :)인스턴스 메소드는 힙 영역에 생성되는지 궁금하여 질문 남깁니다! 강의 노트 7. 자바 메모리 구조와 static 3페이지에 다음과 같이 되어 있는데요.'같은 클래스로부터 생성된 객체라도 인스턴스 내부의 변수 값은 서로 다를 수 있지만, 메서드는 공통된 코드를 공유한다...메서드는 메서드 영역에서 공통으로 관리되고 실행된다'=> 저는 이 부분에서 인스턴스 메서드가 메서드 영역에 생성된다고 이해하고 넘어갔습니다!그런데 강의 뒷 부분에서'정적 메서드에서는 인스턴스 메서드를 사용할 수 없다'고 말씀해 주셨습니다.그 이유가정적 메서드는 메서드 영역에 생성되고, 인스턴스 메서드는 힙 영역에 생성되기 때문인가요 ?만약 그렇다면, 강의 노트를 제가 잘못 이해한 걸까요? 답변 부탁드리겠습니다. 감사합니다!
-
미해결스프링 핵심 원리 - 기본편
No Scope registered for scope name 'request'오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의와 똑같이 했는데 No Scope registered for scope name 'request'오류가 생깁니다구글링 해보니 설정에서 빌드 기본 설정을 intellij 가 아닌 Gradlle로 해도 똑같이 나오고 @Autowired대신 직접 생성자 주입을 해봐도 같은 오류가 계속 발생합니다.