묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
질문합니다.
안녕하세요.섹션7 의존관계 자동 주입 2번째 파트 옵션 처리 초반 에러코드 수정중에 아래와 같이 해결이 안되고 있습니다. package hello.core.member; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository; @Autowired //ac.getBean(MemberRepository.class) 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); } //테스트 용도 @Override public MemberRepository getMemberRepository() { return memberRepository; } } Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [/Users/kssk3-/Desktop/study/core/out/production/classes/hello/core/member/MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepositoryat org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:802)at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:241)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1193)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:946)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:616)at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753)at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455)at org.springframework.boot.SpringApplication.run(SpringApplication.java:323)at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137)at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1442)at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:552)at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137)at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108)at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225)at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152)... 17 moreCaused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepositoryat org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:218)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1418)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1348)at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:911)at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789)... 41 more
-
미해결스프링 핵심 원리 - 기본편
컴포넌트스캔사용에 대해서
탐색 위치와 기본 스캔 대상에 대해서 강의를 듣다고 궁금한게 생겨서 글을 남겼습니다SpringBootApplication이 @ComponentScan을 가지고 있고 저희가 사용할려는 Config도 같은 위치에 있으면 굳이 @ComponentScan을 달아주지않아도 컴포넌트스캔은 동작하지않는거랑 만약에 같은 레벨의 위치에서 두개가 있다면 충돌이 발생할 것같은데 테스트 코드에서는 문제가없었습니다 혹시 그이유는 new AnnotationConfigApplicationContext(AutoAppConfig.class);위의 코드처럼 AutoAppConfig.class라고 지정해서 일까요?? 그러면 이경우에는 CoreApplication은 사용되지않고 AutoAppConfig만 사용해서 동작하는 걸까요?
-
해결됨김영한의 실전 자바 - 기본편
상속에서 생성자는 오버라이딩이 안됨
상속강의에서 생성자는 오버라이딩이 안된다고 하셨는데 그 이유를 알수있을까요?제 생각으로는 오버라이딩은 부모-자식관계에서 부모가 가지고있는 클래스의 정보(필드,메서드)를 넘겨주는거라면 생성자는 객체를 생성하는것이기 때문에 부모의 객체정보인 참조값을 자식에게 넘겨준다고 생각하면 말이안된다고 생각합니다. 이게 아니라면 다른이유가 있을까요?
-
해결됨스프링 핵심 원리 - 기본편
컴포넌트 관련 질문있습니다.
기존 스프링 빈 방식으로 등록을 하면 등록해야 할 스프링 빈이 수십,수백개가 되어 일일이 등록하기가 귀찮고, 설정 정보도 커지고 누락하는 문제가 발생하여 컴포넌트 방식을 사용한다고 배웠습니다. 그런데 컴포넌트 방식도 사용하려고 하면 @Component와 의존 관계 주입인 @Autowired를 넣어줘야 하는데, 동일한 문제가 발생하는게 아닌지 궁금합니다. 2.excludeFilters로 @Configuration 어노테이션이 붙은 클래스를 제거해주고 있는데, 앞서 정의했던 AppConfig 때문인가요? 만약 AppConfig가 없다고 가정하면 excludeFilters를 굳이 삽입하지 않아도 되는지 궁금합니다.@Autowired 과정이 getBean(MemberRepository.class)와 동일하다고 하는데, 이해가 가지 않습니다. 필터 부분 코드가 전체적으로 이해가 가지 않습니다.package hello.core.scan.filter; import java.lang.annotation.*; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyIncludeComponent { }여기서 target,retention,documented가 어떤 역할을 하는건가요?package hello.core.scan.filter; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.context.annotation.ComponentScan.Filter; public class ComponentFilterAppConfigTest { @Test void filterScan() { ApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class); BeanA beanA = ac.getBean("beanA", BeanA.class); assertThat(beanA).isNotNull(); Assertions.assertThrows( NoSuchBeanDefinitionException.class, () -> ac.getBean("beanB", BeanB.class)); } @Configuration @ComponentScan( includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class), excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class) ) static class ComponentFilterAppConfig { } } 여기서도 beanA가 왜 추가되고, beanB가 왜 포함되지 않는지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
테스트 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\kyoun\OneDrive\바탕 화면\개발\core\out\production\classes\hello\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:802) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:241) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1193) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:946) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:616) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:93) at hello.core.scan.AutoAppConfigTest.basicScan(AutoAppConfigTest.java:14) at java.base/java.lang.reflect.Method.invoke(Method.java:578) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1878) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1404) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1348) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:911) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789) ... 17 moreProcess finished with exit code -1이렇게 오류가 뜨는데 뭐가 문제일까요?
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
조건문 문제와 풀이2 첫 번째 문제
이렇게 작성하면 틀린 코드 인가요?
-
미해결스프링 핵심 원리 - 기본편
섹션 9 정리한거 맞는지 확인 해주세요 !!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. request 스코프 빈의 포록시 기반 동작 원리에 대해서 강의도 듣고, 따로 찾아봐서 정리했는데 맞는지 봐주세요. !! 스프링 컨테이너가 초기화될 때, ScopedProxyMode.TARGET_CLASS 설정을 사용하면, 스프링은 원본 클래스를 상속받는 프록시 클래스의 인스턴스를 생성한다. 이 프록시 클래스는 원본 클래스의 모든 메서드를 오버라이드하고, 오버라이드된 각 메서드에는 실제 원본 빈의 메서드를 호출하는 위임 로직이 포함되어 있다. 생성된 프록시 객체는 스프링 빈으로 스프링 컨테이너에 등록되고, HTTP 요청이 있을 때, 클라이언트가 프록시 객체의 메서드를 호출하면, 메서드 내의 위임 로직이 활성화되어 실제 해당 HTTP 요청에 맞는 원본 빈의 해당 메서드를 (찾아) 실행한다. 만약, 해당 HTTP 요청에 맞는 실제 원본 빈이 스프링 컨테이너에 없으면, 위임 로직은 새로운 원본 빈 인스턴스를 생성하여 스프링 컨테이너에 등록한 후, 그 인스턴스의 메서드를 실행한다.맞나욤.. ㅎㅎ
-
미해결김영한의 실전 자바 - 기본편
오버라이딩 된 메서드는 항상 우선권을 가진다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요.해당 부분들을 공부하면서 제 자신의 정리가 확실하지 않아서 여쭤보고 싶습니다.오버라이딩 된 Child.method()가 아닌 Parent.method()를 받으려면super와 부모클래스의 업캐스팅을 통하여 해결하면 되다고 이해하면 될지 여쭤봅니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
모르는 것을 배움에 있어 공부 방법이 궁금합니다.
안녕하세요 강사님 해당 강의를 모두 수강 후 객체지향 강의 듣기 전 다시 한번 복습을 하고 있는데 while 문 1 + 2 + 310 + 11 + 12이런 기본적인 문제도 이해가 되지 않아 while 문을 작성하는데 너무 많은 시간이 소유 됩니다..ㅠ 지금 상황에서 while문 강의등 기본 자바 강의의 모든 예제를 쉽게 풀 떄 까지 복습 후 다음 객체 지향을 수업을 들어야 할지 , 기본 구조만 이해하고 다음 강의를 들어도 될지 궁금합니다 정말 불안한 것은 내년 1월에 2개의 강의가 나오는데 이와 비슷하게 뒤로 갈 수록 객체지향 및 부족한 것들은 분명히 자꾸 누적일 될 것이고 다시 기본 자바 부터 듣어야 하나..? 언제 진도를 나가지..? 라는 생각이 들거 같습니다 ㅠ
-
미해결김영한의 실전 자바 - 기본편
다운캐스팅 질문
안녕하세요 <다형성과 캐스팅>을 듣다 질문이 생겨서 남겼습니다. package poly.basic; public class CastingMain1 { public static void main(String[] args) { //부모 변수가 자식 인스턴스 참조(다형적 참조) Parent poly = new Child(); //x001 //단 자식의 기능은 호출할 수 없다 //poly.childMethod(); //다운캐스팅(부모 타입 -> 자식 타입) Child child = (Child)poly; //x001 child.childMethod(); } } <참고로 캐스팅을 한다고 해서 Parent poly의 타입이 변하는 것은 아니다. 해당 참조값을 꺼내고 꺼낸 참조값이 Child 타입이 되는 것이다. 따라서 poly의 타입은 Parent로 기존과 같이 유지된다>이 부분을 해당 참조값(x001)을 꺼내고 꺼낸 참조값을 사용해 인스턴스 안에서 실행할 타입을(Parent -> Child) "나는 Child 클래스부터 시작해서 기능을 찾을거야~" 라고 컴파일러에게 알려준다. 따라서 poly의 타입은 Parent로 기존과 같이 유지된다. 이렇게 이해하면 될까요? "꺼낸 참조값이 Child 타입이 되는 것이다." 여기 해석이 조금 어렵습니다 !...
-
미해결김영한의 실전 자바 - 기본편
중급 고급편 언제쯤 오픈될까요?
영한님 안녕하세요!좋은 강의 올려주셔서 감사합니다 🙂 빨리 중급편도 수강하고 싶은데, 혹시 중 - 고급은 언제쯤 오픈 예정이실까요?
-
해결됨김영한의 실전 자바 - 기본편
기본형과 참조형 문제풀이 그리고 문제해결에 대한 질문,,
안녕하세요 강사님 항상 좋은 강의 감사드립니다.기본형과 참조형 문제와 풀이 첫 번째 부분에서 부분적으로 이해되는 부분이 있었고 이해가 안되는 부분이 있었습니다. 그리고 완성된 코드를 보고 나름대로 분석을 해보았습니다.분석을 하면서 배웠던 내용에 대한 회상이 있었습니다.분석에 대한 오류나 이런 부분에 있어서 틀린 부분이 있는지 여쭤보고 싶습니다..그리고 배웠던 내용을 기반으로 응용된 문제나 기능을 직접 코드로 작성해보고 싶은데 "이러이러한 기능을 써야지" "배열을 통해서 응용해야지" 이런 문제 해결에 대한 부분은 어떻게하면 조금 더 효율적인 설계를 할 수 있는지 여쭤보고 싶습니다.
-
미해결스프링 핵심 원리 - 기본편
빈 소멸
public class SingletonTest { @Test void singletonBeanFind(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); SingletonBean singletonBean1 = ac.getBean(SingletonBean.class); SingletonBean singletonBean2 = ac.getBean(SingletonBean.class); System.out.println("singletonBean1 = " + singletonBean1); System.out.println("singletonBean2 = " + singletonBean2); ac.close(); System.out.println("singletonBean2 = " + singletonBean2); } @Scope("singleton") static class SingletonBean { @PostConstruct public void init(){ System.out.println("singletonBean.init"); } @PreDestroy public void desrtoy(){ System.out.println("singletonBean.desrtoy"); } } } 스프링 컨테이너가 close() 메서드로 종료될 시점에 컨테이너는 빈 객체의 소멸을 처리한다라고 알고있습니다. 그런데 close() 이후에 singletonBean의 참조변수를 출력해보면 null이 아니라 빈의 참조값이 출력되는 이유가 먼가요? 제가 잘못 알고있는 부분이 궁금합니다아래는 Test 결과 입니다singletonBean.initsingletonBean1 = hello.core.scope.SingletonTest$SingletonBean@530712dsingletonBean2 = hello.core.scope.SingletonTest$SingletonBean@530712dsingletonBean.desrtoysingletonBean2 = hello.core.scope.SingletonTest$SingletonBean@530712d
-
미해결김영한의 실전 자바 - 기본편
다운캐스팅 관련 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]//부모 변수가 자식 인스턴스 참조(다형적 참조) Parent poly = new Child(); Child child = (Child) poly; child.ChildMethod(); child.parentMethod(); //호출 가능다운캐스팅으로 부모 타입의 poly를 자식타입으로 변경하여자식 클래스의 childMethod를 호출 가능하였습니다. 그런데 바로 child.parentMethod도 호출이 가능하던데다운캐스팅, 업캐스팅 시 부모, 자식의 기능을 모두 불러올 수 있는 것인가요? 부모와 자식의 기능을 모두 호출 가능한 이유가 무엇인지 이해가 되지 않습니다.
-
미해결김영한의 실전 자바 - 기본편
Student 클래스 타입 크기 질문
Student 객체의 참조값을 담는 Student 클래스 타입의 크기는 어느정도인가요? (ex. int는 4byte double은 8byte인 것처럼)
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
no frameworks detected
no frameworks detected 의 문구가 뜹니다 . 아래와 같이 선택할 수 있는 창이 뜨지않습니다. 위를 무시하고 create를 누르면 아래와 같이 나옵니다 ㅜㅜ
-
해결됨김영한의 실전 자바 - 기본편
인스턴스 타입을 부모로해도 자식의 오버라이드 메서드가 호출되나요?
안녕하세요! ElectricCar electricCar = new ElectricCar(); electricCar.move();이렇게 하면 호출한 electricCar의 타입은 ElectiricCar라서 인스턴스 내부의 ElectricCar 타입에서 시작한다고 하셨습니다.그래서 electricCar.move();를 실행하면 ElectricCar 의 move() 메서드가 실행돼서전기차를 빠르게 이동합니다.이렇게 전기차로 출력이 됩니다.Car electricCar = new ElectricCar(); electricCar.move();그럼 이렇게 타입이 Car타입이면 인스턴스 내부의 Car타입에서 move()메서드를 실행시켜 "차를 이동합니다."가 출력될 것이라고 생각했는데 전기차를 빠르게 이동합니다.여기서도 전기차를 빠르게 이동합니다.가 출력됩니다.어째서 Car타입에서 move()메서드를 실행하지 않고 ElectricCar의 move()메서드를 실행하게 되는건가요?감사합니다!!😊
-
해결됨김영한의 실전 자바 - 기본편
자바 추후 중급 고급 영상 문의
안녕하세요 영한님! 실전 자바 기본편 잘 보고 있습니다.혹시 추후에 자바 중급 고급편에 가변객체 불변객체 사용이유(스레드와 연관되면서..)와 리플렉션(스프링과 연결되면서...)이 혹시 나오는지 궁금합니다
-
미해결스프링 핵심 원리 - 기본편
ObjectProvider 사용하는 대신에 prototype 객체가 singleton 객체를 주입 받으면 안되나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. "프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결" 강의를 보던 도중에 궁금한 것이 있어 질문을 남깁니다.강의에서 singleton object가 prototype object를 주입받을 때 생길 수 있는 문제를 이야기 하면서 해결방법을 알려줍니다. ObjectProvider를 이용해서 prototype object를 singleton object method 내부에서 매번 생성하는 방법으로 말이죠. 그런데 이 방법도 제가 보기에는 조금 복잡해 보입니다.singleton object가 prototype object에 의존하는 방식을 역전하면 더 간단해지지 않을까요? 반대로 prototype object가 singleton object에 의존한다면 provider를 사용할 필요가 없어집니다. 클라이언트가 직접 prototype object를 destroy 하면 되지요.이에 대해 어떻게 생각하시나요? provider와 비교했을 때 장단점을 알 수 있을까요?
-
해결됨스프링 핵심 원리 - 기본편
myLoggerProvider.getObject() 메서드시 동시성관련 질문있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]클라이언트1,2,3,4,5이 동시에요청했을때myLoggerProvider.getObject()실행해서 my Logger 객체를 받아올때 (컨트롤러or서비스)request요청이 여러개니까 myLogger객체는 이때 여러개인데...똑같은 객체가 계속 반환되는걸 보장해주는 이유가 있나요? @PostConstruct public void init(){ uuid = UUID.randomUUID().toString(); System.out.println("[" + uuid + "]" + "request scope bean create: "+this); }거의 동시에 요청이왔다고 가정했을때init해서 각 request스코프객체에 UUID각각설정후getObject()를 각자 두번씩해서 myLogger를 얻게되는데이때 myLogger타입 객체는 여러개가있을수있고이걸 init했을때-처음getObject()-두번쨰getObject-close이런순서로 진행될때처음 init할떄랑 close할때는 객체주소가 같은건 당연하지만그사이에 getObject()했을때 객체가 바뀔우려가 있는건 아닌지 생각이듭니다 @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) throws InterruptedException { MyLogger myLogger = myLoggerObjectProvider.getObject(); <================여기 String requestURL = request.getRequestURL().toString(); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); logDemoService.logic("testId"); return "OK"; } public class LogDemoService { private final ObjectProvider<MyLogger> myLoggerObjectProvider; public void logic(String id) { MyLogger myLogger = myLoggerObjectProvider.getObject();<==========여기 myLogger.log("service id = "+ id); }