묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
오류가 발생한 이유와 해결된 이유 이게 맞나요??
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]1. @RequiredArgsConstructor 로 인해 생성자가 호출된다. - 변수(LogDemoService logDemoService, MyLogger myLogger)2. MyLogger 는 @Scope("request") 로 인해 요청이 들어오지 않은 상태라 에러가 발생한다.3. ObjectProvider<MyLogger> 를 변수로 변경을 해주어서 오류를 잡아준다. - MyLogger Bean 은 이미 컨테이너에 등록이 되어 있고 Provider 를 통해 새로운 빈을 만들어준다. 오류가 위와 같은 순서로 발생한게 맞나요??
-
미해결스프링 핵심 원리 - 기본편
ObjectProvider와 Provider에 주입되는 객체
빈 스코프 수강중에 싱글톤 스코프와 프로토타입 스코프를 동시에 사용시 발생하는 문제점으로의존성 주입시 할당된 프로토타입 빈이 계속 유지가 된다는 것이었습니다.이러한 문제점을 해결하기 위해 ApplicationContext를 필드주입을 통해 주입받거나 (가장 간단한 방법), ObjectProvider 또는 자바 표준인 Provider를 사용하는 것입니다. 질문 1.여기서 ObjectProvider<T> objectProvider; 와Provider<T> provider라는 코드에 어떠한 의존성이 주입되는 것인지 궁금합니다.실질적으로 스프링 컨테이너에서 해당하는 빈을 가져오는 부분은 getObject(), get()에서 일어나기 때문에 objectProvider와 provider에는 어떤 의존성이 주입되는지 의문이 들어 질문남깁니다.
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
교재내용
안녕하세요올려주신 사이트의 교재내용은 pdf파일로는 받아볼수없나요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
quiz_09 를 이렇게 작성해도 되나요?
안녕하세요! 좋은 강의를 통해 아주 조금씩이나마 자바를 알아가고 있습니다. Quiz_09의 조건을 잘못 이해하고 아래와 같이 구현을 하였습니다. 코드를 이렇게 작성할 경우 문제점이 발생할 수 있는지, 있다면 어떤 문제점이 있는지 알고 싶습니다.[_Quiz_09.java]package chap_09; import chap_09.student.Student; public class _Quiz_09 { public static void main(String[] args) { Student st = new Student("자바"); st.getStudent(); } }[student > Stundent.java]package chap_09.student; import java.util.HashMap; public class Student { public String license; public Student(String license) { this.license = license; } public void getStudent() { HashMap<String, String> map = new HashMap<>(); map.put("유재석","파이썬"); map.put("박명수","자바"); map.put("김종국","자바"); map.put("조세호","C"); map.put("서장훈","파이썬"); for(String key : map.keySet()) { if(map.get(key).contains(license)){ System.out.println(key); } } } }
-
미해결스프링 핵심 원리 - 기본편
NPE가 발생하는 이유를 모르겠습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]위 사진에 보면 NPE가 발생하는데, 원인을 잘 모르겠습니다.policies에 값이 할당이 안되서 그런거같은데,,, 코드는 강의 자료와 똑같습니다.아래 소스 코드 첨부합니다.package hello.core.autowired; import hello.core.AutoAppConfig; import hello.core.discount.DiscountPolicy; import hello.core.member.Grade; import hello.core.member.Member; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; public class AllBeanTest { @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Member(1L, "userA", Grade.VIP); int discountPrice = discountService.discount(member, 10000, "fixDiscountPolicy"); assertThat(discountService).isInstanceOf(DiscountService.class); assertThat(discountPrice).isEqualTo(1000); } static class DiscountService { private final Map<String, DiscountPolicy> policyMap; private final List<DiscountPolicy> policies; public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); System.out.println("discountCode = " + discountCode); System.out.println("discountPolicy = " + discountPolicy); return discountPolicy.discount(member, price); } } }
-
미해결스프링 핵심 원리 - 기본편
MyLogger 의존성 주입 질문드립니다.
컨트롤러와 서비스에 MyLogger가 주입받는 것인지 질문드립니다. 컨트롤러는 LogDemoService와 ObjectProvider를 주입받습니다.public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider<MyLogger> myLoggerProvider; // ... }서비스는 ObjectProvider를 주입받습니다.public class LogDemoService { private final ObjectProvider<MyLogger> myLoggerProvider; // ... } 결국 컨트롤러와 서비스에는 MyLogger가 주입받는 것이 아닌 것인지요? MyLogger는 DI가 아니라 DL의 역할만 해도 충분한 것일까요? 그렇다면 DI와 DL의 차이는 클라이언트에서 getObject()를 한번더 해서 찾아야 한다는 번거로움 말고는 없을까요? getObject() 이후 생성된 MyLogger는 @Autowired를 받는 것이 없는 것으로 보아 의존성 주입 없이 빈만 생성된 것으로 이해하면 될까요? 질문 읽어주셔서 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
MyLogger 싱글톤 추가 질문
이전 질문에 대한 궁금증이 생겨 추가 질문드립니다.https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55392&tab=community&category=questionDetail&q=541279 LogDemoController 단에서의 myLogger와 2. LogDemoService 단에서의 myLoger는 같은 객체인가요? 라는 질문에서스프링 컨테이너 생성 시점에 myLogger는 생성되기 전이라 의존성 주입이 안 되는 것 아닌가요? 이 때 생성되지 않은 myLogger 객체를 비교하는 테스트는 어떻게 해야 하는지 질문드립니다. 그 다음 강의에서 Provider의 getObject() 메서드를 이용하는 방법을 학습했습니다.컨트롤러에서 getObject() 메서드로 읽어온 후 println으로 toString을 찍어봤습니다.@Controller @RequiredArgsConstructor public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider<MyLogger> myLoggerProvider; @RequestMapping("log-demo") @ResponseBody // String 반환값인 문자열을 그대로 보낼 수 있음 public String logDemo(HttpServletRequest request){ // HttpServletRequest는 고객 요청 정보를 얻을 수 있음 String requestURL = request.getRequestURL().toString(); MyLogger myLogger = myLoggerProvider.getObject(); System.out.println("Controller.myLogger.toString() = " + myLogger.toString()); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); logDemoService.logic("testId"); return "OK!"; } }서비스에서 getObject() 메서드로 읽어온 후 println으로 toString을 찍어봤습니다.@Service @RequiredArgsConstructor public class LogDemoService { private final ObjectProvider<MyLogger> myLoggerProvider; public void logic(String id){ MyLogger myLogger = myLoggerProvider.getObject(); System.out.println("Service.myLogger.toString() = " + myLogger.toString()); myLogger.log("service id = " + id); } }생성된 myLogger나 컨트롤러, 서비스 모두 같은 객체라는 것을 확인했습니다.[64d203f8-a2d5-4923-ad77-fcad3bd19d21] request scope bean create : hello.core.common.MyLogger@6cc43735 Controller.myLogger.toString() = hello.core.common.MyLogger@6cc43735 [64d203f8-a2d5-4923-ad77-fcad3bd19d21][http://localhost:8080/log-demo] controller test Service.myLogger.toString() = hello.core.common.MyLogger@6cc43735 [64d203f8-a2d5-4923-ad77-fcad3bd19d21][http://localhost:8080/log-demo] service id = testId [64d203f8-a2d5-4923-ad77-fcad3bd19d21] request scope bean close : hello.core.common.MyLogger@6cc43735 그렇다면 컨트롤러와 서비스가 싱글톤 스코프라서 같은 객체를 불러오는 것이 아니라(myLogger를 주입한 것이 아니라서), ObjectProvider가 스프링 컨테이너에 등록된 myLogger 빈을 lookup하기만 해서 찾아온 것으로 이해하면 될까요??질문 읽어주셔서 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
TestBean 클래스에서 required = false 호출 가능하게 하는 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요.강의를 듣다가 TestBean 클래스의@Autowired(required = false) 도 호출이 되게 하고 싶어서 테스트하고 있습니다.그래서 위 사진 39 ~ 45 라인과 같이 생성자를 만들어 주었습니다.Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.example.core.member.Member' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}그런데 위와 같은 에러가 발생하는데 어떻게 해야 required = false 도 호출 가능하게 할 수 있을까요??
-
해결됨스프링 핵심 원리 - 기본편
인텔리제이 단축키
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]혹시 인텔리제이 한 줄 선택 하는 단축키가 뭔가요??..검색해서 나온거 해봐도 안되요ㅠ
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
힙메모리
힙메모리는 선입선출이 아닌가요?선입선출이라면 부모 클래스가 밑에 먼저 쌓여야 맞는거죠?
-
미해결스프링 핵심 원리 - 기본편
싱글톤 인스턴스
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]힙에 있는 단일 인스턴스에 만약 100명이 동시에 요청하면 그 인스턴스를 여러개 복사 해서 전달되는건가요?
-
해결됨Java/Spring 주니어 개발자를 위한 오답노트
IoC != DI에 대한 질문입니다.
안녕하세요,선생님 습하고 더운 여름 몸 건강히 계시길 바랍니다.강의를 듣는 도중 궁금한 부분이 생겼습니다.DIP와 IoC가 다르다고 말씀하신 부분이,DIP가 의존성 주입을 역전함으로써 제어의 흐름을 바꾸지만 IoC가 의존성을 주입해주는 것은 아니어서 그렇다고 이해되는데 제대로 이해한 게 맞을까요? ㅜㅜ 또, Open-Closed 법칙을 설명해주시는 1:32초 부분에 수정에는 열려있어야 한다는 말씀을 하셨는데수정 시 많은 메소드 혹은 클래스를 수정해야 하는 경우가 수정에 열려있는 것이 아닌지요 ㅜㅜ...제가 잘 모르다보니 헷갈려서 질문드립니다!
-
미해결스프링 핵심 원리 - 기본편
핵심원리 소스코드는 어디서 받을 수 있나요?
핵심원리 소스코드는 어디서 받을 수 있나요?
-
미해결스프링 핵심 원리 - 기본편
의존관계 주입에서 AppConfig라는 파일을 이름을 바꿔도 정상작동 하나요?
spring 에서 appconfig으로 구현객체 넣어줄때 appconfig파일을 다른이름을 바꿔도 상관이 없나요?? 아니면 무조건 appconfig라고 이름을 정해야하나요??
-
미해결스프링 핵심 원리 - 기본편
인터페이스 객체
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 강의 9분쯤 인터페이스로 만든 MemberRepository를 private fianl로 객체 생성했는데 제가 알기론 인터페이스는 객체로 생성이 안되는데 어떡게 된건가요??캐스팅을 하면 인터페이스를 객체로 만들 수 있는건가요??
-
미해결스프링 핵심 원리 - 기본편
@Autowired ApplicationContext DI 관련해서 질문드립니다.
[질문 내용]@Test void singletonClientUsePrototype(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class, ClientBean.class);위 코드에서 스프링 컨테이너 1개 생성했고 ClientBean과 PrototypeBean을 빈으로 등록한 것으로 이해했습니다. @Scope("singleton") static class ClientBean{ private ApplicationContext applicationContext; public ClientBean(ApplicationContext applicationContext) { this.applicationContext = applicationContext; System.out.println("applicationContext = " + applicationContext); } public int logic(){ PrototypeBean prototypeBean = applicationContext.getBean(PrototypeBean.class); }이 때 ClientBean 안에서 ApplicationContext를 선언해서 getBean하면 스프링 컨테이너가 한 개 더 생성되서 2개가 운용되는 게 아닌가하는 의문이 들었습니다. 첫번째 질문은 위에서 말했던 것과 같이 스프링 컨테이너가 2개가 생성되고 관리할 수 있는 것인지 질문 드립니다. 그러다 이전 질문 글을 봤는데요, [이전 질문] @Autowired ApplicationContext 확인좀 해주세요(https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55490&category=questionDetail&tab=community&q=735170) @Autowired가 작동하면서 new AnnotaitonConfigAplicationContxt(ClientBean, PrototypeBean.class)가 ApplicationcContext applicationContext;로 DI된다는 것에 맞다는 답변을 주셨습니다. 그러면 스프링 컨테이너가 2개 생성되는 것이 아니라 SingletonClientUsePrototype() 메서드에서 ClientBean, PrototypeBean을 파라미터로 만든 컨테이너를 ClientBean의 생성자 파라미터로 주입받아서 결국엔 스프링 컨테이너 1개만 사용한다는 것인가요? 그러면 ClientBean과 PrototypeBean 총 2개의 빈을 가지고 있는 스프링 컨테이너를 가져와 그 중 PrototypeBean만 가져와서 logic() 메서드에 사용한다는 것으로 이해하면 될까요?질문 읽어주셔서 감사합니다.
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
return과 print의 차이점을 모르겠어요.
return과 print의 차이점을 모르겠어요.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
퀴즈 관련 질문있습니다.
안녕하세요 메소드단원 퀴즈를 풀려고하는대 혼자서는 도저히 풀수가 없습니다.그래서 그동안 들었던 강의들을 보면서 오픈북 형식으로 풀고있는데혹시 제가 스스로 완전히 퀴즈를 풀수있을때까지 복습을하고 채득을 하는게 더좋을지 여쭤보고싶습니다..분명 강의는 열심히 집중해서들었는대 막상 실제로 코딩을 해보니 너무 어렵네요 ㅠㅠ..
-
해결됨자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
섹션2 다이아몬드 출력 문제 질문입니다!
int lineCount = scanner.nextInt();int spaceCount = lineCount/2+1;int starCount = 1; 다이아몬드 출력 시 처음 변수 설정 할 때int spaceCount = lineCount/2+1; 이 코드가 어떻게 나온 식인지 잘 이해가 안 가서 질문 드립니다!
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
선생님 안녕하세요 질문있습니다
저는 지금 학원에서 자바 수업을 듣고있습니다.제가 그동안 다른언어에서 해왔던대로, 또 나도코딩님의 수업에서 했던대로 하니까 강사님이 그건 절차지향적이라고 그렇게 하지 말라고 하던데...알아보니까 그때 강사님이 하신 말씀이 DTO라는 개념이나 자바빈즈 같은 개념이더라구요..이런거 관련해서는 강의하실 생각이 없으신지.. 아니면 어떤 강의를 듣는게 좋을지 조언좀 부탁드립니다..자바 시작한지 얼마 안 됐는데 뭐부터 해야할지 모르겠네요..