학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/) [질문 내용]안녕하세요 다음과같이 함수 내부에서 입금,출금액을 입력받도록 설계하는것 보다 영한님처럼 외부에서 입력받고 인자로 넘기는 방식이 더 좋은 방식인가요?
public class AllBeanTest { @Test void finaAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Member(1L, "userA", Grade.VIP); int discountPrice = discountService.discount(member, 1000, "fixDiscountPolicy"); assertThat(discountService).isInstanceOf(DiscountService.class); assertThat(discountPrice).isEqualTo(1000); int rateDiscountPrice = discountService.discount(member, 20000, "rateDiscountPolicy"); assertThat(rateDiscountPrice).isEqualTo(2000); } static class DiscountService { private final Map<String, DiscountPolicy> policyMap; private final List<DiscountPolicy> policies; @Autowired // 생략가능 생성자가 하나이기 때문에!!! public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); return discountPolicy.discount(member, price); } } } 첫번째 질문, AnnotationConfigApplicationContext을 해주게되면 스프링컨테이너로 등록을하고 ac를 통해 빈으로 등록된 AutoAppconfig.class와 DiscountService.class에 접근이 가능하다고 알고있습니다. 밑에보면 ac로 DiscountService.class에만 접근하고있어서 AutoAppconfig.class를 빼주었더니 밑에있는 discountprice에 discout에서 오류가 발생합니다. 이유가 무엇일까요? 두번째 질문, 밑에 DiscountService에 강의에서 생성자를 선언해주었습니다. 지금보면 어디에서 호출이되었는지와 어떻게 값을 넣어주었는지 궁금합니다. 제생각에는 AnntationConfigApplicationContext를 할때 API문서를 보니 refresh()의 finishBeanFactoryInitialization(beanFactory); 에서 AutoAppConfig.class, DiscountService.class 에 대한 값을 이미 생성되었다고 판단되었는데 이게맞을까요? 이게맞다면 1번질문이 결국 2번질문과 연관되어있을거같습니다 세번째 질문, map에 대해 공부를해봤는데 map<String, DiscountPolicy> 에서 만약 AutoAppconfig 가 들어가있다면 this.policyMap에는 AutoAppconfig가 들어가있는 상태이고 AutoAppconfig를 들여다보니 ComponentScan이 있어서 Component로 등록되어있는 RateDiscountPolicy, FixDiscountPolicy에 매개변수로 들어온 discountCode로 접근이 가능하다가 맞을꺼같은데 제가 이해한게맞을까요?
안녕하세요 선생님 7-3.Scanner_반복예제(5분 54초경) 질문이 있습니다. 선생님께서 작성하신 코드에 따르면 int구문을 if와 구별하여 작성해주신 것으로 확인했습니다. 저는 이와 다르게 하기와 같이 구현하였는데 이렇게 진행해도 무방할까요? Scanner scanner = new Scanner(System.in); System.out.println("첫번쨰와 두번째 숫자 모두 0을 입력하면 프로그램을 종료합니다."); while (true) { System.out.print("첫번쨰 숫자를 입력하세요 : "); int num1 = scanner.nextInt(); System.out.print("두번쨰 숫자를 입력하세요 : "); int num2 = scanner.nextInt(); if (num1 == 0 && num2 == 0) { System.out.println("프로그램을 종료합니다."); break; } else { int sum = num1 + num2; System.out.println("두 숫자의 합은 ? = " + sum); }
package javax.inject; public interface Provider { T get(); } @Autowired private Provider<PrototypeBean> provider; public int logic() { PrototypeBean prototypeBean = provider.get();} Provider 인터페이스 사용시 위처럼 인터페이스를 구현한 구현체 없이도 사용이 가능한가요?
안녕하세요 선생님 유튜브 파이썬 강의 듣고 만족해 유튜브 자바 강의도 듣고 있습니다. 그러나 맥북 jdk설치 과정부터 막혀 도저히 진도가 나가질 않습니다.지식인에 물어보고 gpt에 물어보고 아무리 인터넷을 찾아서 따라해봐도 계속 에러가 납니다... 심지어 여기 커뮤니티에서 다른 사람이 질문했던거 따라해도 다시 에러가 나요 ㅜㅜㅜㅜ 다시 다 지우고 처음부터 해봤는데도 안되네요 brew search jdk 이 과정만 입력하면 계속 같은 에러가 뜨네요..진짜 컴맹 코딩생초보라ㅜㅜ 어떻게 해야될지 모르겠어서 선생님께 직접 자문을 구하고자 결국 수강료 내고 여쭤봅니다... 자세하고 친절한 설명 부탁드립니다.. 번거롭게 해드려 죄송해요ㅜ
이런식으로 Product라는 클래스를 만들고 컬렉션을 이용해서 products 변수를 만들어서 그 안의 객체를 생성해서 넣었습니다. 그리고 또 다른 productTest라는 변수를 만들어서 이번에 products의 값들을 new ArrayList를 통해서 값을 전달했다고 한다면 productTest의 배열의 첫번째 인덱스 값이 products의 첫번째 인덱스 값을 가리키는 것과 같은거 아닌가요? 그렇게 된다면 productTest에서 값을 수정한다면 원본 데이터 값에도 영향을 받아야 하므로 products.get(0).getName() 값도 결국 "테스트제품"으로 바꿔져야 하는데 원본 데이터는 영향을 받지 않더라구요... ㅠㅠ 왜 이런건지 잘 모르겠습니다.. 참조 배열 안에 있는 값도 결국 객체의 메모리 주소값을 가리키게 된다면, 새로운 배열을 만들어서 값을 복사해서 대입하게 되더라도 해당 객체를 가리키는 메모리 주소값을 접근하는 것이 하나 더 생기는거 아닌가요?
이 강의에서 배운 내용을 토대로 참조형 배열에 관해 궁금한 점이 있습니다. 참조형 배열도 결국 배열 안에 메모리 주소값을 저장하여 인덱스를 통해 메모리 주소값에 접근하는 방식인가요? 예를 들어서 List<Item> items = new ArrayList<>(); 이런 식으로 Item 타입을 가지는 items라는 배열을 생성했다라고 하면, 이 안에 인덱스 번호를 통해 배열 안의 위치에 접근하면 Item 객체에 관한 메모리 주소값이 있을테고, 이 메모리 주소값에 접근하는 방식인가요? 만약 List<Item> item = new ArrayList<>(); 배열 변수를 선언하고 배열 안에 값을 넣었다고 생각을 한다면, 강의에서 말했듯, " 자바는 항상 변수의 값을 복사해서 대입한다 " 라는 말이 있는데 여기서 궁금한게, 또 다른 새로운 배열을 만들어서 해당 item을 복사해서 넣는다고 한다면 즉, List<Item> anotherItem = new ArrayList<>(item); 이런식으로 item 안에 값들을 anotherItem으로 새로운 배열을 만들어서 집어넣는다면, anotherItem 안에 값들을 수정해도 item에는 영향을 미치지 않나요? 만약 영향을 미치지 않는다면 왜 그런지 궁금합니다. 결국 객체의 메모리 주소에 접근할텐데.. (너무 헷갈립니다 ㅠㅠ)
안녕하세요. 영한님! 스프링 강의에 이어 자바 강의까지 정말 재미있게 듣고 있습니다! ㅎㅎ 다름이 아니라 섹션 8 final > final 변수와 상수 1 에서 오타를 발견하여 제보합니다. 값은 이 제거되어야 할 것 같습니다. 😄 영한님 덕분에 자바 모르고 지나쳤던 부분에 대해 짚고 넘어갈 수 있었습니다. 이후 공개될 자바 중급, 고급편도 무척이나 기대되네요! ㅎㅎ 항상 감사합니다. 연말 마무리 잘하시고 새해 복 많이 받으세요 🧧
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. 7강 예제문제 scanner 넣어서 만들다가 컴파일 돌리면 Process finished with exit code 0 이런 에러가 떠서 질문드립니다 .. 에러 뜨는 곳은 없는데 어디가 잘못되어서 컴파일이 안되는지 궁금합니다 .. 감사합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 이번 강의를 들으며 다형성과 추상클래스, 인터페이스 개념적인 부분 관련해서 이해가 잘 되었습니다. 그런데 다형성 관련부분 들을때부터 의문이 들었던.. 메인 쪽에서 인스턴스 생성 부분이 이해가 가지 않아 질문 드립니다. 왜 InterfaceA a = new child() ; 처럼 인스턴스를 생성해서 써야 하는건가요? Child a = new child() 로 생성해서 메소드를 호출했을 때의 문제점이 뭔가요? 문제점 보다는 코드 중복제거와 같은 효율성 때문인가요? 위의 인스턴스 대로라면, 부모클래스의 메소드를 찾아서 해당 메소드가 자식 클래스에 있다면 자식 클래스를 우선 호출하거나, 부모클래스가 추상이나 인터페이스라면 오버라이딩 된 자식 클래스의 메소드를 호출할텐데, 인스턴스 생성시부터 부모 a = new 자식 으로 왜 생성하는지가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. CoreApplication의 @SpringBootAplication에는 @ComponentScan이 들어있다고 하셨습니다. 그러면 스프링 빈 등록을 할 때 AutoAppConfig가 아니라 CoreApplication을 써도 될 것 같다는 생각이 들었습니다. 그래서 방금 테스트한 코드를 이렇게 수정해보았습니다. public class AutoAppConfigTest { @Test void basicScan() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(CoreApplication.class); MemberService memberService = ac.getBean(MemberService.class); assertThat (memberService).isInstanceOf(MemberService.class); } } 하지만 제가 @Component를 사용하지 않은 MemberService 도 같이 bean으로 등록되어 있어서 NoUniqueBeanDefinitionException이 발생했습니다. 왜 CoreApplicaion을 사용하면 이러한 오류가 나는 건지 궁금합니다. 그리고 이것이 AutoAppConfig의 역할을 대체할 수 있는지 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. "클래스가 필요한 이유" 강의중 코드작성때는 int[] studentGrade = {} 로 작성하셨는데 pdf 파일에는 int[] studentGrades ={} 로 작성 되어 있습니다..!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 일단 오류 로그는 이러한데 이 autowired를 통해 주입 받는 과정에서 @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } 이 수동 빈의 등록과 @Component public class MemoryMemberRepository implements MemberRepository{ private static Map<Long, Member> store = new HashMap<>(); @Override public void save(Member member) { store.put(member.getId(),member); } @Override public Member findById(Long memberId) { return store.get(memberId); } } 이 자동 빈의 등록이 중복이 되어 MemberRepository의 빈을 조회하여 주입할 때 2개의 빈 중복으로 해당 오류가 발생하는 것으로 이해하였는데 gpt의 의견으로 @primary를 사용하면 해결이 되는걸 확인을 했습니다만 처음에 타입으로 조회 한 이후에 여러 개의 빈이 조회 된다면 memberRepository의 이름인 빈이 선택되어 오류가 나지 않아야 하는 것이 아닌가 하여 이해가 되지 않아 질문 드립니다. 감사합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의 내용에서 편의를 위해서 public class Data3 { public String name; public static int count; public Data3(String name) { this.name = name; count++; } } count를 public으로 선언후에 Data3 인스턴스를 만들어서 Data3.count에 접근하는 방식은 이해했습니다. 실제로 사용시에는 아래처럼 getCount()를 만들어서 사용해야 할까요? public class Data3 { public String name; private static int count; public Data3(String name) { this.name = name; count++; } public int getCount() { return count; } } 아니면 더 좋은 사용방법이 있을까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강의 자료 중에 위 부분에서 질문이 있습니다. student1 과 student2가 다른 곳에 저장될 수 있는 이유는 student1이 매서드에서 생성되고 인스턴스에 저장된 후에 매서드의 매개변수 student가 지워져서 계속 매서드안의 인스턴스 student를 생성할 수 있는 건가요? 근본적인 질문은 student1과 student2가 매서드를 통해 생성이 되었는데 어떻게 다른 주소를 가지게 되는 지입니다.