묻고 답해요
148만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
서비스 계층에서 인터페이스와 Impl 구분에 대해서
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 다른 사람의 코드를 읽던 중에 궁금한 것이 생겨서 질문 남깁니다.제가 읽은 코드에는 ~~Service(인터페이스) 와 ~~ServiceImp로 작성을 했습니다. 이 전에도 이런 구조를 사용하는 코드를 종종 봤습니다. 저는 지금까지 그냥 바로 인터페이스 없이 ~~Service를 만들고 비즈니스 로직을 작성 했습니다.제가 찾아본 결과로는 인터페이스와 구현을 구분하는 이유는 2가지 였습니다.OCP 법칙을 더 잘 지키기 위해서추상과 구현을 OCP 법칙을 지키고 다형성을 확보하기 위해서AOP Proxy과거 스프링에서 AOP를 사용할 땐 JDK Dynamic Proxy를 사용하기 때문에 인터페이스가 필요했다. 하지만 지금은 GCLIB를 사용할 수 있기 때문에 사실상 의미를 잃었다.추가적으로 인터페이스를 나누고 인터페이스에 javadoc용 주석을 남겨두면 유지보수 측면에서 읽기에 더 나은 부분이 있지 않을까 정도 생각해 보았습니다.서비스 계층에서 인터페이스와 구현을 나누는 것과 하나의 서비스 클래스에 구현하는 것 중에 대부분의 경우 어떤 것을 더 권장하시는지 궁금합니다. 감사합니다!
-
미해결스프링 핵심 원리 - 기본편
xml 관련 질문 드립니다.
[질문 내용]처음 스프링을 배울 때 spring legacy 프로젝트로 배웠습니다. 따라서 root-context.xml, servlet-context.xml 방식으로 배웠습니다. 이전에 질문 드렸을때, "SpringApplication.run() 메서드는 기본적으로 @SpringBootApplication이 위치한 패키지와 하위 패키지를 시작점으로 모든 클래스를 스캔합니다 따라서 @Configuration, @Component, @Service, @Repository 등의 애노테이션이 있는 클래스를 찾아서 스프링 애플리케이션의 컨텍스트를 생성하는데 사용합니다." 라고 답변을 받았습니다. 하지만 legacy 프로젝트를 실행할때에는 @SpringBootApplication을 따로 적지 않았는데, 어떻게 해당 xml(root, servlet)에서 bean을 읽어오는지 의문이 듭니다. 추가로 xml로 작성하였을때도 SpringApplication.run() 메서드가 자동으로 읽는지도 문의드립니다.
-
해결됨자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
미로찾기 문제에 VISIT의 쓰임
이해하는데 시간이 좀 걸려서, 다른 분들도 고민하실까봐 글 남겨요 public static int VISIT = 2;미로찾기 문제에서 나오는 상수 VISIT 의 쓰임새는탐색한 모든 위치를 VISIT 주는 것이 아니라,정답의 길만 VISIT을 주고있어요 따라서 그 위쪽 로직에서newPosition.direction = direction +1;을 주는 겁니다. NOTVISIT 이여도 이미 갔던 path를 다시 안가기 위해서요
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
선생님 저는 왜 여기서 오류가 발생하는걸까요?
섹션6 객체지향 핵심 복습 문제 풀이 중에서 새로운 클래스를 만들 때 선생님이 하시는 것처럼 똑같이 따라했는데 이렇게 오류가 뜹니다... he method getNestCall() of type RoundRobin must override or implement a supertype methodRemove '@override' annotation이런 내용이 함께 뜨네요 그런데 implements Scheduler 부분을 제가 직접 입력하고 오버라이드 추가 하겠다고 클릭하면 이렇게 오류가 안떠요!
-
미해결스프링 핵심 원리 - 기본편
MemberServiceTest에서 MembeService를 AppConfig에서 꺼내기 애매한 이유
24:18 쯤 MemberServiceTest.java 코드 작성 중에MembeService를 AppConfig에서 꺼내기 애매하다고 하셨는데 그 이유가 궁금합니다!@BeforeEach로 각 테스트마다 AppConfig에서 MembeService를 생성해주는게 왜 좋은지 질문드립니다!
-
미해결스프링 핵심 원리 - 기본편
asserThat이 되지 않습니다.
================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]게시판에서 assertThat 관련 질문 나온 것들 다 봤는데도 assertThat이 되지 않습니다.build.gradle에 testImplementation 'org.assertj:assertj-core:3.11.1' 이것도 추가해봤지만 되질 않습니다..alt+enter를 치면 사진처럼 math어쩌구 저거만 뜹니다. 어떻게 해야할까요?
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
화질
720p보다 더 고해상도로는 못 보는 건가요? 눈이 너무 아파요 ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
NoUniqueBeanDefinitionException 예외를 처리했는데도 발생하는 이유
안녕하세요. 스프링 빈 조회 - 동일한 타입이 둘 이상부분을 듣고있는데, 궁금한 점이 생겨서요 ! AnnotationConfigApplicationContext package hello.core.beanfind; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.NoUniqueBeanDefinitionException; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import static org.junit.jupiter.api.Assertions.*; public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); @Test @DisplayName("부모 타입으로 조회시 자식이 둘 이상 있으면, 중복 오류가 발생한다") void findBeanByParentTypeDuplicate() { DiscountPolicy bean = ac.getBean(DiscountPolicy.class); assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(DiscountPolicy.class)); } @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } } } 위 코드의 findBeanByParentTypeDuplicate 테스트를 실행했을 때, 자식이 둘 이상이고, DiscountPolicy bean = ac.getBean(DiscountPolicy.class); 부분이 있어서 오류가 발생하는 것은 이해했습니다! 그런데, assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(DiscountPolicy.class)); 이렇게예외를 처리하는 구문이 있는데도, 왜 테스트가 pass 되지 않는 것인지 궁금합니다 !! 에러를 왜 못잡아낼까요 ??
-
미해결스프링 핵심 원리 - 기본편
스프링 컨테이너 관련 질문 드립니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]커뮤니티 내 질문을 읽다가 의문이 들어서 질문드립니다.ApplicationContext를 굳이 만들지 않아도 main 메서드 내 SpringApplication.run() 메서드 내부에서 컨테이너를 생성한다고 답변 주신걸 보았습니다.하지만 ApplicationContext를 만들 때 AppConfig.class로 커스텀한 config파일을 지정하는 걸로 보이는데, SpringApplication.run() 메서드는 따로 클래스를 지정 하지 않아도 @Configuration 애노테이션이 있는 모든 클래스를 스캔하는건가요?
-
미해결스프링 핵심 원리 - 기본편
18:00 AppConfig 오류 관련 질문
18:00 정도에 basicScan() 테스트를 실행하면서 AppConfig 클래스의 OrderServiceImpl의 생성자 관련 오류가 발생한 이유가 궁금합니다. basicScan()에서 ac 를 만드는 과정에 인자로 들어간 것은 AutoAppConfig.class인데 왜 AppConfig 클래스에서 오류가 발생하나요?
-
미해결스프링 핵심 원리 - 기본편
beanDefinition cannot resolve symbol 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 해당 강의 부분 코드를 실습 하던 중 beanDefinition 부분에 빨간 줄이 뜨고 cannot resolve symbol 이라고 에러가 뜹니다. 빌드하면 다음과 같은 에러가 뜨는데 어떻게 해야할까요?다른 질문들과 구글링을 통해 Build 에서 rebuild 하기File 에서 cache 삭제하고 다시 시작하기 방법은 해봤는데해결되지 않았습니다,,* Where:Build file 'C:\Users\User\OneDrive\���� ȭ��\spring-study\core\build.gradle' line: 3* What went wrong:Plugin [id: 'org.springframework.boot', version: '2. 7.11'] was not found in any of the following sources:- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)- Plugin Repositories (could not resolve plugin artifact 'org.springframework.boot:org.springframework.boot.gradle.plugin:2. 7.11') Searched in the following repositories: Gradle Central Plugin Repository* Try:> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
람다식 질문 있습니다!
선생님 안녕하세요!스트림 강의를 듣다가 람다식 부분이 이해가 되지 않아 질문 드립니다!아래 3 번째 줄, .filter(x -> x>=90) 부분이 이해가 잘 되지 않는데요.int[] scores = {100, 95, 90, 85, 80}; Arrays.stream(scores) .filter(x -> x>= 90) .forEach(x -> System.out.println(x)); // 100, 95, 90 화살표 왼쪽 X 는, scores 변수 값들을 의미 하는 걸까요?화살표 오른쪽 X 는, return x >= 90 과 같다고 이해하면 될까요?그러면 return 된 값은 어디로 저장이 되는 걸까요? 흑흑. 람다식 너무 어렵습니다 😢
-
미해결스프링 핵심 원리 - 기본편
UnsatisfiredDependencyException, NoUniqueBeanDefinitionException
강의에 나온 테스트를 그대로 따라 진행하였는데, AutoAppConfigTest는 통과가 되었는데,CoreApplicationTests에서 에러가 두개가 나옵니다. Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [/Users/aiden/Desktop/CP/study/core/out/production/classes/hello/core/member/MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,MemberRepositoryCaused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,MemberRepository 둘 에러 전부 memoryMemberRepository 와 MemberRepository와 관련있어보이는데 어떻게 해야할까요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
질문드립니다
이전 제네릭스 강의에서 int[ ] iArray 는 Integer[ ] iArray로 wrapper해야 printAnyArray(iArray)로 호출이 가능하다고 하셨는데 이번 강의에서 orderCoffee(35); 호출시에는 이런 wrapper 과정이 없이 기본자료형인 int 숫자가 들어갈 수 있는 이유가 궁금합니다.이와 비슷한 다른 질문을 보고 개인적으로 유추해봤을땐 제네릭메소드 호출시 숫자를 Integer로 자동으로 래핑되서 가능한 것 같은데 그러면 iArray를 호출시에는 왜 알아서 wrapper가 안되서 오류가 뜬 건지 질문드립니다.
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
강의노트 어디서 보나요
강의노트 문서는 어디서 봐야하나요
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
Alt + Enter를 써도 Import class가 뜨지않아요
User자체를 인식을 못하는거같긴해요왜 Import class가 안뜨는건가요??
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
제네릭스 클래스 질문
제네릭스 클래스 (연장 전반전)강의 5:51 부분과 관련해서 궁금한 점이 있어 문의를 드립니다.CoffeeByUser<User> c7 = new CoffeeByUser<>(new User("강호동"));1번 질문.위의 줄에서 CoffeeByUser<>에 다이아몬드 안에 User를 넣은 이유가CoffeeByUser 클래스 User를 상속받고 있기 때문인 걸까요? 아니면 User class 형태로 값을 받기 때문인 걸까요? 왜 <> 안에 User가 들어가는지 잘 모르겠습니다.2번 질문.CoffeeByUser<User> c7 = new CoffeeByUser<>(new User("강호동"));에서 new CoffeeByUser<> 뒤에 (new User("강호동");이라고 작성되어 있습니다. CoffeeByUser<User> c7 = new Coffee<>("강호동");이 아니라 <> 뒤에 (new User("강호동");을 붙여준 이유가 CoffeeByUser가 User를 상속받고 있기 때문에 붙이는 걸까요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
morningCoffe == true
morningCoffee.equal(true)는 안되는건가요??애초에 true는 값이 아닌건가요?equal이라는것이 값을 비교해준다고 하셨었는데 true는 값이 아니니까 오류가 발생 하는건가? 평소였으면 당연시하고 넘어가는건데 갑자기 의문이 드네요..
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
인텔리제이 단축키 모음 파일같은건 없나요?
있으심 제공좀 부탁드려요
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
안녕하세요 퀴즈6질문 입니다..!
학원 , 인강, 여러군데 2주정도 떠돌다가 무료강의 다보고 이해가 다른곳 보다 더 잘되는거 같아 결제했습니다. 먼저 좋은강의 감사해요..질문은 일단 힌트가 있는지 모르고 멋대로 풀다보니 엉망인거 같지만 답이 나오긴했습니다...풀이를 보고 나서야 완전히 다르다는걸 알았지만요...for문 이해도가 낮아서 for문을 생각을 못한거 같네요이렇게 하면 안되는 거겠죠...?뭔가 제가 하드코딩을 하고 있는 걸까요..