묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
안녕하세요.
안녕하세요 강의 너무 잘듣고 있습니다 항상감사합니다. build.gradle로 프로젝트를 open하는거랑 그냥 프로젝트 폴더로 open하는거 차이를 알고싶습니다.강의를 계속반복하고있는데 최근 스프링부트 버전이 3.xx되면서 3.xx부터는 자바17만지원되는데 17을사용해도 문제없는지 궁금합니다...
-
미해결스프링 핵심 원리 - 기본편
조회대상 빈이 2개 이상 일 때 빈지정에 방법들의 DIP 위반 여부
관련 강의 : 의존관계 자동 주입 - 6번째 강의(@Autowired, @Qualifer, @Primary)질문타입이 같은 빈이 여러 개 조회 될 때, 특정 빈을 선택하는 방법을 3가지 소개해 주셨는데..이 3가지 방법이 결국 특정 빈을 지정해 주는 방법인 것 같습니다. 이 방법을 사용하면, 특정 빈을 지정해 DI 할 수 있을 것 같습니다. 그러나 DIP 위반을 피하기 위해서 이전 강의에서 AppConfig에서만 특정 빈을 선택하도록 하였습니다. 예를들어 AppConfig에서 DiscountPolicy 중 Rate..와 Fix... 를 선택하게 하고 , 또한 AppConfig에서 MemberRepository 중 Memory..., DB...,External... 등을 선택하도록 하여 DIP 위반 문제를 해결했습니다. 그런데 @Qualifer,@Primary 등을 사용하면 OrderServiceImpl 이나 MemberServiceImpl 이 RateDiscountPolicy, FixDiscountPolicy 또는 Repository 관련 하위 클래스 등을 선택하게 되어 결국은 DIP에 위반되는 것은 아닌지 여쭈어 봅니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
생성자 주입으로 변경했을 때 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"); } } }
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
String 문자열, String[] 배열에서의 .length, .length(), .charAt() 쓰임의 차이점을 알고 싶습니다 :)
안녕하세요, 다름이 아니라 제가 나도코딩 자바(Java) 기본편을 공부하면서, 배열(Array)에 관해 모르는 것이 생겨서 이렇게 질문을 남깁니다.일반적으로 배열이 String[] array = {...}; 이렇게 선언 되었을 때, array.length를 이용해서 배열의 길이를 파악하고, array[0] 처럼 이렇게 인덱스로 값의 위치를 파악하면서 데이터를 읽는다고 알고 있습니다. 반면에 String sentence = "sentence"; 이런 경우에는 같은 length를 쓰지만 String 클래스의 메소드라서 괄호를 나타낸 sentence.length()로 길이를 파악하고, "..."; 안 문장의 각 글자 별 위치를 파악할 때는 sentence.charAt()을 쓴다고 알고 있습니다. 제가 이해한 부분이 혹시 맞을까요?또한 아래처럼 선언된 String[] 배열에서:String[] Java = { "나는 자바가 좋아요" };Java 배열의 전체 길이를 파악하고 싶다면, Java.length 으로 적는데, 만약 배열 안 문장 "나는 자바가 좋아요" 의 전체 길이를 알고 싶다면 Java[].length()으로 적고, 배열 안에 들어있는 문장 "나는 자바가 좋아요" 에서 각 낱말의 위치를 파악하고 싶다면, Java[].charAt()를 적으면 되는 건가요? 여기서 Java[].부분에는 배열 index를 적고 (예를 들면 Java[0]), charAt()은 "..." 문장의 각 글자 별 인덱스를 적는 방식으로요.질문이 조금 많이 길었습니다. 하지만 동시에 그 만큼 제가 또한 열심히 배우고 싶다는 열정으로 봐주셨으면 합니다! 게다가 앞으로 다가올 기말시험에서도 배열의 비중이 꽤 크기도 해서, 정말로 잘 배우고 싶습니다! (해외에서 대학을 다니는 지라 지금 이맘때 쯤이 시험기간입니다 ㅠㅠ)참 얼마 전에, 자바로 소켓 프로그래밍으로 과제를 해야 했었던 일이 있었는데, 그 때 나도코딩님이 업로드 해주신 섹션 12. (Section 12.) 예외 처리 부분이 상당히 많이 도움 되었습니다.덕분에 과제에서 나쁘지 않은 점수를 받았습니다. 앞으로도 좋은 강의 잘 부탁하고, 진심으로 감사합니다 :-)
-
해결됨[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
[질문] cascading operator 설명하실 때
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ...는 Spread Operator 이고..이 Cascading Operator 아닌가해서 질문드립니다. dart 강의 3강, 32분 쯤에 나오는 내용입니다.
-
미해결스프링 핵심 원리 - 기본편
생성자에서 @Autowired 생략
setter에 @Autowired를 붙이고, 생성자에 @Autowired를 붙이지 않은 경우에도생성자에는 @Autowired가 붙은 것과 같이 동작하나요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
강사님, 질문 하나 드립니다!
구문 1구문 2 (강사님이 보여주신 예제)단순 위 아래의 순서 차이 같아 보이는데, 구문 1 에서는 오류가 나고, 구문 2에서는 오류가 나지 않는 이유를 혹시 알 수 있을까요? 왠지 인스턴스 변수 때문에 그런건가 대충 짐작만 하고 있는데.. 혹시 설명을 들을 수 있을지요 하하;
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
제네릭 클래스 (전반전) 마지막 부분 int와 String으로 변환
안녕하세요.강의 정말 잘 듣고 있습니다.제네릭 클래스 (전반전) 마지막 부분int 와 String으로 변환 후 출력을 하는 부분에서Object c3Name = c3.name; System.out.println("주문 고객 번호 : " + c3Name); Object c4Name = c4.name; System.out.println("주문 고객 이름 : " + c4Name);이대로 작성하면 오류없이 정상 출력 됩니다.int와 String으로 변환하지 않고 Object로 코드 작성하면 안되는 건가요?왜 굳이 int와 String으로 변환해서 출력하는지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
싱글톤방식 주의점 관련 질문있습니다
싱글톤방식을 할 때 항상 싱글톤 객체는 무상태로 설계해야 한다고 강의자료에 나와있는데 그러면 항상 빈을 설계할때 스프링빈의 필드에는 공유값을 설정하지 말고 무조건 지역변수와 같은 것들로 설계를 해야하나요?? 예외는 없는건가요??
-
미해결스프링 핵심 원리 - 기본편
@Autowired 필드 명에서
[질문 내용]안녕하세요, 강의를 듣다 궁금한 점이 생겨 질문 드립니다.@Autowired 필드 명에서, 먼저 타입 매칭을 시도하고, 그 결과에 여러 빈이 있을 경우 필드 명, 파라미터 명으로 빈 이름을 매칭한다고 이해했습니다.그렇게 된다면, 기존 코드인 (DiscountPolicy discountPolicy)@Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { ..... }이처럼은 사용 못하는 것이고@Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy ratecountPolicy) { ..... }DiscountPolicy rateDiscountPolicy 처럼 파라미터명( 또는 필드명)을 바꿔줘야 하는건가요?감사합니다!
-
미해결스프링 핵심 원리 - 기본편
동작 가능한 프로젝트 파일은 없을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요.각각의 강의에서 완성된 인텔리제이용 프로젝트 파일을 받을수 있나요?있으면 도움이 많이 도움이 될 것 같습니다.단순히 이해만 하고 넘어가도 되는 강의나 강의내용을 따라했지만 동작이 되지 않는 경우 바로 참조가 가능하기 때문에 그렇습니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
제네릭스
혹시 인텔리제이에서 왜 저는 일렬로 출력되는지 알 수 있을까요? 밑에 현재 작성한 코드입니다! public class _01_Generics { public static void main(String[] args) { // 제네릭스 int[] iArray = {1, 2, 3, 4, 5}; double[] dArray = {1.0, 2.0, 3.0, 4.0, 5.0}; String[] sArray = {"A", "B", "C", "D", "E"}; printIntArray(iArray); printDoubleArray(dArray); printStringArray(sArray); } private static void printStringArray(String[] sArray) { for (String i : sArray ) { System.out.println(i + " "); } System.out.println(); } private static void printDoubleArray(double[] dArray) { for (double i : dArray ) { System.out.println(i + " "); } System.out.println(); } private static void printIntArray(int[] iArray) { for (int i : iArray ) { System.out.println(i + " "); } System.out.println(); } }
-
미해결스프링 핵심 원리 - 기본편
DiscountService 생성자 질문
[질문 내용]DiscountService Bean이 작성되면 Spring 컨테이너는 @Autowired 어노테이션을 사용하여 DiscountPolicy 인스턴스의 Map을 DiscountService 생성자에 삽입하는거 같은데 이때, Map의 DiscountPolicy의 인자에는 DiscountPolicy의 인스턴스 값이 들어가는건 이해가 되는데String의 인자에 DiscountPolicy 하위 빈객체들의 이름이 들어가는건 이러한 상황에서의 Spring의 원칙일까요??
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
Escape Sequence에서 Tap 결과값에 대해 질문드려요
강의 영상에서는 \t 한번으로 숫자가 정렬된 것을 볼 수 있었습니다. 하지만 제가 작성하였을때는 정렬이 되지 않습니다.물론 \t을 2번 진행하게 되면 정상적으로 정렬이 되는 것을 볼 수 있습니다.강사님 처럼 \t 한번으로 정렬하기 위해서는 어떻게 해야하나요?
-
미해결스프링 핵심 원리 - 기본편
@Configuration 사용이유
@Configuration을 지워도 테스트가 통과되는데 @Configuration사용하는게 어떤 차이를 만드나요??
-
미해결스프링 핵심 원리 - 기본편
영상에서 싱글톤 패턴의 DIP 위반한다고 설명 하신것에 대해서 제가 이해했는지 궁금합니다.
[질문 내용]안녕하세요. 좋은 수업 잘 듣고 있습니다. 현재 설명하시는 singleton 코드에서 DIP문제가 발생 할 수 있다고 설명해주셨는데싱글톤 패턴의 DIP 위반이라고 설명하신 이유가싱글톤패턴을 사용하면 getInstance()를 public으로 선언하고 사용한다. (인스턴스를 직접참조하도록) 이러한 방식으로 인해서 클라이언트에서 getInstance()을 사용하면 된다. 그러면 클라이언트가 구체 클래스에 의존하게 되므로 DIP를 위반한다.이런식으로 생각을해도 괜찮을까요?? 다른 질문들을 보면서 싱글톤패턴이 꼭 DIP를 유발하지 않는 다는 것은 이해했습니다.항상 질문에 꼼꼼히 대답해주셔서 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
스프링과 스프링 부트 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]간단하게 하나만 더 질문드리겠습니다. CoreApplication이외에 ctrl shift f10으로 진행했던 것은 자바코드로 스프링 프레임워크를 사용한 것이고, CoreApplication코드를 ctrl shift f10으로 진행한 것은 스프링부트로 스프링 프레임워크를 실행한 건가요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
참조 강의 중 질문
changeName(c2); System.out.println(c1.name); System.out.println(c2.name); public static void changeName(Camera camera) { camera.name = "잘못된 카메라";안녕하세요 참조 강의 중 앞부분은 다 이해가 갔는데 위 코드가 등장하는 순간부터 이해가 잘 가지 않아서 질문을 드립니다.1. 우선 아랫 부분 코드가 이해가 잘 가지 않습니다. changeName 이라는 메소드의 매개변수에 (Camera camera)가 들어간 것에 대한 의미를 잘 모르겠습니다.changeName(c2)를 통해서, c2가 참조하는 첫번째 Camera()의 이름을 바꿨는데,Camera camera는 무슨 의미로 작성하신 건지 잘 이해가 가지 않습니다..2.camera.name도 잘 이해가 가지 않습니다. 코드에서 camera라는 객체나 메소드가 보이지 않는데 왜 camera.name의 의미는 camera의 이름을 바꾸는 것인데, 제가 볼 땐 camera라는 메소드 또는 객체가 보이지 않는데 왜 강사님께서 이렇게 작성을 하신건지 잘 모르겠습니다..ㅠchangeName(c2); System.out.println(c1.name); System.out.println(c2.name);이렇게 봤을 때는 이해가 잘 가는데요.. ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
lombok 또는 직접 생성한 생성자가 2개 이상일 경우 Autowired
Lombok의 @RequiredArgsConstructor 등을 사용해서 생성자를 하나만 만들었을 경우에는 생성자가 하나이므로 @Autowired를 생략해도 @Autowired가 적용된다고 이해하였습니다.그런데 Lombok이나 직접 생성자를 추가로 생성해서 생성자가 2개 이상일 경우 Lombok으로 만든 생성자에는 @Autowired 어노테이션을 어떻게 달아주어야하나요?감사합니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
콘솔에서 한글 꺠짐문제는 어떻게 해아하나요?
인텔리제이 콘솔창 한글 깨지는 문제 어떻게 해결하셨나요? 구글에 나온대로 설정 들어가서 UTF-8로 다 바꾸는것도 해보고 vm들어가서 추가하는것도 해봤는데 해도 안되네요 구지 한글로 안해도 되긴하는데 먼가 그냥 뒤에서 콘솔창에 한글로 계속 쓰실것 같아서 해결어떻게 하셨나 궁금합니다!-Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8