묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
생성자 주입을 잘 이해하지 못했어요.
강의 수강 중 궁금한 부분이 있어 질문 남깁니다.빈이 두개 일때를 가정한다면필드 주입의 경우 @primary 기준으로 우선순위를 정해 사용하겠지만생성자 주입을 사용하게 될 경우 외부에서 객체를 주입하게 되어 @primary가 의미 없게 되지 않나요??OrderServiceImpl orderService = new OrderServiceIm 또한 생성자 주입을 사용할 시 인스턴스를 생성할 때마다 객체를 주입해야하게 되는데, 그렇다면 주입할 객체를 변경하게 될때 모든 코드를 수정해야하는 단점이 있는거 아닌가요?? 어느 부분을 놓친건지 모르겠네요 ㅠㅠ
-
해결됨스프링 핵심 원리 - 기본편
MemberServiceTest에서 Assertions부분이 궁금합니다.
assertThat과 isEqualTo로 각각 member, findMember 객체를 비교해 주셨는데테스트를 진행하면 객체 안의 id, name, grade가 각각 대조되어 비교된다 라고 이해해도 될까요?
-
미해결스프링 핵심 원리 - 기본편
@autowired 사용 시 @configruation 필요 여부
안녕하세요 강의 듣던 중 궁금함이 생겨 문의드립니다. @Configuration은 CGLIB을 이용하여 스프링컨테이너의 싱글톤을 보장해준다로 이해하였습니다.그런데 "@Autowired은 타입이 같은 bean을 찾아 자동주입해준다"를 듣고보니 Autowired가 있을 경우에도 싱글톤이 보장될 거 같아 테스트를 해보니 실제로 싱글톤을 보장해주고 있었습니다. 그렇다면 @Componentscan과 @autowired를 조합할 경우 configuration은 불필요한 애노테이션인가요?아래 코드에서 Service와 Member에 주입된 Repo 인스턴스가 동일한 인스턴스였습니다.package mytest; public class MyTestClass{ @ComponentScan static class MyAutoConfig{ } @Component static class Repo{ public Repo(){ System.out.println("Created!"); } } @Component static class Service{ private final Repo repo; @Autowired public Service(Repo repo){ this.repo = repo; } public Repo getRepo(){ return this.repo; } } @Component static class Member{ private final Repo repo; @Autowired public Member(Repo repo){ this.repo = repo; } public Repo getRepo(){ return this.repo; } }
-
해결됨스프링 핵심 원리 - 기본편
dip 의존관계 역전 원칙을 보고 질문드립니다.
memberservice가 memberRepository 인터페이를 바라보게 한다는것은 결국 범용성을 좋게해서 다른 객체로 갈아끼우기 쉽게 하기위함인건가요?
-
해결됨스프링 핵심 원리 - 기본편
OrderServiceTest 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요.OrderServiceTest 실행 시 NullPointException이 발생합니다.(OrderServiceTest)orderService.createOrder() 부분에서 발생하는데, 더 파고들면, discount() 메서드에서 발생합니다.(OrderServiceImpl)강의와 똑같이 코드를 작성하였는데, 오류가 계속 뜨네요. 제가 생각한 오류의 이유는 test 클래스 작성 시 MemberServiceImpl에서 생성하는 MemoryMemberRepository 객체와 OrderServiceImpl에서 생성하는 MemoryMemberRepository 객체가 일치하지 않기 때문에, 서로 다른 객체에서 memberId를 저장하고 조회하기 때문에 오류가 발생하는 것으로 보입니다.해서 객체 주소를 찍어보는 코드를 넣어보았는데요,(OrderServiceImpl)(MemberServiceImpl)이렇게 해서 test를 실행하면 다음과 같이 나옵니다.위 두 줄 마지막에 MemberServiceImpl에서 생성한 MemberRepository 객체와 OrderServiceImpl에서 생성한 MemberRepository 객체가 상이합니다. 이와 관련하여 코드를 변경해야 한다면, 어떻게 변경하여 적용하는 것이 좋을지 조언 부탁드립니다.혹시 제가 놓친 부분이 있으면 말씀 부탁드립니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
@PreDestory 가 없어도 실행되는 이유 및 사용하는 경우
@PostConstruct의 경우 주석처리 하면 init 메서드가 실행되지 않더라구요. 근데 @PreDestory의 경우 주석처리를 해도 close 메서드가 실행되던데 @Bean 애노테이션을 이용하여 NetworkClient를 등록 할 때 destoryMethod가 생략됐고, 추론형이 발동해서? 실행되는 거 맞나요? 그렇다면 반대로 @PostConstruct의 경우에는 추론형이 없을까요? 없다면 이유는 무엇인가요? 이 @Postconstruct와 @PreDestory는 언제 사용하나요? Bean의 생명 주기를 알아야 할 필요가 있을까요?
-
미해결스프링 핵심 원리 - 기본편
인테리 j에서도 오픈콜하이라키 기능이 있나요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]반복적으로 복습을 하고있는상황인데요 특정 메서드 호출하여 사용하는 클래스 위치 알아내는 방법이 있을까요?
-
해결됨스프링 핵심 원리 - 기본편
Assertion에러가 납니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]java.lang.AssertionError: Expecting actual:hello.core.member.MemoryMemberRepository@2796aeaeand:hello.core.member.MemoryMemberRepository@1fa1cab1to refer to the same object 도와주세요~~assertThat(orderService.getMemberRepository()).isSameAs(memberRepository);
-
미해결스프링 핵심 원리 - 기본편
널 포인트 익셉션이 터지는 이유가 뭔가요 ?
강의 21분쯤에 스프링에서 돌리는게 아니라 순수하게 돌리기 때문에 널포인트 익셉션이 터진다고 말씀하시는데 스프링 컨테이너인 ApplicationContext.getBean()을 통해 인스턴스를 가져오는게 아니라 new OrderServiceImpl() 를 했기 때문에 @Autowired가 동작하지 않게 된 것 맞나요 ? 24분쯤 설명을 보시면 스프링 테스트코드를 이용할 수 있다고 하시면서 CoreApplicationTest를 보여주시는데 CoreApplicationTest 클래스를 제외한 test코드를 작성하는 클래스 에서는 스프링 컨테이너가 작동하지 않는 것인가요? 일반 메서드 주입이랑 생성자 주입이랑 차이점이 무엇인가요? 메서드명을 init으로 하느냐, 클래스 이름으로 하느냐의 차이인가요? 메서드 주입의 이점이 있나요?
-
해결됨스프링 핵심 원리 - 기본편
테스트코드에 대한 이해
안녕하세요 영한님! 강의 너무 잘 수강하고있습니다.다름이 아니라 제가 테스트코드를 작성하는 부분들에서 JUnit에 대한 학습이 전무한 상황에서 테스트 코드를 작성하는 부분의 강의를 들어도 괜찮은걸까요?ㅠㅠ그냥 영한님의 코딩을 베껴서 치는 코딩원숭이가 된 기분입니다 ㅠㅠㅠ.....모든것을 다 한번에 학습을 할 수는 없다는것을 알지만... 이런 상태로 로드맵을 계속 쫓아가도 될지 여쭤봅니다..!
-
미해결스프링 핵심 원리 - 기본편
질문드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. BeanA beanA= ac.getBean("beanA", BeanA.class)에서 "beanA"는 메서드 이름 자리 아닌가요??클래스만 지정하고 beanA라는 메서드를 지정한적이없는데 이게 어떻게된것인지요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
String, int 가 터미널에는 똑같은 모양으로 출력되는데, int 타입은 색상을 변경해서 출력하는게 가능한가요?
String, int 가 터미널에는 똑같은 모양으로 출력되는데, int 타입은 색상을 변경해서 출력하는게 가능한가요?터미널만 봐서는 무슨 타입인지 알 수 없습니다.
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
강의가 중복된 것 같습니다
객체지향 핵심파트의인터페이스와 인터페이스는 왜 쓰는가? 강의의 10분 15초부터 끝까지의 내용이인터페이스를 활용한 다형성 구현 강의와 내용이 중복된 것 같습니다!
-
미해결Java TPC (생각하고, 표현하고, 코딩하고)
인강 강의내용
안녕하세요 이번에 강의를 듣고있는 학생입니다.혹시 제 개인블로그에 강의내용을 따로 정리해서 사용해도될까요?혼자 개인적으로 정리하고 자주 볼수있게 관리하고싶어서 문의드립니다!
-
해결됨스프링 핵심 원리 - 기본편
안녕하세요 싱글톤 컨테이너에 대해 질문이 있습니다.
스프링 컨테이너가 객체 인스턴스를 싱글톤으로 관리한다. 라고 이해를 했습니다. 그렇다면 사용자가 10명이 존재하고 이 사용자 10명 전부가 memberService 이름을 가지는 빈 객체를 호출 한다고 했을때 첫번째 사용자가 호출해서 memberService 객체를 사용하고 있을때 나머지 사용자 9명은 첫번째 사용자의 memberService 객체 사용이 끝날때까지 대기하고 있어야 하나요?만약 1번 처럼 대기하고 있는게 맞다면 사용자가 100만명과 같이 대규모 사용자일때도 스프링 컨테이너가 객체 인스턴스를 싱글톤으로 잘 관리를 할 수가 있나요? 성능적인 부분에서 부하가 오지는 않을까요?
-
해결됨스프링 핵심 원리 - 기본편
@BeforeEach 에러
MemberServiceTest를 실행하면 memberService에서 NullPointException이 뜹니다. 찍어보니까 beforeEach()메서드보다 Join() 메서드가 먼저 실행되는거 같은데 뭐가 문제일까요?.. 추가적으로 OrderServiceTest는 beforeEach가 먼저 들어와서 오류 없이 실행됩니다..!
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
다차원 배열 순회부분
안녕하세요!! 좋은 강의 듣게 해주셔서 감사합니다 !!복습 중 이해가 안되는 부분이 있어 질문합니다!!//세로크기 10 가로크기 15에 해당하는 영화관 좌석 //세로크기 10 가로크기 15에 해당하는 영화관 좌석 String[][] seats3 = new String[10][15]; // 선언만 할 때에는 크기를 명시 String[] eng = {"A","B","C","D","E","F","G","H","I","J"}; for (int i = 0; i < seats3.length ; i++) { // 세로 for (int j = 0; j < seats3[i].length; j++) { seats3[i][j] = eng[i]+(j+1); System.out.print(seats3[i][j] + " "); } System.out.println(); } // 표 구매 seats3 [7][8] = "__"; // H9 seats3 [7][9] = "___"; // H10 // 영화관 좌석 확인 for (int i = 0; i < seats3.length ; i++) { // 세로 for (int j = 0; j < seats3[i].length; j++) { // 가로 System.out.print(seats3[i][j] + " "); // A1,A2,A3... } System.out.println(); }//영화관 좌석 확인 부분에서 String[][] seats3 = new String[10][15]; String[] eng = {"A","B","C","D","E","F","G","H","I","J"}; for (int i = 0; i < seats3.length ; i++) { // 세로 for (int j = 0; j < seats3[i].length; j++) { seats3[i][j] = eng[i]+(j+1); System.out.println(seats3[i][j] + " "); } }위 코드 fori 구문을 두번 반복한 뒤 System.out.print(seats3[i][j] + " "); 을 사용해나타내었는데, 이러지 않고 밑에 코드 블럭 처럼<바로 sout을 통해 좌석번호를 나타낸다면 틀린 코드인지 궁금합니다. ...>제가 해보았을 때 같은결과가 나와서...String[][] seats3 = new String[10][15]; // 선언만 할 때에는 크기를 명시 String[] eng = {"A","B","C","D","E","F","G","H","I","J"}; for (int i = 0; i < seats3.length ; i++) { // 세로 for (int j = 0; j < seats3[i].length; j++) { seats3[i][j] = eng[i]+(j+1); System.out.print(seats3[i][j] + " "); } System.out.println(); } 요러케요!!
-
해결됨스프링 핵심 원리 - 기본편
pdf 자료 3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 4페이지에 질문이 있습니다.
지금 코드는 기능을 확장해서 변경하면, 클라이언트 코드에 영향을 준다! 따라서 OCP를 위반한다.클라이언트 코드에서 클라이언트가 클라이언트 - 서버 할때 그 클라이언트 인가요? 클라이언트 코드라는게 무슨 의미인건가요? 감사합니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
다차원 배열순회 (후반전) ,seats[i][j] = eng[i]+(j+1);
//세로 크기 10 x 가로 크기 15에 해당하는 영화관 좌석 정보String[][] seats3 = new String[10][15]; //선언만 할때에는 크기를 명시해주자String[] eng = {"A","B","C","D","E","F","G","H","I","J"};for(int i=0;i<seats3.length;i++) {for(int j=0;j<seats3[i].length;j++) {seats[i][j] = eng[i]+(j+1); 선생님 eng[i][j+1] 이 아닌지 궁금합니다. ㅠㅠ System.out.println(seats);}}
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
안녕하세요. 배열 강의 부분에서 공부를 하면서 "값 변경"에 대해 드릴 말씀이 있습니다.
얕은 지식을 가진 제가 감히 강사님께 수정을 요청드려도 될 지 모르겠지만, coffees[2] = "에스프레소"; // 값 변경 에서 많은 학습하는 사람들이 주석에 쓰인 "값 변경"을 C나 C++에서 쓰인 value로 해석할 여지가 있으실 것 같아서 이것을 "참조값 변경"으로 수정해주시면 감사드리겠습니다. 왜냐하면 Java는 미리 public class로 선언한 부분에서 String class를 coffees로 객체명을 지어서 객체를 생성할 수 있고, 우측의 {"아메리카노", "카페모카", "라떼", "카푸치노"}; 인 참조 객체를 객체 변수에 할당하는 것이기 때문입니다.저는 강사님의 넓고 깊은 지식을 강의를 들을 때마다 매번 감탄하면서 배우는 입장인데, 제가 주제넘었다면, 이 글은 바로 삭제하겠습니다. 항상 퀄리티 높은 강의를 제공해주셔서 감사합니다 😄