묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
pdf 자료 5. 싱글톤 컨테이너 12페이지에 대해 질문이 있습니다.
[질문 내용]여기에 질문 내용을 남겨주세요.확인해보면 memberRepository 인스턴스는 모두 같은 인스턴스가 공유되어 사용된다. AppConfig의 자바 코드를 보면 분명히 각각 2번 new MemoryMemberRepository 호출해서 다른 인스턴스가 생성되어야 하는데? 어떻게 된 일일까? 혹시 두 번 호출이 안되는 것일까? 실험을 통해 알아보자.라는 내용이 있는데요 이 부분에서 다른 인스턴스가 왜 생성이 되어야 하는지 이해가 가질 않습니다.AppConfig를 보면@Bean public MemoryMemberRepository memberRepository() { return new MemoryMemberRepository(); }이러한 코드가 있어서 스프링 컨테이너에 스프링 빈이 등록이 될때 memberRepository 도 등록이 되서 관리가 되므로 어디든 new MemoryMemberRepository를 호출해도 똑같은 인스턴스가 생성이 되어야 하는거 아닌가요?감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
안녕하세요 스프링 컨테이너와 스프링 빈 pdf 자료 2페이지에서 질문이 있습니다.
스프링 빈 등록 그림에서 memberService()을 예시로 들면 @Bean 어노테이션으로 인해 스프링 빈 저장소에 빈 이름으로 메소드 이름인 memberService가 저장이 되고 빈 객체는 memberService()가 리턴하는 값이 저장이 된다고 이해를 했습니다. 여기서 질문이 있는데요 저장된 빈 객체의 데이터 타입은 MemberService가 맞나요? 빈 객체가 MemberServiceImpl 이거 인데 데이터 타입은 MemberService가 맞는지 헷갈려서 질문을 했습니다. 빈 객체라는게 스프링 컨테이너에 등록된 스프링 빈이 맞나요? 감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
MemberServiceTest 실행 시 오류
아래는 MemberServiceTest의 코드입니다package hello.core.member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.util.Assert; public class MemberServiceTest { MemberService memberService = new MemberServiceImpl(); @Test void join() { //given Member member = new Member(1L, "memberA", Grade.VIP); //when memberService.join(member); Member findMember = memberService.findMember(1L); //then Assertions.assertThat(member).isEqualTo(findMember); } }
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
c++을 공부하고 Java를 공부하려고 하는데 클래스부터 진행하도 괜찮을까요??
지금 연산자 강의를 듣고있는데 c++과 중복되는 부분이 많아서 시간 낭비같이 보여서 바로 후반전인 클래스부터 강의를 들을까하는데..... 어떻게 할까요??
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Scanner, FileReader, BufferedReader 등 각각의 차이점 및 섹션 14. 퀴즈 #13의 호출 순서와 관련된 질문입니다...ㅎ
안녕하세요, 나도코딩 선생님...ㅎ 동영상 강의들 중 섹션 14. 입출력과 파일을 보다가 궁금증이 생겨서 질문을 하게 되었습니다...ㅎ(1) 섹션 14. 입출력과 파일을 공부하면서, 파일을 읽는 여러 가지 방법들을 접하고 있습니다. 공부하면서 BufferedReader, FileReader, Scanner등 여러 가지 방법들이 있는데, 이들은 어느 때 쓰이는 것이 가장 좋은가요? 예를 들면, BufferedReader는 큰 용량의 파일을 읽는데 적합하다 던가, 아니면 Scanner는 키보드 입력을 받는 것 외에도 파일을 읽고자 할 때, FileReader와 같은 역할을 한다 이런거요!만약 어느 한 텍스트 파일을 읽고자 할 때, Scanner를 예로 들면, 이렇게 코드를 적어볼 수 있을까요? 모든 건 이미 import가 있다고 가정하고 작성해봤습니다...ㅎ:... // 이전 코드 생략 try { File file = new File("testing.txt"); Scanner scanner = new Scanner(file); while(scanner.hasNext()) { System.out.println(scanner.next()); // 여기서 만약에 여러 줄들로 이루어진 텍스트에서 한 글자씩 따오려면, // 이전에 문자열 관련 질문 처럼 scanner.next().charAt을 쓰나요? } scanner.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); // 예외 처리 1 } catch (IOException e2) { e2.printStackTrace(); // 예외 처리 2 }(2) 섹션 14에 있는 퀴즈 #13과 관련된 질문입니다! 제가 try문 안의 String input; scanner의 호출 스택(순서)을/를 제대로 이해했는지 알고 싶습니다...ㅎ... // 이전 코드 생략 Scanner scanner = new Scanner(System.in); try (BufferedReader br = new BufferedReader(new FileReader("saying.txt"))) { ... // 퀴즈 시작 및 제목 출력 String quiz; String answer; String input; while (true) { quiz = br.readLine(); answer = br.readLine(); if (quiz == null || answer == null) { break; } System.out.println(" (문제) " + quiz); System.out.println(" (답 입력) "); input = scanner.next(); ... // input.equal(answer), if-else문 생략 } ... } catch (IOException e) { e.printStackTrace(); // 예외 처리 }여기 이 코드에서, quiz랑 answer는 1줄 1줄 br.readLine();을 통해 단어 및 문장들을 인식하는 반면, 입력하는 답안의 경우에는 우선 try문 안에서 String input;을 선언하고, 대입 연산자 = 를 통해 .next();로 입력을 받은 다음, string으로 선언된 input을 .equal();로 입력받은 값과 정답을 비교하여 최종 결과를 출력하는 건가요?프로그래밍 언어를 공부하다보니 여러 질문들과 궁금증이 많이 쌓이는데, (특히 최근에 들어선 더 많아졌네요...ㅎ) 그 때마다 제 궁금증을 답글을 통해 잘 해소줘서 진심으로 감사합니다..ㅎ :)
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
안녕하세요! Java를 공부하고 따로 노션에 필기하려고 하는데 문제가 될까요...?
몰론 페이지 맨 위에 강의출처 링크는 남겨놓겠습니다!! 동영상을 다시 보는 것 보다 제가 따로 코드를 따라치며 생각을 정리하는 게 효율적일 것 같아서요... 괜찮을까요??c++을 부랴부랴 배우고, JAVA를 뒤늦게 배우는데 양질의 강의를 제공해주셔서 감사합니다! :)
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
생성자 안에 메소드...?!
안녕하세요, 선생님...ㅎ 갑작스럽게 생각난 질문인데요...ㅎ 제가 예시로 아래처럼 클래스를 만들어 봤는데, 혹시 상속받은 클래스의 super(); 생성자 안에 이렇게 메소드도 넣을 수 있나요? 자바를 공부하면서 지금 여러 소스 코드들을 보고 있는데, 어느 소스코드는 super(); 생성자 안에 메소드를 집어 넣은 경우가 있더라구요?! 만약에 이렇게 만들 수 있다면, 언제 어느 때 가능할까요?클래스는 정말 제가 생각나는대로 적어서 컴파일 에러 같은 건 생각하지 않았습니다. 부디 너그럽게 봐주셨음 합니다...ㅎclass Kid extends SomethingAwesome { Kid(int age) { super(comment(age)); // super() 생성자 안에 comment메소드 삽입 } public String comment(int age) { String saySometing = ""; if (age > 3 && age < 7) { saySomething += "엄마, 과자 사줘!"; } else if (age >= 7 && age < 11) { saySomething += "엄마, 이젠 로보트 사줘!"; } return saySomething; } public static void main(String[] args) {...} // 메인 메소드 실행 }또한 일반적인 생성자 (Constructor)를 만들 때도, 생성자 안에 전달 값외에도 메소드를 넣을 수 있는가요? 이것도 마찬가지로 위에 예시로 코드를 적은 것 처럼 제 나름대로...ㅎ 써봤습니다...ㅎ 위의 예시 처럼 정말로 생성자 안에 메소드를 넣는게 가능한지 궁금해서 약간 무리수를 두면서(?) 코드를 적어봤습니다..ㅎ 이것도 너그럽게 봐주세요...ㅎ 감사합니다 : )class ThankYouNote { // 제가 생각해도 좀 많이 이상하지만, // 메소드를 이렇게 선언해서 do = thanks(); // this.do = do; 이렇게는 많이 무리수죠? ㅠㅠ // 저렇게 위 클래스 처럼 super 생성자 안에 메소드를 넣는건 처음봐요 ㅠㅠ ThankYouNote() { thanks(); // this(thanks()); // 너무 많이 무리수 인듯하지만 일단 적어봤습니다...ㅠㅜ } public void thanks() { System.out.println("나도코딩 선생님, 감사합니다. :)"); } public static void main(String[] args){ ... } // 메인 메소드 실행 }
-
미해결스프링 핵심 원리 - 기본편
컴포넌트 스캔의 대상 질문드립니다.
BeanA에 달려있는 @MyIncludeComponent의 경우 @Component 어노테이션이 붙어있지 않음에도 어떻게 컴포넌트 스캔의 대상이 되어 빈으로 등록되는 것인지 궁금합니다.혹시 includeFilters에 지정된 클래스는 @Component가 없어도 자동으로 빈으로 등록이 되는 것일까요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
자바의 메소드 (Method), return, 전달 값(Parameter)가 갑자기 헷갈립니다...ㅎ
안녕하세요, 다름이 아니라 제가 메소드 (Method), 전달 값 (Parameter), return 개념을 공부하는 도중, 갑작스레 개념이 헷갈려서 이렇게 글을 남깁니다. 나도코딩 자바편에 나온 동영상 강의와 함께, 커뮤니티에도 등록된 글을 보면서 다시 한 번 복습을 하고 있는데요...ㅎString getAddress(){ return "서울시 어딘가"; }이제 전달 값, 그러니까 Parameter가 없는 메소드인 경우, 그냥 위와 같이 return으로 문장을 출력하는 반면에, 갑작스레 parameter와 return이 함께 있는 메소드가 헷갈리더라구요...ㅎ(반환 타입) 메소드 이름 (전달값1, 전달값2, ...) { 반환 값 선언 // 예시 : int result = 0 // 메소드가 수행하는 여러 명령문들 수행 동작 1; // 괄호 안의 전달 값들을 사용 및 동작 수행 수행 동작 2; // 전달 값1, 2들을 이용하여 수행 2 수행 동작 3; // 전달 값1, 2들을 이용하여 수행 3 ... return 반환 값; // return result - 결과 값 반환 }int add (int x, int y) { int result = x + y; // 이미 int result = 0;을 내포함 return result; }제가 위의 메소드들에서 이해 한 부분은 (혹시 몰라서 다른 예시도 들고 왔습니다..ㅎ), void를 제외한 나머지 자료형 타입 (String, int 등...)들은 return을 가지고, 이 때 return을 하는 것은 반환 값이 되는데, 여기서 return 반환 값은 이미 이전에 괄호 안의 전달 값들을 이용하여, 수행 동작들을 마친 다음 반환 값을 저장하는 과정으로 이해하는 게 맞을까요? 이렇게 메소드가 수행 된 다음엔, main 메소드에서 참조변수를 통해 수행되는 과정으로 최종 결과를 출력하는 거구요...ㅎ 이렇게 이해하는게 올바르게 이해 한 것일까요?(반환 타입) variable = 메소드 이름(); System.out.println(variable);System.out.println();을 쓰는게 일반적이진 않지만, (다른 메소드를 불러서 처리하거나, 아니면 메소드 안에 이미 print문이 저장되어 있을 수도 있기 때문에) 제 스스로 이해를 돕기 위해서 일련의 과정을 위에 나온 것처럼 제 나름대로 정리해봤습니다. 또한 프로그래밍 공부를 계속하면서, 객체 지향 프로그래밍언어(OOP)의 기초 부분에서 가끔 헷갈릴 때가 있는데 (평상시에는 잘 씀에도 불구하고,) 그 때 마다 좋은 답글을 남겨주셔서 감사합니다. 덕분에 어려운 Java 프로그래밍 공부 잘 헤쳐 나가고 있습니다 :) 다시 한 번 감사합니다 :)
-
미해결스프링 핵심 원리 - 기본편
getBean()의 파라미터
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]getBean() 함수를(1번 코드)MemberService memberService = applicationContext.getBean("memberService", MemberService.class);이렇게 사용을 해주셨는데 인텔리제이에서 자동완성 기능을 사용했더니(2번 코드)MemberService memberService = applicationContext.getBean(MemberService.class);이런 식으로 나오더라구요. (1번 코드)처럼 파라미터를 두개로 사용할 때, bean 이름과 파라미터 name 값이 다르면 오류가 생겨요. 그러면 애초에 name 파라미터 값이 필요한 이유가 있는걸까요??그리고 또 궁금한 것이 (2번 코드)로 사용을 안하고 왜 (1번 코드)로 사용을 하는 것인지 궁금해요
-
해결됨스프링 핵심 원리 - 기본편
NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberService' available 오류
질문드립니다!압축 코드 링크 : https://drive.google.com/file/d/1c30gucjwJ5fwL7lJtsSv2SR2-pWLPLbR/view?usp=sharing 자꾸 스프링 컨테이너에 bean이 등록되어 있지 않다고 오류가 뜨는데 도저히 해결 방법을 모르겠습니다. ㅠㅠ
-
해결됨스프링 핵심 원리 - 기본편
NetworkClient에서 setUrl 질문합니다!
[질문 내용]안녕하세요 강의 듣다 헷갈려서 질문 드립니다..! NetworkClient() 객체가 생성되면서 생성자를 호출하고 그 뒤에 setUrl로 url를 지정해도 출력에 포함이 안되고 null이 출력된 게 의존 관계 주입이 안돼서 그렇게 나오는 건가요?? 강의노트 보면 객체 생성 후 외부에서 수정자 주입을 통해 setUrl()을 호출해야지 url이 존재한다는데 이 말이 잘 이해가 안되는데 NetworkClient 클래스에서 public void setUrl(String url) {this.url = url;} 이 코드를 통한 수정자 주입을 통해 호출해야 한다는 말씀인지 궁금합니다..!
-
해결됨스프링 핵심 원리 - 기본편
12분경 memberRepository예측 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]선생님께서 12분쯤에 memberRepository가 3번 호출될 것이라 예상하셨었는데 저는 memberService에서 왜 memberRepository가 2번 호출되는지 잘 이해가 안갑니다. memberService에서 MemberServiceImpl의 매개변수를 통해 memberRepository로 건너가기 때문에 memberRepository가 한번만 호출된 뒤 orderService가 호출되어야하는 것 아닌가요?쉽게 얘기해서 선생님은 memberServicememberRepositorymemberRepositoryorderServicememberRepository위의 순서를 예상하셨는데저는memberServicememberRepositoryorderServicememberRepositorymemberRepository이런 순서가 될 것으로 예측했습니다. 제가 착각한 부분이 있다면 알려주시길 바랍니다.감사합니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
static 메소드와 instance 메소드의 접근?
안녕하세요 ㅎㅎ 다름이 아니라 나도코딩 자바편에서 메소드를 공부하면서 궁금증이 생겨, 이렇게 또 다시 질문을 남깁니다...ㅎ 나도코딩 자바편을 보는 것과 동시에, 제 스스로 나름 예제들도 풀면서 개념을 익히고 있는데요...ㅎ 방금 전에 제가 문자열(String)배열과 charAt()을 이용하여, 전치행렬을 만드는데 성공했습니다...ㅎ 결과도 잘 출력했구요 ㅎㅎ 이 예제를 푸는 데는 String, String[], length(), charAt()에 대한 선생님의 도움과 답변이 없었으면 풀지 못했을 건데, 선생님의 자세한 답변 덕분에 문제를 빠르게 잘 풀 수 있었습니다. 감사합니다 ㅎㅎ아래가 제가 쓴 코드고, 출력한 결과입니다:여기서부터가 제 질문인데요...ㅎ static 메소드(public static void main(String[] args) {...})에서 일반 메소드를 접근하려면, 에러 메시지로 'non-static variable/method cannot be referenced fromstatic context.'라고 나오는데, 이럴 경우에 에러를 없애고, 결과를 잘 출력하려면:pubilc static void main 메소드 앞에 첫 번째 방법으로 void transpose 메소드를 static void tranpose라고 바꾸거나, 아니면 2번째 방법으로 static 메소드 안에서 이렇게 Question_03 making = new Question_03(); 즉, (클래스 이름) (객체 이름) = new (클래스 이름)(); 이런 식으로 객체화를 해서 메소드를 접근해야 하나요?
-
미해결스프링 핵심 원리 - 기본편
스프링부트와 레거시를 사용할때 View부분의 확장자가 바뀌는이유가 뭔가요?
수업의 내용과는 무관하지만 궁금한점이 있어 질문드립니다스프링 레거시의 경우에는 .jsp 파일로 view부분을 처리하고 부트의 경우에는 .jsp로 처리할수있지만 html로 처리하기를 권장하는데 그이유(속도,편의성)?가 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
setter주입
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]간단하게 질문드리겠습니다. Component scan을 사용하며 setter주입 시 @autowired 애너테이션을 붙여주면 자동 주입이 되는 걸로 알고 있습니다. 그런데 만약 Configuration으로 수동 빈 등록을 하면, 의존관계는 Configuration애너테이션이 붙은 설정 앱에서 setXX메서드로 직접 의존관계를 등록해주면 되는건가요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
getVideoFileCount 변수 선언하는 이유
안녕하세요 선생님🙇♀️클래스_메소드 강의를 보다 궁금한 점이 생겨 질문 남깁니다.BlockBox 클래스에 두 메소드를 넣었고, 04_Method클래스에 두 메소드를 활용한 문장이 있었는데요.insertMemoryCard()는 그대로 사용했지만, getVideoFileCount()는 다시 변수로 선언한 이유가 무엇인가요?감사합니다.void inserMemoryCard(int capacity) { System.out.println("메모리 카드가 삽입되었습니다."); System.out.println("용량은 " + capacity + "GB 입니다."); }void getVideoFileCount(int type) { if ( type == 1) { return 9; } else if ( type == 2) { return 1; } return 10; } b1.insertMemoryCard(256);int fileCount = b1.getVideoFileCount(1);
-
해결됨스프링 핵심 원리 - 기본편
@Configuration과 싱글톤강의를 따라하는데 값이 다르게 나옵니다.
@Configuration 어노테이션 안의 AppConfig 클래스에서 memberService와 orderService에 들어가는 memberRepository 설정이 각각 new로 MemoryMemberRepository를 생성한다 하더라도 그 MemberRepository들은 같은 싱글톤으로 있다는 강의 내용은 전부 이해했습니다.그런데 강의 내용 그대로 따라 코딩을 하였는데 결과값은 각각 다른 MemberRepository를 갖게 되더라구요... 그래서 제가 잘못한 것이 있는지 알 수 있을까 해서 질문드립니다.AppConfig@Configuration public class AppConfig { @Bean public static MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public static DiscountPolicy discountPolicy() { // return new FixDiscountPolicy(); return new RateDiscountPolicy(); } @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } }MemberServiceImplpublic class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Override public void join(Member member) { memberRepository.save(member); } @Override public Member findMember(Long memberId) { return memberRepository.findById(memberId); } // 스프링의 @Configuration 싱글톤 테스트를 위한 Getter public MemberRepository getMemberRepository() { return memberRepository; } }OrderServiceImplpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } // 스프링의 @Configuration 싱글톤 테스트를 위한 Getter public MemberRepository getMemberRepository() { return memberRepository; } }ConfigurationSingletonTestpublic class ConfigurationSingletonTest { @Test void configurationTest() { ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class); OrderServiceImpl orderService = ac.getBean("orderService", OrderServiceImpl.class); MemberRepository memberRepository = ac.getBean("memberRepository", MemberRepository.class); System.out.println("memberService -> memberRepository = " + memberService.getMemberRepository()); System.out.println("orderService -> memberRepository = " + orderService.getMemberRepository()); System.out.println("memberRepository = " + memberRepository); assertThat(memberService.getMemberRepository()).isSameAs(memberRepository); assertThat(orderService.getMemberRepository()).isSameAs(memberRepository); } }결과제가 강의 내용을 이해한대로라면 저렇게 3개가 같은 MemoryMemberRepository를 가져야 할것같은데 제가 뭔가 잘못 작성한것이 있을까요...?
-
해결됨스프링 핵심 원리 - 기본편
xml 방식의 설정은 어떻게 싱글톤을 보장하나요?
[질문 내용]xml 방식의 설정으로 MemberRepository 객체를 출력해보면 MemberServiceImpl 과 OrderServiceImpl, MemberRepository 모두 같은 인스턴스를 공유하고 있는데 xml 의 BeanDefinition을 확인하려고 해도 GenericXmlApplicationContext 구현체는 getBeanDefinition() 함수를 제공하지도 않네요... 궁금합니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
학습 커리큘럼
자바를 학습 하고 있는 학생입니다. 혹시 섹션 9,10,11건너 뛰고 섹션 12 공부해도 될까요?학교 커리큘럼 따라가면서 배우고 싶은데 학교에서는 9,10,11에 해당하는 내용을 배우는 것 같지 않아서요..