묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
구글 드라이브 링크 올립니다 !!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]https://www.inflearn.com/questions/754068/junit-not-found-%EC%97%90%EB%9F%AC?re_comment_id=236576위 링크의 질문에 대한 아래 링크입니다 .!! https://drive.google.com/file/d/1tz3wamqddAz_yTDk7krX2Q1dYps8w1se/view?usp=sharing
-
해결됨스프링 핵심 원리 - 기본편
AppConfig 리팩터링 관련 질문
강의를 듣던중 궁금한 것이 생겨서 질문합니다.AppConfig를 리팩터링하는 과정에서 아래와 같은 과정을 보았는데요.1. new MemoryMemberRepository() 2. private MemberRepository memberRepository() { return new MemoryMemberRepository(); } 1에서 2로 변환하는 과정에서 2번의 리턴값의 타입을 MemoryMemberRepository(구현 클래스)가 아닌 MemberRepository(인터페이스)로 해주어야한다고 하셨는데요. 사실 지금 이 상황에서는 구현 클래스로 지정해주어도 프로그램이 돌아가는데는 문제가 없을 것 같은데, 인터페이스로 지정한 이유는 추후에 MemberRepository의 구현 클래스를 변경할 여지가 있기 때문인가요?
-
해결됨스프링 핵심 원리 - 기본편
@Configuration과 싱글톤 memberRepository1,2 다른값
memberRepository1,2 다른값으로 나와가지고 다른 질문글에 답해주신 것처럼AppConfig에서@Bean public static MemberRepository memberRepository() { return new MemoryMemberRepository(); }static을 빼서 해결은 했는데 static붙고 안붙고 어떤차이 때문에 결과가 다르게 나오는건지 이해가 안돼서 질문드립니다!
-
미해결스프링 핵심 원리 - 기본편
SingletonService 호출 관련 질문
안녕하세요. 강의 너무 잘 듣고 있습니다.싱글톤 패턴을 사용하는 테스트 코드에서SingletonService.getInstance(); 로 SingletonService 객체를 받는데 그 전에 private static final SingletonServiceinstance = new SingletonService(); 가 호출되고 그 다음getInstance()가 호출되어야 이 객체를 받을 수 있는 것아닌가요??private static final SingletonServiceinstance = new SingletonService(); 이 부분은 언제 호출되어서 정상적으로 객체가 반환되는지 알고 싶습니다..!
-
해결됨스프링 핵심 원리 - 기본편
isSameAs 와 isEqualTo ( @Configuration과 싱글톤 강의)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.<@Configuration과 싱글톤> 강의 9분 50초 부분 듣다가 궁금한데요.isSameAs( ) 의 경우 reference로 메모리상 같은 객체를 가리키고 있는지 비교하는 것이고 isEqualTo() 의 경우 value로 객체가 같은 값을 가지고 있는지 비교하는거라고 봤는데지금 강의 부분에서는 memberRepository1, memberRepository2, memberRepository셋 다 모두 같은 주소값(엄밀히 말해서 주소값은 아니지만요 편의상 주소값이라 할게요) 을 가지고 있고, 같은 객체를 가리키고 있는거죠?그렇다면 어차피 주소값이 같다면 같은 객체인거니까검증할 때 꼭 isSameAs()가 아닌 isEqualTo() 를 사용해도 상관이 없는건가요?
-
해결됨스프링 핵심 원리 - 기본편
코드 질문
package hello.core.member; public interface MemberService { void join(Member member); Member findMember(Long memberId); }package hello.core.member; public interface MemberRepository { void save(Member member); Member findById(Long memberId); }에서 findMember, findById객체를 왜 Member타입으로 설정하는 건가요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
void의 정확한 의미를 모르겠어요
안녕하세요 챕터 6 부분을 공부하고 있는데 void를 쓰는 경우와 안쓰는 경우의 차이가 잘 와닫지 않습니다. 리턴값이 없으면 void를 쓰고, 리턴값이 있으면 void를 안쓴다고 알고 있는데 리턴값부터 이해가 잘 가지 않네요!예를 들어서// 호텔 주소 public static String getAdress() { return "서울시 어딘가"; }과셋째 줄에 sout "서울시 어딘가" 를 쓰는 것은 무엇이 다른건지요?감사합니다 :)
-
미해결스프링 핵심 원리 - 기본편
Provider 에러관련해서 질문있어요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]implementation 'javax.inject:javax.inject:1' 추가 후 리로드 해줬는데도 하기와 같은 에러가 발생해서요..org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'singletonWithPrototypeTest1.ClientBean': Unsatisfied dependency expressed through field 'prototypeBeanProvider': No qualifying bean of type 'javax.inject.Provider<hello.core.scope.SingletonWithPrototypeTest1$PrototypeBean>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}강의를 똑같이 따라 했는데 왜 이런 에러가 발생하는지 혹시 알 수 있을까요?
-
미해결스프링 핵심 원리 - 기본편
@Configuration 유무 질문
안녕하세요, @Bean이 있더라도,@Configuration이 있어야만, 싱글톤이 보장된다(프록시,,,)고 알고 있습니다... 그러나 강의 중에 보면 Class TestConfig에 @Configuration이 없어도 싱글톤 처럼 작동을 하네요,,(statefulService1 = hello.core.singleton.StatefulService@d78795statefulService2 = hello.core.singleton.StatefulService@d78795) 해당 부분은 왜 그런지 자세한 설명 요청드립니다... public class StatefulServiceTest { @Test void statefulServiceSingleton() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); StatefulService statefulService1 = ac.getBean("statefulService", StatefulService.class); StatefulService statefulService2 = ac.getBean("statefulService", StatefulService.class); System.out.println("statefulService1 = " + statefulService1); System.out.println("statefulService2 = " + statefulService2); //ThreadA: A사용자 10000원 주문 statefulService1.order("userA", 10000); //ThreadB: B사용자 20000원 주문 statefulService2.order("userB", 20000); //ThreadA: 사용자A 주문 금액 조회 int price = statefulService1.getPrice(); //ThreadA: 사용자A는 10000원을 기대했지만, 기대와 다르게 20000원 출력 System.out.println("price = " + price); Assertions.assertThat(statefulService1.getPrice()).isEqualTo(20000); } // @Configuration static class TestConfig { @Bean public StatefulService statefulService() { return new StatefulService(); } } }
-
미해결스프링 핵심 원리 - 기본편
@beforeEach 사용하는 이유가 궁금합니다.
@beforeEach 를 사용하면 모든 테스트는 자신이 실행되기 전에 이 작업을 수행한다 라고 되어있는데 MemberServiceTest 부분에서 @beforeEach를 안쓰고MemberService memberService; AppConfig appConfig = new AppConfig(); memberService = appConfig.memberService();위와같이 쓰니 오류(Unknown class: 'memberService')가 났습니다.MemberService memberService; @BeforeEach public void beforeEach(){ AppConfig appConfig = new AppConfig(); memberService = appConfig.memberService(); }위의 코드처럼 @BeforeEach 사용해야 appConfig와 memberService를 정의 할 수 있는 이유가 궁금하며 @BeforeEach가 없으면 왜 오류가 나는지 궁금합니다.답변주시면 정말 감사하겠습니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Static boolean, Static void 호출
클래스에 static boolean canAutoReport = false; static void callServiceCenter() { System.out.println("서비스 센터(1588-0000)로 연결합니다."); }이렇게 선언해두었는데 b1.canAutoReport 나 b1.callServiceCenter()이 안됩니다. BlackBox.canAutoReport랑 BlackBox.callServiceCenter() 는 되는데 뭐가 문제일까요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
아!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
아!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!package c6; import java.util.Scanner; public class _01_methood { /**메소드*/ public static void methood(int old, boolean birsthay) { if (birsthay == true) { any_old = old - 1; } else { any_old = old - 2; } System.out.println("내 이름은 xx이, " + old + "살이다. \n 만나이는 " + any_old + "살이다."); } public static void main(String[] args) { methood(11, false); } }java: cannot find symbol symbol: variable any_old location: class c6._01_methood
-
미해결스프링 핵심 원리 - 기본편
MemberServiceTest 실행 시 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 테스트 코드 실행 시 다음과 같은 오류가 발생합니다. 구글링해봐도 이유를 잘 모르겠네요.Process finished with exit code -1073741819 (0xC0000005)
-
해결됨스프링 핵심 원리 - 기본편
new 연산자 질문입니다.
[질문 내용]여기에 질문 내용을 남겨주세요.private final MemberRepository memberRepository = new MemoryMemberRepository();이 코드의 의미가 궁급합니다.제 생각했는 데 이 코드는 "MemberRepository타입이며 MemoryMemberRepository 클래스의 객체인 memberRepository를 생성한다" 라는 의미이며그래서 다형성에의해 MemoryMemberRepository 에 있는 메소드를 사용할 수 있다. 라고 생각합니다.그럼 또 궁금한 게 만약 private final MemoryMemberRepository memberRepository = new MemoryMemberRepository();이렇게 쓰면 어떻게 되는 지 궁금합니다.답변 주시면 정말 감사하겠습니다.
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
이것이 왜 실행이 안되는지 여쭙고 싶네요.
void main() { Idol bts = const Idol.fromList([['제이홉','슈가'],'BTS']);}class Idol { final String name; final List<String> members; Idol(this.name, this.members); const Idol.fromList(List values) : this.members = values[0], this.name = values[1];}constructor를 const로 만들려고 하는데 잘 안되서요..이 코드는 왜 실행이 안되는건지 여쭤봐도 될까요..
-
해결됨스프링 핵심 원리 - 기본편
@Configuration과 싱글톤에서 memberRepository1, 2가 값이 달라요.
package hello.core.order; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.Member; import hello.core.member.MemberRepository; import hello.core.member.MemoryMemberRepository; public class OrderServiceImpl implements OrderService { // final 변수는 생성자를 통해 값이 반드시 할당 되어야 함 private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } // 테스트 용도 public MemberRepository getMemberRepository() { return memberRepository; } }package hello.core.member; public class MemberServiceImpl implements MemberService { // private final MemberRepository memberRepository = new MemoryMemberRepository(); private final MemberRepository memberRepository; public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Override public void join(Member member) { memberRepository.save(member); } @Override public Member findMember(Long memberId) { return memberRepository.findById(memberId); } // 테스트 용도 public MemberRepository getMemberRepository() { return memberRepository; } } [ConfigurationSingletonTest]package hello.core.singleton; import hello.core.AppConfig; import hello.core.member.MemberRepository; import hello.core.member.MemberServiceImpl; import hello.core.order.OrderServiceImpl; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; 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); } }클래스는 강의 내용 따라 작성했습니다. 그런데 테스트 결과가 아래와 같이 나옵니다.02:27:22.491 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@63355449 02:27:22.499 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor' 02:27:22.560 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor' 02:27:22.562 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory' 02:27:22.562 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor' 02:27:22.563 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor' 02:27:22.566 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appConfig' 02:27:22.569 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memberService' 02:27:22.572 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memberRepository' 02:27:22.572 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'orderService' 02:27:22.573 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'discountPolicy' memberService -> memberRepository = hello.core.member.MemoryMemberRepository@71e693fa orderService -> memberRepository = hello.core.member.MemoryMemberRepository@48793bef memberRepository = hello.core.member.MemoryMemberRepository@7d286fb6강의에서는 memberService와 orderService가 같은 값을 가리켜야한다고 하는데 다른 값이 나와서 오류를 찾고있습니다. 오류를 찾는게 쉽지 않아 질문 드립니다!
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
연산자 파트 질문
안녕하세요 연산자 첫 파트 강의를 듣고 있는데요밑에 (1) 식에서는 c를 30으로 한번 출력하고 다시 식을 줄 때c = a - b;로 바로 했는데(2)에서는 val = 10;을 다시 선언하고 한게 무슨 차이인지모르겠습니다.(2)에서 처음 val 이 11로 됐기 때문에 다시 val=10;으로 한거라면(1)에서도 c는 30이 됐으니까 다시 c를 0으로 해줘야 하는거 아닌지.. (1)int a = 20; int b = 10;int c;c = a + b;System.out.println(c); //30c = a - b;System.out.println(c); //10 (2)int val; val = 10; System.out.println(val); //10 System.out.println(++val); //11 System.out.println(val); //11 val = 10; System.out.println(val); System.out.println(val++); System.out.println(val);
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
초급강의를 수강할때 질문입니다.
초급강의를 수강할때는 꼭 flutter프로그램을 다운받아야 하나요? 감사합니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Switch Case가 헷갈립니다.
안녕하세요 강의 너무 잘 듣고 있습니다 ㅎㅎ switch case를 공부하다가 헷갈리는 것이 생겨서 여쭙니다.case 3부터 1까지 8000, 9000, 10000원이라고 하셨는데 작동원리를 잘 모르겠습니다. 코드 순서대로라면 1등급이 순서 상 첫번째 이기 때문에 7000 + 1000 해서 8000으로 시작해서, case 3이 마지막으로 10000원이 되야할것만 같은데 그렇지 않은 이유를 알려주세요...// 중고상품의 등급에 따른 가격 책정 (1급: 최상, 4급: 최하) int grade = 1; // 등급 int price = 7000; // 기본 가격 switch (grade) { case 1: price += 1000; case 2: price += 1000; case 3: price += 1000; break; } System.out.println(grade + "등급 제품의 가격: "+ price + "원"); } }
-
미해결자바 : 클래스의 이해와 객체지향 프로그래밍
인터페이스의 다중상속
안녕하세요!강의 잘 듣고 있습니다.추상 클래스와 인터페이스의 사용 구분을 조금 더 명확히 하고 싶어 구글링을 하다보니,클래스 상속에서 "다중 상속의 모호성" 때문에 자바에서 다중 상속을 막고 있다는 글을 보게 됐습니다.여기서 말하는 "다중 상속의 모호성"이란 아래와 같이 car, plane의 클래스에 모두 drive()메서드가 구현돼어 있을 경우 어떤 클래스의 drive를 호출할지 모호하다는 것 입니다.! class MyVehicle extends car, plane{ @OVerride public void goTo(){ super.drive(); }출처 : https://brunch.co.kr/@kd4/6 그러면 인터페이스를 다중 상속을 하게 되면, 이러한 문제는 해결이 되는지 궁굼합니다.. 아래와 같이 두개의 인터페이스가 존재할 때, interface car { void goTo(){} } interface plane{ void goTo() } class MyVehicle implements car, plane{ @OVerride public void goTo(){ }car과 plane을 상속 받을 경우 , car의 추상메서드인 goTo, plane의 추상메서드인 goTo둘다 구현을 해야할텐데, MyVehicle에서 goTo를 하나만 구현해도, 괜찮은건가요? 아니면 다른 방법이 있는지 궁굼합니다. 현재 인텔리제이로 코드를 쳐보니, 두개의 클래스 둘다 구현이 완료돼서 문제가 없는 것으로 나오는데, 이유가 무엇인가요? interface plane{ void goTo(); } interface car { void goTo(); } public class MyVehicle implements car, plane{ @Override public void goTo() { System.out.println("구현했따우"); } public static void main(String[] args) { MyVehicle my = new MyVehicle(); my.goTo(); } } 아래는 car, plane클래스 모두 goTo가 구현이 됐다고 표기되는 모습입니다. 감사합니다!