묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
[질문] Scope시 Autowired 이슈
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]Scope 하여 Autowired를 하면 빨간 하이라이트로 뜨면서 에러 메시지가 표시 됩니다.테스트는 잘되는데 왜 메시지가 표시되는지 모르겠습니다...
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
인텔리제이 설치
맥에서 인텔리제이 설치한게 커뮤니티 버전인가요?
-
해결됨코틀린 고급편
4강 타입소거 관련 질문
자바의 경우 실제 런타임에서 제네릭은 타입 소거되니까, 클래스에 variance를 주더라도 실제 런타임에서는 런타임에는 그냥 Cage가 되는거 아닌가요?그러면 animal 케이지에 다른걸 넣어도 런타임에서는 문제가 없지않을까.. 싶어서요
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
Custom Getter 에 대해 질문이 있습니다.
안녕하세요 태현님! 이 강의 덕분에 코틀린을 재미있게 학습하고 있습니다. Custom Getter 에 대해 질문이 있어서 질문드립니다. name 을 대문자로 만드는 것을 예시로 Custom Getter 를 사용하는 것과, 프로퍼티로써 사용하는 것에 대해 설명해주셨는데요, 제가 잘 이해하지 못했는지.. 두 방법에 대해 차이가 있는것 같습니다. Custom Getter 를 사용할 경우fun main() { val personTest = PersonTest("abc", 10) println(personTest.name) } class PersonTest ( name: String, var age: Int ) { init { if (age <= 0) { throw IllegalArgumentException("나이는 ${age}일 수 없습니다." ) } println("초기화 블록") } val name = name get() = field.uppercase() }위의 경우 ABC가 출력이 됩니다.생성자를 통해 name 값이 "abc"로 객체가 생성되었으나, custom getter 를 통해 uppercase 되어서 ABC 로 출력되는 것을 볼 수 있습니다. 프로퍼티를 사용하는 경우fun main() { val personTest = PersonTest("abc", 10) println(personTest.name) println(personTest.uppercaseName) } class PersonTest ( val name: String, var age: Int ) { init { if (age <= 0) { throw IllegalArgumentException("나이는 ${age}일 수 없습니다." ) } println("초기화 블록") } val uppercaseName: String get() = this.name.uppercase() }위의 경우는 그대로 "abc" 가 출력이 됩니다.당연히 personTest 객체를 통해 프로퍼티인 upppercaseName을 출력하면 ABC가 출력이 되지만요.. 강의에서 태현님께서 backing field 를 사용하지 않고, 프로퍼티를 통해 사용한다고 하셨는데.. 둘의 작동이 다른 것 같아서요! 제가 짐작컨데, 말씀하신 내용이backing field 처럼 사용되는 경우가 많지 않다.주로 getter 로 값을 가져오는 경우에는 값 자체를 가져오는 경우가 많으므로 프로퍼티를 통해 값을 가져오도록 한다.라고 이해해도 되는 것일까요?
-
미해결스프링 핵심 원리 - 기본편
@ComponentScan의 순서와 @오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Appconfig파일과 AutoAppConfig 파일 2개가 있을때CoreApplication을 실행하면main 메서드가 실행됨: SpringApplication.run(CoreApplication.class, args);가 호출되어 스프링 애플리케이션이 시작됩니다.@SpringBootApplication에서 @ComponentScan이 실행됨: @SpringBootApplication에는 내부적으로 @ComponentScan이 포함되어 있습니다. 이 때, 기본 패키지를 기준으로 @Component, @Service, @Repository, @Controller 등의 애노테이션이 붙은 클래스들을 스캔하고 빈으로 등록합니다.AutoAppConfig에는 @ComponentScan+ filter가 있으므로 AppConfig 보다 AutoAppConfig의 설정 정보를 먼저 적용함AutoAppConfig의 @ComponentScan에는 excludeFilters가 있어서 AppConfig의 @Configuration과 @Bean들은 등록되지 않음이렇게 이해를 하였는데첫번째로 이순서가 맞는것인지 궁금하고,두번째는 테스트 환경에서 package hello.core; //import 생략 @SpringBootTest class CoreApplicationTests { @Test public void contextLoads() { } } 이 테스트에서 오류가 발생하였는데오류내용 : Parameter 0 of constructor in hello.core.Order.OrderServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined in file [hello\core\member\MemoryMemberRepository.class - MemberRepository: defined by method 'MemberRepository' in class path resource [hello/core/AppConfig.class 오류내용은 Type에 따른 빈이 2개가 있다는것이었습니다.memberRepository, memoryMemberRepository같은 식으로제가 AppConfig파일에서 @Bean처리를 한 memberRepository와AutoAppConfig파일에서 @Component처리를한 구현체 memoryMemberRepository 또한 빈으로 등록이 되어있었습니다.그래서 AppConfig의 @Bean을 모두 주석처리 해주었더니 오류는 없어졌습니다.만약 제가 말씀드린 순서가 맞다면 filter처리된 Appconfig파일의 @configuration의 @bean들은 등록되지 않아야하는데 왜 filter처리가 안된것인지 궁금합니다. 아래는 import부분은 생략한autoappconfig와 appconfig파일입니다.기본패키지도 같게하여서 따로 문제는 없는것같지만일단 올려보았습니다.autoappconfigpackage hello.core; @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } appconfig (빈 주석처리 이후 오류 없어짐)package hello.core; @Configuration public class AppConfig { //@Bean public MemberService memberService(){ return new MemberServiceImpl(MemberRepository()); } //@Bean public MemberRepository MemberRepository() { return new MemoryMemberRepository(); } //@Bean public OrderService orderService() { return new OrderServiceImpl(MemberRepository(), DiscountPolicy()); } //@Bean public DiscountPolicy DiscountPolicy() { return new RateDiscountPolicy(); } }
-
미해결스프링 핵심 원리 - 기본편
findAllBean() , java.lang.NullPointerException 오류가 납니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: )질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. java.lang.NullPointerException: Cannot invoke "hello.core.discount.DiscountPolicy.discount(hello.core.member.Member, int)" because "discountPolicy" is null 이렇게 오류가 뜨는데 이유를 모르겠습니다..
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
코틀린 단에서 리스트 필터링과 DB에서 필터링 후 조회
안녕하세요. 궁금한 점이 하나 있습니다!강사님은 아래 두 가지 중 어떤 기준으로 하나를 선택하시나요?코틀린 단에서 리스트를 람다로 필터링해서 클라이언트에게 응답DB에서 조회할 때 WHERE절 필터링하여 조회한 리스트를 클라이언트에게 응답
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
해당 강의를 모두 듣고 코루틴 강의를 먼저 들어야 할까요?
안녕하세요. 강사님해당 강의를 모두 듣고 다음 커리큘럼이 궁금합니다.코루틴 강의코틀린 고급편코틀린과 부트로 도서관리 애플리케이션 개발하기이 셋중 순서를 어떻게 진행하는게 가장 효과적일까요?
-
미해결스프링 핵심 원리 - 기본편
interface와 기능추가
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]고객이 주문취소 를 추가 개발해달라고 요청이 왔을때는 어떤식으로 개발을 해야되나요? 추가 요건이 생길때마다 interface와 클래스를 새로 만들어야되나요?
-
해결됨스프링 핵심 원리 - 기본편
테스트 폴더 compact middle packages
main 폴더에서는 compact middle packages이 잘 적용되어서 hello.core 로 나와있는데 test폴더에서는 compact middle packages가 적용되어 있지 않습니다 해결 방법이 있나요?
-
미해결스프링 핵심 원리 - 기본편
log DEBUG 모드로 어떻게 하나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]13분 05초 처럼 로그를 보고 싶은데 DEBUG 로그레벨로 설정을 어떻게 해야하는지 모르겠습니다.다른 분들 찾아보니 logback.xml 이라는 파일도 있는 것 같던데 저는 그 파일이 아예 없네요!
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
회차 강의pdf파일 보는 방법이 없나요?
회차 강의pdf파일 보는 방법이 없나요?분명히 학습자료를 받아서 볼 수 있다고 되어있는데, 노트와 어디에서도 파일을 받아서 볼 수 있는 것이 없습니다.내용을 프린트 해서 볼 수 있는 방법이 있을까요?답변부탁드립니다.
-
미해결스프링 핵심 원리 - 기본편
섹션4질문입니다.
스프링 컨테이너와 스프링 빈스프링 컨테이너 생성 3분에서 이 클래스는 어플리케이션컨텍스트 인터페이스의 구현체이다. 라고 나와있는데요. 구현체가 무슨의미인가요?
-
미해결스프링 핵심 원리 - 기본편
request 스코프와 ObjectProvider 이해
request 스코프 예제를 만들고, ObjectProvider로 해결하는 부분을 학습하던 중 헷갈리는 부분이 있어서 질문 드립니다. 일단 저는 이렇게 이해하였습니다.싱글톤 스코프의 빈은 스프링 애플리케이션 실행 시점에 빈의 생성과 주입이 이루어지고, request 스코프의 빈은 HTTP 요청이 들어와야 빈을 생성한다LogDemoController와 LogDemoService는 싱글톤 스코프의 빈이고, MyLogger는 request 스코프의 빈이다 싱글톤 스코프와 request 스코프는 서로 빈의 생성과 주입 시기가 달라서 싱글톤 스코프의 빈이 request 스코프의 빈을 참조할 수 없기 때문에 오류가 발생하였다이 오류를 해결하기 위해서는 DL 서비스를 제공하는 ObjectProvider를 사용해야 한다 ObjectProvider의 getObject() 메서드를 사용하면 request 스코프의 빈을 가져올 수 있다 헷갈리는 부분은 이 부분입니다."ObjectProvider 덕분에 getObject() 메서드를 호출하는 시점까지 request 스코프의 빈 생성을 지연할 수 있다"이 부분을 어떻게 해석해야 할까요?이 부분 때문에 내용 정리가 잘 안됩니다
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
퀴즈 2번 질문드립니다
코드를 아래와 같이 작성했더니int height = 115; String result = (height >= 120) ? "탑승 가능합니다" : "탑승 불가능합니다"; System.out.println("키가 " + height + "cm 이므로 " + result); height = 121; System.out.println("키가 " + height + "cm 이므로 " + result);키가 115cm 이므로 탑승 불가능합니다키가 121cm 이므로 탑승 불가능합니다 이렇게 출력되는데 중간에 변수값을 height = 121; 이런식으로 변경해주면 안되는건가요?? 121로 숫자가 바뀌는걸 봐서는 변경이 된 것 같은데 뒤에 result가 탑승 불가능합니다로 출력이 되는건지 궁금합니다!
-
해결됨스프링 핵심 원리 - 기본편
코드를 그대로 입력했는데 getBeanDefinition에서 에러 발생합니다 ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 애플리케이션 빈 출력하기 코드 부분 중 아래에 있는 부분에서 에러가 발생합니다 ㅠㅠBeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);강사님과 똑같이 코드를 입력했는데 getBeanDefinition에서 아래와 같은 에러가 발생합니다java: cannot find symbol symbol: method getBeanDefinition(java.lang.String) location: variable ac of type org.springframework.context.ApplicationContext 참고로 자바 17 사용중입니다. 아래는 전체 코드입니다.package hello.core.beanfind; import hello.core.AppConfig; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class ApplicationContextInfoTest { ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기") void findAllBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { Object bean = ac.getBean(beanDefinitionName); System.out.println("name = " + beanDefinitionName + " Object : " + bean); } } @Test @DisplayName("애플리케이션 빈 출력하기") void findApplicationBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName); // Role ROLE_APPLICATION : 직접 등록한 애플리케이션 빈 // Role ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈 if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) { Object bean = ac.getBean(beanDefinitionName); System.out.println("name = " + beanDefinitionName + " Object : " + bean); } } } }
-
미해결스프링 핵심 원리 - 기본편
섹션2 APPCONFIG리팩토링 1분 35초 강의에서 질문있습니다.
섹션2 APPCONFIG리팩토링 1분 35초 강의에서 질문있습니다.저는 선생님처럼 저런 네모창이 안뜨고 오른쪽 화면처럼 자동으로 변수명이 바뀌는데 네모창 틀려면 어떻게 해야 하나요? 화면 확대는 새탭에서 이미지 열기 하시면 그림 확대에서 보입니다.
-
미해결스프링 핵심 원리 - 기본편
예제2 질문입니다.
새로운 할인 정책 개발에서 RateDiscountPolicyTest파일에서 RateDiscountPolicy DiscountPolicy=new RateDiscountPolicy(); 이렇게 쓰는데요.class OrderServiceTest {MemberService memberService = new MemberServiceImpl();OrderService orderService = new OrderServiceImpl();근데 OrderServiceTest 에서는 뒤에 IMPL이 붙여져 있는 파일을 객체로 사용하는데 위랑 같은 형식으로 사용할려면 MemberService memberService = new MemberService();이렇게 써야 하는거 아닌가요?2.새로운 할인 정책 적용과 문제점 4분 19초에private final DiscountPolicy discountPolicy=new FixDiscountPolicy();이 코드가 인터페이스도 의존하고 구체화도 의존한다고 했는데 어느게 인터페이스 의존하고 어느게 구체화도 의존한건가요?FixDiscountPolicy() 이게 구체화의존하고 DiscountPolicy 이게 인터페이스 의존했다는 말씀인가요?3.새로운 할인 정책 적용과 문제점 6분에 OCP위반되었다고 하는데 아래처럼 FixDiscountPolicy();에서-> RateDiscountPolicy(); 이렇게 바꾸는게 OCP위반인가요?// private final DiscountPolicy discountPolicy=new FixDiscountPolicy();private final DiscountPolicy discountPolicy=new RateDiscountPolicy();4.관심사의 분리 17분appConfig 객체는 memoryMemberRepository 객체를 생성하고 그 참조값을 memberServiceImpl 을생성하면서 생성자로 전달한다고 하셨는데요.근데 코드 보면 public class AppConfig {public MemberService memberService() {return new MemberServiceImpl(new MemoryMemberRepository());}리턴으로 반환값인데 전달을 어디서 하는거에요?5.관심사의 분리 7분 45초에 public MemberServiceImpl(MemberRepository memberRepository) { 위에 4 related problem이 있는데요.강의를 따라가면 에러가 해결되긴 하는데요.에러를 보면public MemberServiceImpl(MemberRepository memberRepository)이거와 아래 코드가 연관된 문제라고 하는데 다른 클래스인데도 왜 연관되어있나요? class OrderServiceTest { MemberService memberService = new MemberServiceImpl(); OrderService orderService = new OrderServiceImpl();6.관심사의 분리 22분에 강의에서 null로 채우시면 컴파일 오류가 안나는데 왜 안나는 거에요?
-
해결됨스프링 핵심 원리 - 기본편
DI에 관해서 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]DI는 결국 인터페이스를 의존하는데, 클래스를 의존하게 된다면 필드에 private final Class clss = new Class();로 생성해서 사용하면 되나요?인터페이스가 필요없는 클래스들도 DI를 위해서 인터페이스를 새로 생성 해야할까요?모든것에 DI를 적용해야 하는것인지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
@Autowired 생략 가능한 경우
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@Autowired를 생략 가능한 경우로 생성자가 1개일 때 가능한 건 알고 있는데 필드 주입이나 수정자 주입의 경우엔 필드가 1개일 때 혹은 수정자 메서드가 1개일 때 @Autowired 생략 가능하다 이런 건 따로 없는 건가요?