묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
오타인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]의존관계 자동 주입.pdf의 6페이지 맨 위에@Autowired(required = false) public void setNoBean3(Optional<Member> member) { System.out.println("setNoBean3 = " + member); }이렇게 되어 있는데 (required = false)는 오타인가 싶어서 말씀드립니다. 그리고 5페이지에@Autowired(required=false): 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안 됨 이 내용이 있는데, 수정자 메서드라고 적혀 있기는 하지만 일반 메서드 주입일 때도 마찬가지라고 생각하면 되는 거죠?수정자 메서드 주입 방식일 때 많이 쓰여서 그냥 수정자 메서드라고 적혀 있는 거라고 생각하긴 하는데 맞나요?
-
미해결김영한의 실전 자바 - 기본편
[변수의 초기화] 멤버 변수 자동 초기화하는 이유가 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의를 듣다 궁금점이 생겨 질문드립니다. 멤버 변수는 왜 지역 변수처럼 항상 직접 초기화를 하는게 아니라 왜 자동으로 초기화를 해주는지 이유가 궁금합니다
-
미해결스프링 핵심 원리 - 기본편
어플리케이션 빈 출력하기 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]4:52 부분부터 질문이 있습니다.일단 스프링 빈은 스프링 컨테이너에 등록된 객체를 말합니다. 이 말은 즉, 빈은 객체라고 할 수 있는 것 같습니다. BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);영한님께서 getBeanDefinition()메소드는 빈의 메타데이터를 가져오는 것이라고 설명해주셨습니다. 그렇기에 beanDefinition 에는 beanDefinitionName을 이름으로 가진 스프링 빈 객체의 메타 데이터가 저장되었다고 볼 수 있습니다. beanDefinition.getRole()==BeanDefinition.ROLE_APPLICATIONgetRole에 대한 설명으로 "스프링이 내부에서 사용하는 빈은 getRole() 로 구분할 수 있다."라고 나와있습니다.ROLE_APPLICATION에 대한 설명으로" ROLE_APPLICATION : 일반적으로 사용자가 정의한 빈" 라고 나와있습니다.그렇다면 BeanDefinition.ROLE_APPLICATION을 통해 사용자가 정의한 빈(=사용자가 정의한 객체)가 반환이 되었을 것이며 타입을 맞춰야 하기에 beanDefintion.getRole()을 통해서 beanDefinition의 객체가 반환 될 것입니다.하지만 둘다 반환값이 int로 설정이 되어있어서 객체반환이라면 OBJECT로 반환되어야 할텐데 뭔가 이상했습니다. getRole과 Role_APPLICATION에 대한 설명이 제가 이해를 잘못한것 같은데 제가 어디서부터 이해가 틀린건지 , getRole과 ROLE_APPLICATION에 대해 좀 더 자세한 설명 부탁드리겠습니다...!
-
미해결김영한의 실전 자바 - 기본편
[static 메서드3] 강의 보고 질문드립니다.
[static 메서드3] 강의 보고 질문드립니다.import static 으로 특정 클래스의 메서드 적용해서 메서드 사용하는 것과 클래스 .(dot) 찍고 메서드 사용하는 것 중실무에서는 어떻게 사용하는 편이 좋은지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
[섹션 7 - 옵션 처리] 전체 테스트 중 CoreApplicationTests 클래스의 contextLoads 테스트 실패 질문입니다.
안녕하세요.게시판을 둘러보니 비슷한 오류가 나시는 분들이 계신것 같은데 해결 되신 분이 없는 것 같아 질문드립니다.개발 환경Spring Boot : 3.2.0운영체제 : Mac OS XIDE : IntelliJ IDEA Ultimate 2023.2.5JDK : JDK 17빌드 툴 : Gradle 8.4문제강의를 따라가던 도중 전체 테스트를 진행하는 과정에서 CoreApplicationTests 클래스의 contextLoads 테스트가 NoUniqueBeanDefinitionException 오류를 발생시키며 실패합니다.org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository특이한점으로 GitHub에 올려놓은 코드를 내려받은 후 실행하면 테스트가 통과하고, 지금까지 했던 프로젝트를 실행하면 테스트가 실패합니다.테스트가 성공한 프로젝트도 아래처럼 컨텍스트를 주입받아 MemberRepository를 getBean으로 받아오는 테스트를 해보면 오류가 납니다.@SpringBootTest class CoreApplicationTests { @Autowired ApplicationContext ac; @Test void contextLoads() { MemberRepository bean = ac.getBean(MemberRepository.class); } }org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository로그를 살펴보면 아래와 같습니다.expected single matching bean but found 2: memoryMemberRepository,memberRepository컴포넌트 스캔으로 등록한 빈과, AppConfig를 통해 등록한 빈이 겹치는 것 같습니다.아래는 유추한 내용입니다.컴포넌트 스캔이름을 변경해서 확인해봤습니다.다시 테스트를 돌려보면 로그가 아래처럼 찍힙니다.expected single matching bean but found 2: 메모리멤버레포지토리,memberRepository@Bean이름을 변경해서 확인해봤습니다.테스트를 돌려보면 로그가 아래처럼 찍힙니다.expected single matching bean but found 2: 메모리멤버레포지토리,앱콘피그에있는메모리레포지토리컴포넌트 스캔을 이용하여 MemberRepository 빈을 등록했는데 AppConfig 에서 @Bean 어노테이션이 붙은 메서드의 반환 객체도 빈으로 중복 등록 되어 발생한 것으로 생각됩니다.의문점AutoAppConfig 에서 Configuration 어노테이션이 붙은 클래스는 스캔의 대상에서 제외를 했는데 왜 중복해서 등록이 된 것일까요?검증을 위해 스프링 부트 통합 테스트를 진행해보았더니 AppConfig 가 빈으로 등록되어 있습니다.@SpringBootTest class CoreApplicationTests { @Autowired ApplicationContext ac; @Test void contextLoads() { AppConfig bean = ac.getBean(AppConfig.class); System.out.println(bean); } }hello.core.AppConfig$$SpringCGLIB$$0@37df14d1AppConfig 클래스의 코드입니다.@Configuration public class AppConfig { @Bean public MemberService memberService() { System.out.println("Call - AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { System.out.println("Call - AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public OrderService orderService() { System.out.println("Call - AppConfig.orderService"); return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public DiscountPolicy discountPolicy() { // return new FixDiscountPolicy(); return new RateDiscountPolicy(); } }(+) 컴포넌트 스캔을 CoreApplication 으로 옮겨도 똑같이 오류가 발생합니다.추가 질문만약 위 의문이 해결되어 AppConfig 에서 생성한 객체들이 빈으로 등록되지 않고, 컴포넌트 스캔을 통하여 빈을 등록한다면 MemoryMemberRepository 는 memoryMemberRepository 이름으로 빈으로 등록됩니다. 그렇다면 MemberServiceImpl 에서는 memberRepository 를 주입받아야 하는데, 빈의 이름이 달라 주입이 불가능할 것 같습니다. 이 경우에는 @Component("memberReository") 로 수정해줘야 할까요? 감사합니다.
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
이종간 OS 클래스 문의
안녕하세요. 영한쌤.개발자 PC 윈도우에서 컴파일한 클래스가 유닉스에서 안돌아가는 경험을 한 적이 있는데 java1.5 PC 윈도우, java1.5 서버 유닉스최근 버전 자바에서는 class파일이 이종간 OS도 지원할까요? 아니면, 제환경이 문제가 있었을까요? 오래된 기억이라 동일한 자바 버전이었는지 기억이 안나네요.좋은 강의 정말 감사합니다.저도 해봐야겠네요 ^^
-
미해결스프링 핵심 원리 - 기본편
@autowire에 빨간줄이 뜨는데 원인을 모르겠네요.
프로토타입스코프 공부중인데요. prototypebeanprovicer쪽에 @Autowired시 빨간줄이 뜨고 에러메시지를 살피면 이렇게 나오는데 이유가 뭔지모르겠습니다.그리고 autowire제거해야되나싶어 제거시 테스트시 아예 에러가 나더라구요.(제거안할시는 잘작동해요!) 어떻게 해결해야될까요?
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
인텔리제이 run 실행
안녕하세요Run 실행 시, 현재 작업 중인 클래스가 실행되는게 아니라같은 패키지에 오류가 있는 다른 클래스 파일을 계속 실행하는데 이거 방법이 없을까요? 구글링해서 따라해봤는데도 효과가 없고 다른 에러코드만 뜹니다 ㅠㅠ
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
@param @return 같은 어노테이션을 활용하여 주석을 남기나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]주석 강의를 보다가 좀 앞서간 느낌이 있지만 궁금해서 남깁니다. 우아한 형제들 혹은 큰 회사들의 경우 소스 코드가 길기 때문에 주석은 필수 일거 같습니다. @param @return 같은 어노테이션을 사용하여 주석을 남기는지 아니면 따로 주석을 남기는 규칙? 같은게 존재하는지 궁금합니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
char 타입
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 영한님 안녕하세요! 자바강의를 출시해주셔서 감사합니다.다름아니라, 변수 타입 2 강의 5분 쯤에 char타입이 1byte 라고 되어있어서 2byte라고 알고있는데, 자바 버전 올라가면서 char 타의 스펙이 수정된 건가요..?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
이중 반복문
혹시 한줄로만 출력 되는데 처음 부분부터 문제가 뭘까요??
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
코딩테스트 질문
안녕하세요 강사님 지금 파이썬으로 코딩테스트를 준비하다가 아무래도 실무에선 자바를 많이사용하니 자바를 처음부터 하는 것이 어떤가 생각이 들어서 입문강의부터 들으려고하는ㄷ요코딩테스트를 준비하는데에 이 강의부터 시작해서 진행해도 되는지 질문드립니다. 그리고 추후 어떤강의를 쭈욱 봐야 합격할 수 있는지에 대해서도 말씀 부탁드려요감사합니다!
-
해결됨김영한의 실전 자바 - 기본편
객체(데이터성, 기능성) 관련해서 질문이 있습니다.
안녕하세요. 강사님!OOP 관련 강의나 책들을 보다가 설명하는 방식이 다 달라서 오히려 머릿속이 더 복잡해진거 같아서 질문드리게 되었습니다.여러 강의 또는 책에서 예를 들어 책임 주도 설계와 같은 곳에서는 객체는 외부에 제공하는 기능으로서 평가되어진다.그래서 객체는 외부에 제공하는 기능이 있고 그 기능 구현에 필요한 데이터를 가진다. 따라서 기능 기반으로 해서 각 객체를 디자인해야 된다! 이런식으로 이해를 하고 있었습니다.그런데 직접 설계를 진행하면 할 수록 결국 데이터 성격이 강한 구조체성 객체를 디자인해야 되더라구요! 기능 보다 데이터를 우선적으로 추출하는 방식으로요!또 추가적으로 영한님의 스프링 강의를 보면 오히려 데이터베이스 테이블 설계(Entity) 이후에 각 기능들을 적절히 도메인 모델(Entity)에 분배하는 형식으로 디자인을 하시더라구요. 저같은 경우 웹 개발을 진행할 때는 뭔가 정보를 표현해야 될 것들이 있다보니 테이블 설계를 우선시하고 기능 구현에 필요한 정보를 많이 알고있는 곳에 분배하는 식으로 하려고 노력하고 있긴한대 잘안되지만요...데이터를 우선 추출하고 거기에 별도의 기능을 추가하는 방식도 적절한 객체 설계 방식이라고 볼 수 있을까요?기능을 수행할 객체를 정하고 기능 구현에 필요한 데이터를 객체에 추가하는 방식과 데이터베이스 테이블 설계 이후에 정보 전문가 패턴을 따라서 각 기능을 분배하는 방식중에 어떤게 맞는건지 해당 2개의 개념은 다른 것을 설명하는 것인지 조언을 좀 부탁드리겠습니다!감사합니다.
-
미해결스프링 핵심 원리 - 기본편
Process finished with exit code 0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. Process finished with exit code 0 이 문장 안 나와도 상관 없나요? 감사합니다.
-
미해결Java TPC 실전프로젝트 (Java API 활용)
강의 들으면서 잘 안되는 부분이 있어서요~
moquitto 관련 부분 작동이 되는지 확인해봐주실수 있나요?WARNING: An illegal reflective access operation has occurredWARNING: Illegal reflective access by org.eclipse.paho.client.mqttv3.internal.FileLock (file:/C:/eGovFrame-4.0.0/maven/repository/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.5/org.eclipse.paho.client.mqttv3-1.2.5.jar) to method sun.nio.ch.FileLockImpl.release()WARNING: Please consider reporting this to the maintainers of org.eclipse.paho.client.mqttv3.internal.FileLockWARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operationsWARNING: All illegal access operations will be denied in a future releaseERR0[Ljava.lang.StackTraceElement;@6021afeb이런 에러가 뜨는데 왜그런지 모르겠네요... maven이 아니라 일반 자바프로젝트에서 jar파일로 해봐도 ERR0[Ljava.lang.StackTraceElement;@6021afeb 이 메세지가 계속 뜨네요
-
미해결스프링 핵심 원리 - 기본편
수정할 수 없는 외부 라이브러리의 초기화, 소멸 메서드 지정방식 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아래에 같은 질문을 하신 분이 있는데 이해가 안돼서 추가 질문 드립니다. @Bean(initMethod = "init", destroyMethod = "close") public NetworkClient networkClient() { NetworkClient networkClient = new NetworkClient(); networkClient.setUrl("http://hello-spring.dev"); return networkClient; }강의에서 위처럼 빈 등록 초기화, 소멸 메서드를 지정했는데요.NetworkClient 를 외부 라이브러리라고 가정한다면, 우리는 외부 라이브러리를 수정해서 init 메서드와 close 메서드를 작성한 것이 아닌가요? 그래서 어떻게 고칠 수 없는 외부 라이브러리에 적용할 수 있는지 궁금합니다. 이것이 근본적인 궁금증이고 다음은 아래 질문 글을 참고했을 때 궁금한 점 입니다.별도의 클래스를 만들어서 그곳에서 init 메서드와 close 메서드를 작성한다음 빈으로 등록합니다. (별도의 클래스를 LifeConfig라고 하겠습니다)그 다음 외부 라이브러리를 빈으로 등록할 때@Bean(initMethod = "LifeConfig.init", destroyMethod = "LifeConfig.close") 가 아니라 @Bean(initMethod = "init", destroyMethod = "close")이렇게 사용해야 한다는 걸로 이해했습니다. 이게 어떻게 가능한지 궁금합니다. 빈으로 등록했다해도, 어느 빈에 init 메서드와 close 메서드가 있는지 어떻게 알 수 있나요?
-
해결됨객체 지향 프로그래밍 입문
의존 대상 객체를 직접 생성했을 때 문제에 대해 질문드립니다.
안녕하세요. 강사님.영상 4:40초쯤 생성 클래스가 바뀌면 의존하는 코드도 바뀐다고 하셨는데 이게 어떤 경우인지 예시가 잘 안 그려집니다.추상화 파트를 다시 봐도 이해가 잘 안 가서 그러는데 예시나 추상화 강의에서 나왔던 부분 좀 언급하셨던 곳 좀 알려주실 수 있을까요?
-
해결됨스프링 핵심 원리 - 기본편
TestConfig에 @Configuration을 안 붙여도 되는 이유가 이거 맞나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]package hello.core.singleton; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import static org.junit.jupiter.api.Assertions.*; class StatefulServiceTest { @Test void statefulServiceSingleton() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); StatefulService statefulService1 = ac.getBean(StatefulService.class); StatefulService statefulService2 = ac.getBean(StatefulService.class); // ThreadA: 사용자A 10000원 주문 int userAPrice = statefulService1.order("userA", 10000); // ThreadB: 사용자B 20000원 주문 int userBPrice = statefulService2.order("userB", 20000); // ThreadA: 사용자A 주문 금액 조회 // int price = statefulService1.getPrice(); System.out.println("price = " + userAPrice); System.out.println(statefulService1); System.out.println(statefulService2); // Assertions.assertThat(statefulService1.getPrice()).isEqualTo(20000); } static class TestConfig { @Bean public StatefulService statefulService() { return new StatefulService(); } } } 원래 코드에서 System.out.println(statefulService1); System.out.println(statefulService2); 이 부분만 제가 추가했습니다. TestConfig에 @Configuration이 없으면, 컨테이너 내부에 등록되는 빈들이 싱글톤을 보장하지 않는다고 알고 있습니다. 그런데 이 코드를 실행한 결과, statefulService1과 statefulService2가 같은 객체라고 나왔습니다. 저는 당연히 다른 객체일 줄 알았거든요. TestConfig에 @Configuration이 없으면 싱글톤을 보장하지 않는다고 알고 있기 때문에.. 이게 왜 그런지 헷갈렸는데 제가 고민해 본 후의 결론은 다음과 같은데, 오류가 있는지 확인해 주시면 감사드립니다. ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); 이 코드를 실행하면 TestConfig가 빈으로 등록되지만, TestConfig 내부에 @Bean으로 된 statefulService() 메서드로 반환되는 객체는 싱글톤을 보장하지 않는다.하지만 이 코드에선 statefulService()가 한 번밖에 호출되지 않았기 때문에 컨테이너 내부에 생성된 StatefulService 빈이 하나뿐이다.ac.getBean(StatefulService.class); 이 코드를 여러 번 실행하여 statefulService1, statefulService2, statefulService3 여러 개를 만든다고 해도, 컨테이너 내부의 하나의 객체를 조회한다.이렇게 생각했는데 혹시 잘못된 부분이 있는지 궁금합니다. 즉, 이 코드는 싱글톤을 보장하지 않는 게 맞지만, 내부에 생성된 객체 자체가 1개뿐이고 더 생성된 것이 없기 때문에, 같은 것을 계속 조회했을 뿐이므로 아래 코드를 실행하면 같은 객체를 출력하게 된다. System.out.println(statefulService1); System.out.println(statefulService2); 틀린 부분이 있다면 지적해 주시면 감사드립니다.
-
미해결제대로 파는 자바 (Java) - by 얄코
for 강의와 switch 강의 순서가 바뀌어 있습니다.
🛑 이곳에 질문하지 마세요!!!질문은 아래의 링크의 안내에 따라 강의 노션 페이지에 올려주세요!🔗 질문하는 방법 보러가기
-
미해결스프링 핵심 원리 - 기본편
isEqulaTo / isSameAs
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]isEqulaTo는 값을 비교 / isSameAs는 참조(주소)값을 비교하는 걸로 알고 있습니다. 허나, 아래 질문게시글의 답변과 같이 객체의 경우, isEqulaTo는 isSameAs와 같이 참조를 비교하는 것을 알 수가 있습니다.그렇다면 아래 예시와 같이 String도 객체인데 왜 이 경우는 참조가 아닌 값을 비교하나요? (이 경우 테스트가 통과됩니다!)String a = new String("aa"); String b = new String("aa"); assertThat(a).isEqualTo(b);