묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
Camera[]
강의를 보다보면 Camera[] cameras = new Camera[3] 로 배열을 만들어 주셨는데 클래스 Camera와 배열의 Camera[]는 다른건가요?
-
미해결스프링 핵심 원리 - 기본편
5. 싱글톤 컨테이너 > @Configuration과 바이트코드 조작의 마법 > NoUniqueBeanDefinitionException
5. 싱글톤 컨테이너 > @Configuration과 바이트코드 조작의 마법 진행 중, 최종 확인을 위해 java Run을 진행했을 때 NoUniqueBeanDefinitionException 오류가 나옵니다. 해당 프로젝트를 압축하여 다음 링크에 올려두었습니다. 확인 부탁드리겠습니다. 감사합니다. https://drive.google.com/file/d/1bmEbBnSeiU_y_vEvmizju_MUVcFVRwpw/view?usp=sharing 에러 로그 : No qualifying bean of type 'salt.core.discount.DiscountPolicy' available: expected single matching bean but found 2: rateDiscountPolicy,fixDiscountPolicyorg.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'salt.core.discount.DiscountPolicy' available: expected single matching bean but found 2: rateDiscountPolicy,fixDiscountPolicy
-
미해결스프링 핵심 원리 - 기본편
기본편 - 프로젝트 생성 에러입니다 ㅠ
오후 2:04:11: Executing ':CoreApplication.main()'...> Task :compileJava UP-TO-DATE> Task :processResources UP-TO-DATE> Task :classes UP-TO-DATE> Task :CoreApplication.main() . ____ _ /\\ / ___'_ __ (_)_ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.12)2023-06-01 14:04:14.123 INFO 8400 --- [ main] hello.core.CoreApplication : Starting CoreApplication using Java 11.0.18 on DESKTOP-NU98GMA with PID 8400 (C:\study\core\build\classes\java\main started by Lenovo in C:\study\core)2023-06-01 14:04:14.126 INFO 8400 --- [ main] hello.core.CoreApplication : No active profile set, falling back to 1 default profile: "default"2023-06-01 14:04:14.917 INFO 8400 --- [ main] hello.core.CoreApplication : Started CoreApplication in 1.443 seconds (JVM running for 2.169)Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.See https://docs.gradle.org/7.6.1/userguide/command_line_interface.html#sec:command_line_warningsBUILD SUCCESSFUL in 3s3 actionable tasks: 1 executed, 2 up-to-date오후 2:04:15: Execution finished ':CoreApplication.main()'.이렇게 에러가 발생하는데 프로젝트 생성 어떻게 해야하나요 ㅠ
-
미해결스프링 핵심 원리 - 기본편
memberService에서 궁금한 점이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]memberService 인터페이스에서 join(Member member)가 있는데, member 클래스 자체를 파라미터로 받는 것이 어떤 의미가 있는 것인지 궁금합니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
클래스 메소드
(강이 내용중 클래스 메소드는 안에 있는 동작이 항상 똑같이 발생 한다고 하셨는데 )클래스 메소드도 호출해서 사용 하고 그냥 메소드도 호출해서 사용하는데그러면 클래스 메소드 안에서 항상 작동하는 동작들을 그냥 메소드 안에 넣어주어서 사용하면 되는거 아닌가요?? 왜 굳이 클래스 메소드를 선언해서 사용하는지 이해가 안되네요
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
객체와 인스턴스의 차이
BlackBox bbox = new BlackBox(); 에서BlackBox 클래스로부터 bbox 객체 생성bbox 객체는 BlackBox 클래스의 인스턴스라고 하셨는데객체와 인스턴스가 무슨 차이가 있는지 이해가 안되네요..
-
미해결스프링 핵심 원리 - 기본편
특정 타입을 모두 조회하기 테스트에서 값이 1개만 나옴
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. @Test @DisplayName("특정 타입을 모두 조회하기") void findAllBeanByType() { Map<String, MemberRepository> beansOfType = ac.getBeansOfType(MemberRepository.class); for (String key : beansOfType.keySet()) { System.out.println("key = " + key + " value = " + beansOfType.get(key)); } System.out.println("beansOfType = " + beansOfType); assertThat(beansOfType.size()).isEqualTo(2); } @Configuration static class SameBeanConfig { //여기서 스태틱은 이 클래스에서만 사용하겠다는 뜻 @Bean public MemberRepository memberRepository1() { return new MemoryMemberRepository(); } @Bean public MemberRepository memberRepository2() { return new MemoryMemberRepository(); } } 이 코드에서 강사님은 2개의 값으로 테스트를 통과하는데 저는 key = MemberRepository value = hello.core.member.MemoryMemberRepository@68dc098bbeansOfType = {MemberRepository=hello.core.member.MemoryMemberRepository@68dc098b}이렇게 나와서 1개만 나와서 테스트를 실패해서요 지금 이전에 만든 MemoryMemberRepository를 보고 있는거 같은데 어떻게 SameBeanConfig를 보게 만들 수 있나요?
-
해결됨스프링 핵심 원리 - 기본편
스프링부트 3.x 로그관련
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]스프링 전환하기 4분 49초의 내용입니다.현재 스프링부트 3. 버전으로 강의를 수강하고있는데MemberApp을 실행하였을때 Spring에서 자동으로 만들어주는 Creating shard instance.. 부분 빈 생성로그가 뜨질 않습니다. 2.7버전으로 프로젝트를 생성하였을 경우 로그가 뜨는데 3.x버전으로도 뜨게 하는 설정은 없을까요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
다차원 배열 순회 관련 질문입니다.
System.out.println("------------"); // 세로크기 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++) { //가로 seats3[i][j] = eng[i] + (j + 1); } }이 부분에서 혹시 i < seats3.Length; 단순히 A부터 J까지 10개라서 10이되는건가요?그리고 j < seats3[i] 는 어떤 원리로 15가 되는건지 궁금합니다.
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
접근 제어 지시자 강의 10분40초부분에서 막혀요 선생님 ㅠ
똑같이 강의따라하다가 뭐가 잘못된건지 몰라서 물어봐요 ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
[기본편]섹션2 - 회원 도메인 실행과 테스트
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]마지막에 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있다고 하셨는데, 인터페이스는 MemberRepository를 의미하고 구현의존은 MemoryMemberRepository를 말씀하신건가요?그리고 '추상화에도 의존하고 구체화에도 의존함'이라고 하셨는데 이건 어떤 의미일까요?
-
미해결스프링 핵심 원리 - 기본편
회원등급이 추가되면 OCP 위반인가요?
안녕하세요!문득 궁금증이 생겨서 질문합니다.예제에서는 Basic, VIP 이렇게 2개의 회원등급이 enum에 존재하고 DiscountPolicy 구현클래스는 각 등급에 따른 분기로 할인정도를 조절합니다. (VIP의 경우 10%할인, 1000원 할인)만약 회원등급이 추가된다면 DiscountPolicy 구현클래스의 코드를 모두 수정해야 하는데, 이 경우 OCP위반이라고 하나요?아니면 어쩔 수 없는 비즈니스 로직이 변경된 경우인가요?
-
해결됨스프링 핵심 원리 - 기본편
DiscountPolicy 동적으로 의존성 변경
항상 좋은 강의, 감사히 보고 있습니다.강의에서 AppConfig에서 DiscountPolicy를 FixDiscountPolicy로 고정합니다.만약 상황에 따라 정률, 정액할인 정책을 동적으로 적용한다고 한다면 어떤식으로 설계하면 좋을까요?쿠폰에 따라 할인정책이 달라지는 경우 어떻게 해야 될까요..?
-
미해결스프링 핵심 원리 - 기본편
5. 싱글톤 컨테이너 > @Configuration과 싱글톤 > 참조값 문의
아래 코드 실행 시 print해주는 참조값이 셋 다 같아야 하는데 모두 각각 다릅니다. 어떤 부분 때문에 실습 영상에서는 같게 나온 세 참조값이 모두 다르게 나왔는지 원인 파악 문의드립니다. 해당 프로젝트 실습 링크는 다음과 같습니다. https://drive.google.com/file/d/1bmEbBnSeiU_y_vEvmizju_MUVcFVRwpw/view?usp=sharing package salt.core.singleton; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import salt.core.AppConfig; import salt.core.member.MemberRepository; import salt.core.member.MemberServiceImpl; import salt.core.order.OrderServiceImpl; import static org.assertj.core.api.Assertions.*; public class ConfigurationSingletonTest { @Test void configurationTest() { ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class); OrderServiceImpl orderService = ac.getBean("orderService", OrderServiceImpl.class); MemberRepository memberRepository = ac.getBean("memberRepository", MemberRepository.class); MemberRepository memberRepository1 = memberService.getMemberRepository(); MemberRepository memberRepository2 = orderService.getMemberRepository(); System.out.println("memberService -> memberRepository = " + memberRepository1); System.out.println("orderService -> memberRepository = " + memberRepository2); System.out.println("memberRepository = " + memberRepository); // assertThat(memberService.getMemberRepository()).isSameAs(memberRepository); // assertThat(orderService.getMemberRepository()).isSameAs(memberRepository); // 셋 다 같아야 하는데 셋 다 참조가 다름 // memberService -> memberRepository = salt.core.member.MemoryMemberRepository@5af5def9 // orderService -> memberRepository = salt.core.member.MemoryMemberRepository@3a45c42a // memberRepository = salt.core.member.MemoryMemberRepository@36dce7ed } }
-
미해결스프링 핵심 원리 - 기본편
필드 주입 vs 생성자 주입
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]필드 주입으로 구현했을경우 테스트 코드 작성 시 유연하게 변경이 불가하다고 이해했습니다.그렇다면 생성자 주입으로 구현했을경우 테스트 코드 작성 시 아래와 같이 의존관계를 유연하게 변경 가능하기 때문에 생성자 주입은 필드 주입의 단점을 보완 가능한 것이 맞을까요?// 생성자 주입으로 DI 주입 void fieldInjectionTest() { OrderServiceImpl orderService = new OrderServiceImpl(new JpaRepository, new RateDiscountPolicy); orderService.createOrder(1L, "itemA", 20000); }
-
미해결스프링 핵심 원리 - 기본편
스프링핵심원리이해2-객체지향원리적용 편 질문
회원관리(가입,조회) 서비스, 주문서비스(할인, 주문)(OrderServiceImpl)에서역할을 담당하는 인터페이스를 바라보게 해야하는데, 현재코드는 구현체도 바라보게 했다는 점에서 코드의 수정이 필요하다는 강사님 말씀은 이해가 됩니다!다만, 여기서 강사님 표현으로 '클라이언트'코드도 수정이 이루어져야 한다고 말씀하셨는데,클라이언트코드라는 용어가 조금 혼동이 됩니다.클라이언트 코드에 대해서 설명 한번 부탁드립니다!
-
미해결스프링 핵심 원리 - 기본편
스프링컨테이너의 동작 순서와 autowired어노테이션
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1 . 컴퍼넌트 스캔 및 autowired어노테이션을 사용할 때 스프링컨테이너 파라미터로 넘겨진 설정클래스의 컴퍼넌트스캔 어노테이션을 통해 스프링 컨테이너가 컴퍼넌트가 붙은 클래스를 빈으로 모두 등록한 후에 스프링컨테이너가 의존관계주입을 하는 단계에서 autowired를 통해 의존관계주입을 하자나요 근데 스프링컨테이너가 이 autowired어노테이션을 어떤식으로 찾는건가요? 2 . 스프링컨테이너는 빈을 다 등록한 후에 의존관계주입이 이루어진다하셨는데 memberSerivceImpl 랑 orderServiceImpl의 의존관계주입을 둘 다 수정자방식으로 autowired어노테이션을 붙여서 수정자에다 모두 콘솔을 넣고(memberimpl의 수정자메서드에는 콘솔 1 order에는 콘솔2) 실행시켜봤는데 로그에 autoConfig rateDiscountPolicy memberServiceImpl memoryMemberRepository 1 orderServiceImpl 2 이런식으로 나오는데 위에 논리라면 1이 orderService까지 다 생성된후에 1이 나와야하는거 아닌가요??3 . 위랑 비슷한 예인데 수동(config,Bean)을 이용할때에도 원래는 스프링컨테이너가 빈을 다 등록한뒤에 의존성주입이 이루어진다고 하셨는데 이것저것 해봐서 로그를 봤는데 로그는 빈을 등록하면서 의존성주입에 필요한 빈을 등록하고 의존성주입이 이루어지는 방식으로 되던데 이것도 이해가 잘 안됩니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
객체 생성 및 생성자 질문드립니다.
안녕하세요 나도코딩님선생님의 강의를 들으면서 모르는것들을 하나하나 곁가지 치듯이 검색하면서 알아보던 도중에CHAT GPT에 인터페이스 관련으로 질문하면서 공부하다가 아래의 코드를 보게되었습니다.// 인터페이스 정의public interface Drawable {void draw(); // 추상 메서드 선언}// 인터페이스 구현public class Circle implements Drawable {@Overridepublic void draw() {System.out.println("원을 그립니다.");}}public class Rectangle implements Drawable {@Overridepublic void draw() {System.out.println("사각형을 그립니다.");}}// 사용 예시public class Main {public static void main(String[] args) {Drawable circle = new Circle();circle.draw(); // "원을 그립니다."Drawable rectangle = new Rectangle();rectangle.draw(); // "사각형을 그립니다."}}여기서 제가 이해가 되지 않는 부분이Drawable circle = new Circle();위의 부분인데요객체를 생성할때에는A a = new A();이처럼 작성하는걸로 알고있는데왜 저기에서는 B a = new A();이런식으로 되어있는지 궁금합니다.구글에 검색을 많이 해봤는데 이해가 안되더라구요ㅠㅠ답변 부탁드립니다!!
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
섹션3 < 객체의 속성은 이라는 강의에서 질문이요!!
7분28초 부분에서 똑같이 실행했는데 저는 왜 안되는걸까요? 어디부분이 잘못되었을까요? ㅠㅠ
-
해결됨스프링 핵심 원리 - 기본편
스프링 빈에 DTO 클래스를 등록하는 경우도 있을까요?
현재 스프링 빈 싱글톤 방식 파트 강의를 수강 중입니다.강의 중 싱글톤 방식의 문제점에 대해 아래와 같이 이해하였습니다. public class StatefulService { // private int price; // 상태를 유지하는 필드 public int order(String name, int price){ System.out.println("name = " + name + " price" + price); //this.price = price; //여기가 문제! return price; } // public int getPrice() { //// return price; // } } @Test void statiefulServicesingleton() { ApplicationContext ac = new AnnotationConfigApplicationContext(testConfig.class); StatefulService statefulService1 = ac.getBean(StatefulService.class); StatefulService statefulService2 = ac.getBean(StatefulService.class); //ThreadA : A사용자가 10000원 주문 //statefulService1.order("userA", 10000); int userAPrice =statefulService1.order("userA", 10000); //ThreadB : B사용자가 20000원 주문 //statefulService2.order("userB", 20000); int userBPrice =statefulService2.order("userA", 10000); //ThreadA : 사용자A가 주문 금액 조회 // int price = statefulService1.getPrice(); // 10000원 조회해야 하는데?? System.out.println("price = " + userAPrice); // Assertions.assertThat(statefulService1.getPrice()).isEqualTo(20000); Assertions.assertThat(userAPrice).isEqualTo(10000); }스프링 빈에 등록된 인스턴스(StatefulService)에 공유필드(price)가 있는 경우,추가로 참조하는 인스턴스(statefulService2)로 인해 값이 변경될 수 있고 큰 버그를 초래할 수 있다. 위와 같은 개념을 익히다보니 자연스럽게 DTO의 공유필드가 떠올랐습니다.처음에는 DTO는 일반적으로 필드를 사용하니 문제 되지 않나? 했는데 스프링 빈에 등록된 경우에만 문제가 된다고 이해하였습니다. (제가 잘못 이해했는지도 궁금합니다 ㅎㅎ)그렇다면 혹시 DTO를 스프링 빈에 등록하는 경우가 만에 하나라도 있을까요?DTO를 스프링 빈에 등록한다면 동일한 문제가 생길 것 같아서요.