묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
퀴즈 11 질문입니다 관련
Throw 로 생성을 해주니 클래스 부분에 스태틱을 포함하든가 메인 영역에 스태틱을 지우라고 오류가 뜹니다.선생님 코드에는 이상이 없는 것 같은데 궁금합니다!이렇게 클래스에 스태틱을 추가하면 오류가 사라집니다.
-
해결됨스프링 핵심 원리 - 기본편
@Configutation 질문
ApplicationContext로 class를 등록하고 등록된 빈들을 조회해보니 싱글톤이 보장되는 것을 확인했습니다.근데 @Configuration을 사용하지 않고 @Bean만 사용하면 주입받는 객체들이 싱글톤을 유지하지 않게되는데@Configuration이 주입관계있는 빈들까지 싱글톤을 보장해주는 것 맞나요..?
-
미해결스프링 핵심 원리 - 기본편
생성자 주입으로 변경했을 때 Provider 생성할때 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.단위 테스트로 할 때 필드 주입이 좋지 않다고 하셔서 생성자 주입으로 변경 후 돌려봤을 때 Provider를 적용하기 전에 ObjectProvider<PrototypeBean> 으로 했을 때는 테스트가 성공했지만 Provider로 할때는 다음과 같은 에러가 나서 왜 발생했는지 질문드립니다org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'singletonWithPrototype.ClientBean': Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'javax.inject.Provider<hello.core.scope.SingletonWithPrototype$PrototypeBean>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}아래는 전체 코드 입니다.package hello.core.scope; import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Scope; import javax.inject.Provider; import static org.assertj.core.api.Assertions.assertThat; public class SingletonWithPrototype { @Test void prototypeFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class); PrototypeBean prototypeBean1 = ac.getBean(PrototypeBean.class); prototypeBean1.addCount(); assertThat(prototypeBean1.getCount()).isEqualTo(1); PrototypeBean prototypeBean2 = ac.getBean(PrototypeBean.class); prototypeBean2.addCount(); assertThat(prototypeBean2.getCount()).isEqualTo(1); } @Test void singletonClientUsePrototype() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class); ClientBean clientBean1 = ac.getBean(ClientBean.class); int count1 = clientBean1.logic(); assertThat(count1).isEqualTo(1); ClientBean clientBean2 = ac.getBean(ClientBean.class); int count2 = clientBean2.logic(); assertThat(count2).isEqualTo(1); } @Scope("singleton") static class ClientBean { private final PrototypeBean prototypeBean; //생성시점에 주입되어서 계속 같은 거 사용. private final Provider<PrototypeBean> prototypeBeanProvider; @Autowired //생성자 하나니까 @Autowired 생략해도 되긴 함 public ClientBean(PrototypeBean prototypeBean, Provider<PrototypeBean> prototypeBeanProvider) { this.prototypeBean = prototypeBean; this.prototypeBeanProvider = prototypeBeanProvider; } public int logic() { PrototypeBean prototypeBean = prototypeBeanProvider.get(); prototypeBean.addCount(); return prototypeBean.getCount(); } } @Scope("prototype") static class PrototypeBean { private int count = 0; public void addCount() { count++; } public int getCount() { return count; } @PostConstruct public void init() { System.out.println("PrototypeBean.init " + this); } @PreDestroy public void destroy() { System.out.println("PrototypeBean.destroy"); } } }
-
미해결스프링 핵심 원리 - 기본편
수정자 주입
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]'생성자 주입을 선택하라!' 강의 5분쯤에 나온 NullPointerException이 왜 발생한 건지 궁금합니다.@Component public class OrderServiceImpl implements OrderService { private MemberRepository memberRepository; private DiscountPolicy discountPolicy; @Autowired public void setMemberRepository(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Autowired public void setDiscountPolicy(DiscountPolicy discountPolicy) { this.discountPolicy = discountPolicy; } }class OrderServiceImplTest { @Test void createOrder() { OrderServiceImpl orderService = new OrderServiceImpl(); orderService.createOrder(1L, "itemA", 10000); } }@Autowired를 해주었기 때문에 자동으로 의존관계 주입이 되는 거 아닌가요?추가) AnnotationConfigApplicationContext로 스프링 빈을 등록하지 않아서 그런 건가요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
Escape Sequence에서 Tap 결과값에 대해 질문드려요
강의 영상에서는 \t 한번으로 숫자가 정렬된 것을 볼 수 있었습니다. 하지만 제가 작성하였을때는 정렬이 되지 않습니다.물론 \t을 2번 진행하게 되면 정상적으로 정렬이 되는 것을 볼 수 있습니다.강사님 처럼 \t 한번으로 정렬하기 위해서는 어떻게 해야하나요?
-
미해결스프링 핵심 원리 - 기본편
영상에서 싱글톤 패턴의 DIP 위반한다고 설명 하신것에 대해서 제가 이해했는지 궁금합니다.
[질문 내용]안녕하세요. 좋은 수업 잘 듣고 있습니다. 현재 설명하시는 singleton 코드에서 DIP문제가 발생 할 수 있다고 설명해주셨는데싱글톤 패턴의 DIP 위반이라고 설명하신 이유가싱글톤패턴을 사용하면 getInstance()를 public으로 선언하고 사용한다. (인스턴스를 직접참조하도록) 이러한 방식으로 인해서 클라이언트에서 getInstance()을 사용하면 된다. 그러면 클라이언트가 구체 클래스에 의존하게 되므로 DIP를 위반한다.이런식으로 생각을해도 괜찮을까요?? 다른 질문들을 보면서 싱글톤패턴이 꼭 DIP를 유발하지 않는 다는 것은 이해했습니다.항상 질문에 꼼꼼히 대답해주셔서 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
lombok 또는 직접 생성한 생성자가 2개 이상일 경우 Autowired
Lombok의 @RequiredArgsConstructor 등을 사용해서 생성자를 하나만 만들었을 경우에는 생성자가 하나이므로 @Autowired를 생략해도 @Autowired가 적용된다고 이해하였습니다.그런데 Lombok이나 직접 생성자를 추가로 생성해서 생성자가 2개 이상일 경우 Lombok으로 만든 생성자에는 @Autowired 어노테이션을 어떻게 달아주어야하나요?감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
스프링, 스프링부트
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]https://www.inflearn.com/questions/781242/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8 정확하게 궁금증이 풀리지 않아 다시 질문드립니다. 다시 한번 질문드리자면,제가 배우고 있는게 정확히 스프링인지 스프링 프레임워크인지 감이 안와요.말씀에 따르면, 본 강의 내에서 설정한 환경은 스프링 부트환경인거고, 이 안에서 제가 현재 학습하고 있는 모든 내용은 스프링 내용이 맞는거죠?또한 인텔리제이에서 단순히 ctrl shift f10을 이용해서 코드를 실행하는 것은 단순히 스프링을 사용하고 있는 것이고, 인텔리제이에서 CoreApplication 을 실행하는 것은 스프링 부트를 사용하는 것인가요?그렇다면 여기서 스프링 부트를 실행한 것은 스프링 부트로 스프링 프레임워크를 실행한 것으로 이해해도 무방할까요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
Integer.parseInt,와 Integer.valueof 의 차이가 궁금합니다.
int i = Integer.parseInt("93"); System.out.println(i); int i = Integer.valueOf("93"); System.out.println(i); 두 개다 93으로 출력이 되는데 둘 다 맞는 문법인가요? 문자를 정수로 바꿔준다는 기능은 똑같은거 같은데.. 차이가 뭔지 잘 모르겠습니다..
-
해결됨스프링 핵심 원리 - 기본편
@Autowired 질문입니다.
@Autowired는 자동 의존관계 주입하고 빈을 등록하는 건 아니다 라고 이해하면 될까요??(ComponentScan에 의해 컨테이너에 등록된 빈을 타입으로 조회하여 의존관계를 자동으로 주입한다)아래코드를@Component public class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } 저는 @ComponentScan 이 @Component 가 붙은 MemberServiceImpl 클래스와 MemorymemberRepository를 스프링 빈으로 등록하고 그 다음으로 생성자에 @Autowired가 MemberServiceImpl 과 의존관계를 가지는 memberRepository을 타입으로 검색해서 나온 MemorymemberRepository를 자동으로 의존 관계로 주입한다.라고 이해를 했는데 이게 맞는지 궁금합니다.답변해주시면 정말 감사하겠습니다.
-
미해결스프링 핵심 원리 - 기본편
추상화비용이 발생한다는 것이 궁금합니다 영환님!
영환님 인터페이스를 활용할 때 추상화 비용이라는 것이 발생한다고 하셨는데 구글링 검색해도 정확한 지식을 얻기 힘들어서 질문 드립니다.수업 내용의 기능을 확장할 가능성이 없다면, 필요할 때 리팩터링해서 인터페이스를 도입하는 방법 등 수업 내용은 이해했으나 추상화라는 비용이 정확히 무엇인지 궁금합니다!
-
미해결스프링 핵심 원리 - 기본편
NoUniqueBeanDefinitionException 에러
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: rateDiscountPolicy,getDiscountPolicy이 에러가 나서 원인을 찾아보니 AppConfig의 @Bean public DiscountPolicy getDiscountPolicy() { //return new FixDiscountPolicy(); return new RateDiscountPolicy(); }이 부분과@Component public class RateDiscountPolicy implements DiscountPolicy {}이 부분때문에 RateDiscountPolicy 빈이 2개로 등록되어서 그런 것 같아 AppConfig에서 @Bean어노테이션을 주석처리하니 정상적으로 테스트가 됐는데요. 궁금한 점은 AutoAppConfig 에서 AppConfig에 대한 부분은 제외를 시켰는데 왜 중복이 되는가입니다....@Configuration @ComponentScan( basePackages = "hello.core.member", excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) // 기존 AppConfig.java 때문에 컴포넌트 스캔 대상에서 제외시킴 public class AutoAppConfig {}
-
미해결스프링 핵심 원리 - 기본편
Repository는 싱글톤 상태인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]AppConfig 리팩토링 강의에서 질문드립니다!DIP를 지켜주기 위해 AppConfig의 MemberRepository()를 inject하는 과정에서,memberRepository() 메소드가 MemoryMemberRepository() 객체를 생성해서 넘겨주게 되는데,이 경우에, OrderService로 넘어가는 memberRepository와 MemberService로 넘어가는 memberRepository 객체가 동일한 객체인가요??public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } private static MemoryMemberRepository memberRepository() { return new MemoryMemberRepository(); } public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } 제가 생각한 바로는, MemberService, OrderService 각각에 들어가는 객체가 new로 들어가, 다른 repository를 참조하는 것 같아서요! 예시를 위해 이렇게 구현하신 건지.. 아니면 실제 repository가 싱글톤으로 돌아가는지 궁금합니다..!!싱글톤으로 돌아간다 하더라도, 어떻게 각각에 new를 해줬는데 싱글톤일 수 있는지도 궁금하네요..!! 감사합니다.
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
맥에서 intelij 사용 단축키에 대해 알고싶습니다
안녕하세요, 주제와는 좀 다른 질문인데요.강의하시는거 보면 맥에서 intelij 를 상당히 잘 활용하신다고 느꼈습니다. 특히, 9강에서 ide 화면을 4분할로 빠르게 구성하는게 인상적이었는데, 혹시 그 방법과 단축키 알려주실수 있나요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
퀴즈 #10 질문이요~~
강의 잘 듣고 있습니다! 이것저것 해보다가 궁금한게 생겼어요. 19번째 줄이 실행되는 순간 customerList의 fee 값이 바뀌어야 하는거 아닌가요? 20번째 줄을 안쓸때는 아래처럼 fee값이 안바뀐채로 출력되는데 챈 50 0 레 45 0 모 40 0 벤 20 0 제 10 020번째 줄을 쓰니까 이렇게 나오는 이유가 궁금합니다!챈 50 2000 레 45 2000 모 40 2000 벤 20 0 제 10 0
-
해결됨스프링 핵심 원리 - 기본편
1:18에서 되는 기능 저도 얼티메이트인데 왜 안 될까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]1분 18초 부분을 봐주세요안녕하세요. 저도 학생용 라이센스로 얼티메이트(엔터프라이즈) 버전으로 인텔리제이 사용하고 있습니다. 그런데 " "부분에서는 절대 자동완성이 안 나오더라구요.그래서 혹시 영한님이 착각하시고 플러그인을 얼티메이트 버전이라고 하신 건지 여쭤보고 싶습니다.혹시 플러그인이라면 그 플러그인이 어떤 것인지 알려주시면 정말 감사드리겠습니다 💪🏻
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
return의 의미에 대하여
안녕하세요 공부하다가 이해안되는 부분이 있어서 이렇게 질문합니다.44번 문장에서는 return을 사용하는데47번 문장에서는 왜 return을 사용하지 않나요?그리고 this. 이 부분은 어떻게 사용하고 왜 사용하나요? 그냥 this 빼고 사용하면 안되나요?
-
해결됨스프링 핵심 원리 - 기본편
프록시 객체는 싱글톤인가요?
다른 분들의 질문을 읽어보던중에, 같은 질문에 다른 답변이 달려있는게 있어서 여쭤봅니다."프록시 객체는 각 HTTP 요청마다 생성되는가?" 라는 질문에https://www.inflearn.com/questions/618437 는'각 요청마다 생성된다' 라고 답해져있고https://www.inflearn.com/questions/348888 는'프록시 객체는 한번만 생성된다'(맨밑에 있습니다) 라고 답해져있는데, 뭐가 맞는건가요?그리고, 강의 교안 <9.빈 스코프>의 마지막 페이지(32페이지)에 보면 '마치 싱글톤을 사용하는 것 같지만 다르게 동작하기 때문에 결국에 주의해서 사용해야한다.' 라는 말이 있는데요. 이 말에 대해서 좀 더 설명을 해주셨으면 좋겠습니다. 만약 프록시 객체가 한번만 생성된다면, 그게 싱글톤으로 등록된 것이나 마찬가지인데, 왜 "싱글톤을 사용하는 것 같지만 다르게 동작"하는지 잘 모르겠습니다.
-
미해결스프링 핵심 원리 - 기본편
@Configuration과 @ComponentScan의 충돌
안녕하세요. @ComponentScan을 공부하다가 궁금한게 생겨서 질문드립니다.@ComponentScan에 의해서 @Configuration 이 붙은 클래스를 스캔했을 때, 이 때 만들어진 스프링 빈도 팩토리 빈의 역할을 하게 되나요?예를 들어,AppConfig 라는 클래스에 @Configuration을 붙이고 내부에 @Bean을 이용해 등록할 빈들을 만들어놓는다.AutoAppConfig 라는 클래스에 @ComponentScan을 붙이고 스프링 컨테이너(ApplicationContext)에 AutoAppConfig.class 로 설정정보를 넘겨준다.위와 같이 했을 때, AutoConfig가 스프링 빈으로 등록되고 @ComponentScan에 의해 스캔이 시작되어, AutoAppConfig가 위치한 패키지부터 하위 패키지까지 스캔되어 스프링 빈이 등록 될 것입니다. (AppConfig는 패키지 내부에 속해있어 스캔된다고 가정하겠습니다.)그럼 이 경우에 exclude 필터로 @Configuration에 해당하는 클래스를 제외하지 않는다면, AppConfig도 스프링 빈으로 등록될텐데,스프링 컨테이너(ApplicationContext)에 직접적으로 AppConfig.class와 같은 설정 정보를 전달하지 않았는데, 이때도 AppConfig가 팩토리 빈이 되어, 위의 1번에서 @Bean으로 만들어놓은 빈들을 스프링 컨테이너가 등록하게 되는지 궁금합니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
맥 인텔리제이가 실행이 되지않습니다
이화면에서 계속 멈춥니다,,지우고 깔고 계속 기다려보는데도 여기서멈춰요...