묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨C개발자를 위한 최소한의 C++
강사님 질문 드립니다.
opArithmetic 교육시에 "=" 오퍼레이터의 반환자를 *this 로 하지 않으면 문제가 생길거라 하셨는데 구체적인 문제 설명이 없으셔서 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
멤버서비스 클래스 만드는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]현재 위와 같은 상황입니다. 왜 굳이 MemberService 인터페이스 및 클래스를 작성해야 하나요? 예를들어, MemberServiceTest 클래스에서다음과 같이 MemberService memberService = new MemberServiceImpl(); 대신 MemberRepository memberRepository=new MemoryMemberRepository(); 과 같이 하여도 되지 않나요? 굳이 MemberService 를 만드신 이유가 있을 것 같아 질문합니다.
-
미해결스프링 핵심 원리 - 기본편
프로토타입 빈 프록시
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요. 웹 스코프에서 프록시 모드를 사용했는데, 이것을 프로토타입 빈에도 적용할 수 있는지 궁금해서 코드를 조금 수정해보았습니다. public class SingletonWithPrototypeTest1 { @Test void prototypeFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class, SingletonBean.class); SingletonBean singletonBean = ac.getBean(SingletonBean.class); singletonBean.prototypeBean.addCount(); assertThat(singletonBean.prototypeBean.getCount()).isEqualTo(1); SingletonBean singletonBean1 = ac.getBean(SingletonBean.class); singletonBean1.prototypeBean.addCount(); assertThat(singletonBean1.prototypeBean.getCount()).isEqualTo(1); } @RequiredArgsConstructor static class SingletonBean { private final PrototypeBean prototypeBean; } @Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS) static class PrototypeBean { private int count = 0; public void addCount() { count++; } public int getCount() { return count; } @PostConstruct public void init() { System.out.println("PrototypeBean.init " + this); } @PreDestroy public void destroy() { System.out.println("PrototypeBean.destroy"); } } }수명이 다할 때까지 동일한 인스턴스를 사용하는 request 스코프 빈과 달리 prototype 빈은 메서드를 호출할 때마다 인스턴스 주소값이 달라지는 것 같아요. 가짜 프록시 객체도 스프링 컨테이너에서 빈을 가져오기 때문인가요?request 빈은 수명이 다할 때까지 스프링 컨테이너에서 관리되지만, prototype 빈은 스프링 컨테이너에서 초기화 단계까지만 관여하므로, 가짜 프록시 객체가 해당 객체의 메서드가 호출될 때마다 새로운 인스턴스를 가져오는건가요?? 그럼 가짜 프록시 객체는 항상 스프링 컨테이너를 경유하는 건가요?
-
미해결스프링 핵심 원리 - 기본편
다음과 같은 에러가 납니다... 몇 날 며칠 고민해도 해결이 안 됩니다.. 도와주세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. > Task :compileJava FAILEDC:\Users\user\Desktop\ȫ����\�ڵ�\core\src\main\java\hello\core\AppConfig.java:28: error: constructor OrderServiceImpl in class OrderServiceImpl cannot be applied to given types; return new OrderServiceImpl( ^ required: no arguments found: MemberRepository,DiscountPolicy reason: actual and formal argument lists differ in length1 errorFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':compileJava'.> Compilation failed; see the compiler error output for details.* Try:> Run with --info option to get more log output.> Run with --scan to get full insights.BUILD FAILED in 1s1 actionable task: 1 executed AppConfig랑 OrderServiceImpl은 강사님 코드랑 똑같이 했는데 어떤 것 때문에 안 되는지 모르겠습니다. 도와주세요.. 코드 첨부하겠습니다. package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberRepository; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public MemberService memberService() { //1번 System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { //1번 System.out.println("call AppConfig.orderService"); return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public MemberRepository memberRepository() { //2번? 3번? System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); } } package hello.core.order; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.member.Member; import hello.core.member.MemberRepository; import hello.core.member.MemoryMemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; // 아래 생성자를 RequiredArgsConstructor이 만들어줌 /* @Autowired 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; } }
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
강의 화면중 강의 자료 문의
안녕하세요. 먼저 유익한 강의 제공해주셔서 매우감사합니다.강의 시청중 궁금한 사항이 있는데, 해당 강의 자료를 어디서 다운로드 할수 있는지 알수 있을까요?소스코드는 다운로드후 적용 하였으나, 해당 웹 강의자료? 들은 강의사이트에서 찾지 못하여 문의 남깁니다.
-
미해결스프링 핵심 원리 - 기본편
실제로 수정자 주입시 누락문제를 경험하는 일이 있나요?
[질문 내용]여기에 질문 내용을 남겨주세요. 수정자 주입을 선택한 경우 4:38에 NPE가 나는 이유는 이해했습니다비록 @Autowired이 달려있지만 ac.getBean으로 획득한 orderService가 아니기 때문에 의존관계 주입이 일어나지 않았고 따라서 NPE가 발생한 것인데요그런데 실제로는 스프링을 사용할 것이고 따라서 orderService를 스프링 컨테이너가 관리하는 스프링 빈으로 사용을 할텐데 이 경우에는 @Autowired가 의존관계 주입을 알아서 다 해주니까수정자 주입의 경우에 누락문제를 걱정할 필요가 없는것 아닌가요?실제로 순수 자바코드를 사용해서 개발하는 경우가 있기 때문에 해당 예제를 보여주신것인지 궁금합니다
-
미해결스프링 핵심 원리 - 기본편
@Configuration과 @ComponentScan을 제대로이해한것이 맞나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 @Configuration의 역할에 대해 질문드립니다처음에 제가 생각한 @Configuration의 역할은 "Bean을 등록할 때 싱글톤이 되도록 보장해준다" 였는데요https://www.inflearn.com/questions/323589https://www.inflearn.com/questions/157309위 두 답변을 보고 제대로 이해한것이 맞는지 궁금하여 질문드립니다제가 이해한것은 다음과 같습니다1. 스프링 빈은 스프링 컨테이너에 언제나 싱글톤으로 등록/관리된다2. @Configuration은 의존관계로 동일한 클래스가 여러번 객체로 생성되는것을 방지한다그래서 싱글톤의 원래 목적인 하나의 클래스는 하나의 객체만 유지해서 사용하기 위함을 @Configuration을 사용하는 것이지@Configuration 자체가 스프링 빈을 싱글톤으로 보장하는것은 아니다(어차피 빈은 언제나 싱글톤으로 관리되므로)3.@ComponentScan 역시 스프링 빈을 등록해주므로 싱글톤으로 빈을 등록해준다만약 2번과 같이 의존성으로 싱글톤을 해칠 가능성이 존재하는 경우에 스프링 빈 수동등록에서는 @Configuration을 활용했다면스프링 빈 자동등록에서는 @Autowired로 해결한다
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
문제와풀이3 질문입니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]안녕하세요 강사님 혹시 문제에 대한 이해가 되긴하지만 정확한 이해가 잘 안되다보니 질문을 남깁니다! productNames[] 와 productPrices[] 배열안에 productCount를 넣는 이유를 자세히 설명가능할까요..? 저는 for문으로 처음시도를해봤는데 안되고 한참을 고민하면서 여러시도를 한 끝에 해결이 되질않아 풀이과정을 봤습니다. 그래서 풀이방식이 궁금해져서요!! (제가 궁금해하는 부분에 대한 설명이 부족한거같아 추가로 더 적습니다! for문을 돌려 for(int i = 0; i <= maxProducts; i++) {System.out.print("상품 이름을 입력하세요 :");productNames[i] = sc.nextLine();System.out.print("상품 이름을 입력하세요 :");productPrices[i] = sc.nextInt(); productCount++; } 식으로 했습니다! 이방식이 안되는 이유도 궁금해서요!
-
해결됨김영한의 실전 자바 - 기본편
멤버변수질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기서 DRiver는 멤버변수로 Car car를 가진다 라고 하는 문장이 잘 이해가 안갑니다.private CAR car; 라고 선언하면 그렇게 되는건가요?이부분에 대한 조금 지식이 부족한데 어느 파트에서 다시 이 내용을 들을수있나요?
-
미해결김영한의 실전 자바 - 기본편
잘이해하는데 이게 좀 햇갈려요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]질문입니다.Driver 클래스에 K3Car k3Car 와 같은 이런 K3Car클래스에 대한 변수,메소드들을 쓰려면 K3Car k3car = new K3Car(); 를 해야 쓸수있는것 아닌가요? 지식 혼동이 조금씩와서 설명부탁가능할까요?이부분이 너무 헷갈려요 접근제어자 다시 봐도 헷갈리구 ㅠ
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
[3강] as {클래스} 형 변환의 Nullable 건에 대하여
안녕하세요! 강의 잘보고있습니다! 3강을 보다 질문? 의문? 같은게 들었습니다.fun printAgeIfPerson(obj: Any?) { val person = obj as Person println(person.age) } 아래 코드에서 매개변수 obj의 값으로 null이 들어온 경우 제 생각으로는 val person: Person? 형태로 추론이 되어 person.age 부분에서 ide가 처음부터 오류를 표시해주는게 맞다고 생각이 되었습니다ㅜ. 선생님께서는 어떻게 생각하시는지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
lombok 사용 시 [옵션 처리]와 [@Autowired 필드 명, @Qualifier, @Primary]는 어떻게 해야하나요?
[질문 내용]생성자를 딱 1개 두고, @Autowired를 생략하고 Lombok 라이브러리의 @RequiredArgsConstructor 함께 사용하면 final 필드를 매개변수로 가진 생성자를 만들어준다는 것까지는 어느 정도 이해 했습니다!1. 여기서 생성자가 1개이기 때문에 @RequiredArgsConstructor 애노테이션을 제외하면 코드에서 생성자에 관한 부분을 찾을 수 없는데 이전 강의[섹션 7: 옵션 처리]에서 학습한@Autowired(requited=false)@NullableOptional<>를 사용하고 싶다면 어떻게 사용해야하는 것인지 의문이 들어 질문드립니다!2.[@Autowired 필드 명, @Qualifier, @Primary] 강의에서의 @Autowired 필드 명 방법과 @Qualifier 방법(+ 애노테이션으로 만들어 사용하는 방법)도 lombok 라이브러리의 @RequiredArgsConstructor 사용시 어떻게 사용해야하는지도 궁금합니다.두 질문의 경우에는 lombok을 사용하지 않고 직접 생성자 주입 코드를 만들어야 할까요?
-
미해결스프링 핵심 원리 - 기본편
쓰레드 활용 예시를 다룬 강의가 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 싱글톤 예시를 설명해주시면서, 쓰레드를 사용할 때 위험성에 대해서 말씀해주신 것을 봤습니다. 혹시 이런 문제점을 다룬 강의가 없나요?
-
해결됨스프링 핵심 원리 - 기본편
AppConfig 빈 객체
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]스프링 컨테이너는 {빈 이름 : 빈 객체} 와 같이 저장된다고 배웠습니다.new AnnotationConfigApplicationContext(AppConfig.class);이때 AppConfig.class도 빈으로 등록된다고 하셨는데, 메소드 이름이 빈 이름, 그 메소드의 반환 객체가 빈 객체가 된다면, AppConfig는 클래스이고 반환객체도 없는데빈 이름과 빈 객체가 무엇으로 저장되는 것인가요?
-
미해결스프링 핵심 원리 - 기본편
@Configuration을 통한 @Bean 등록 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.@Configuration을 통해 빈을 수동등록할 때 강의 예제에서는 AppConfig 클래스를 사용하였는데요AppConfig1, AppConfig2, AppConfig3이라는 클래스에 각각 @Configuration을 붙이고 AppConfig1에서는@Bean public MemberService memberService()를AppConfig2에서는 @Bean public OrderService orderService()를 등록하고 ApplicationContext ac1 = new AnnotationConfigApplicationContext(AppConfig1.class);ApplicationContext ac2 = new AnnotationConfigApplicationContext(AppConfig2.class);이렇게 해서 스프링 컨테이너를 두 개 만들 수 있을거 같습니다이렇게 했을때 단점과 장점이 있는지? 실제로 이렇게 컨테이너를 분할하는 경우가 있는지? 궁금합니다 추가적으로 각 AppConfig1, AppConfig2에서 동일한 객체를 스프링 빈으로 등록한다면 이때도 여전히 싱글톤인지 궁금합니다
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
연산자 문제 문의드립니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]문제 조건은 이렇게입니다!int 형 변수 score 를 선언하세요. score 가 80점 이상이고, 100점 이하이면 true 를 출력하고, 아니면 false 를 출력하세요. 사소한 질문이긴한데, 문제 답은 저렇게 나왔는데boolean result 변수를 사용해서 출력해야하나요??저는 그냥 바로 이렇게 했습니다 ;-; ...결과는 똑같이 나오는데 ...이렇게 했을 시에 가독성이 떨어져서 변수로 하는걸까요 ..?
-
미해결스프링 핵심 원리 - 기본편
상향식 개발방식
[질문 내용]지금 선생님이 가르쳐주시는 방식이 보통 실무에서 만드는 방식인가요? 컨트롤러 -> 서비스 -> 리포지토리 순서로 만드는것으로 알고있어서 궁금합니다
-
해결됨C개발자를 위한 최소한의 C++
강사님 질문 드립니다.
임시객체와 보이지않는 복사생성 과정 프로그램에서- 제가 임의로 복사생성자 부분의 프로그램을TestData(const TestData& rhs){ cout << "TestData(const TestData&)" << endl;}- 위와 같이 수정하고- F11키로 디버깅 추적을 해보면 복사생성자가분명 위의 생성자에서는 nData 를 접근하는 명령이 없는데도 아래 부분에 있는private 😀int nData = 0;부분을 수행합니다.왜 그런지 질문 드립니다. 아울러 제가 초기화 부분 "= 0" 를 없애 버리면 수행되지 않습니다.
-
미해결스프링 핵심 원리 - 기본편
5. 싱글톤 컨테이너 - 싱글톤 패턴의 단점 부분 질문입니다.
안녕하세요,싱글톤 컨테이너 - 싱글톤 패턴의 단점 부분에서 질문이 있습니다. 스프링 컨테이너가 빈을 싱글톤으로 관리하는 부분에 대해 설명하시는 강의이므로 ["컨테이너에 의한 싱글톤"과 비교하여 "일반 싱글톤 패턴"이 갖는 단점]이라는 측면으로 이해하려 합니다.의존관계상 클라이언트가 구체 클래스에 의존한다 -> DIP를 위반한다. / 클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다.다른 질문글들을 찾아보니 이 내용은 "컨테이너를 사용하지 않을 경우 싱글톤이 아닌 일반적인 구체 클래스를 클라이언트에서 직접 new 하듯이 클라이언트에서 구체적인 싱글톤 클래스의 getInstance를 호출해야한다"는 점에서 DIP를 위반한다는 내용으로 이해됩니다. 그러면 이 단점은 컨테이너를 사용하지 않을 경우 싱글톤 클래스나 싱글톤이 아닌 클래스나 마찬가지로 갖는 단점인데 싱글톤 패턴의 단점이라고 표현하신 점에서 제가 이해하지못한 차이가 있는지 궁금합니다.테스트하기 어렵다. / 내부 속성을 변경하거나 초기화 하기 어렵다.컨테이너를 사용하면 config에서 의존관계의 구체클래스만 변경하며 객체의 속성 변경이 용이하지만 직접 구현한 싱글톤 패턴은 이미 생성된 static 객체가 존재하므로 내부를 변경해야한다면 1) 싱글톤 클래스의 코드를 고치거나 2) 클라이언트 또는 테스트 코드에서 수정자 등을 이용해야하므로 내부 속성 변경이 번거롭고 따라서 여러 케이스로 테스트가 어렵다는 의미일까요?결론적으로 유연성이 떨어진다. ("DI가 어렵다, 구체 클래스의 getInstance를 다 해줘야 한다, ...")이 부분도 컨테이너가 없을 경우 일반 클래스, 싱글톤 클래스가 갖는 단점이라 생각되는데 싱글톤의 단점이라 표현하신 점에서 제가 이해하지 못한 부분이 있는지 궁금합니다. 감사합니다.
-
미해결김영한의 실전 자바 - 기본편
문제는 비슷하게 풀었는데
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Book 기본 생성자에 0 은 생략이 가능한거죠?