묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
메서드 영역에 있는 상수풀이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]자바 8이후로는 힙 영역에 있다고 하는데 맞나요?? 자료에는 메서드 영역에 있길래 여쭤봅니다
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
개념이랑 원리는 이해하고
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]실사용은 Executor(멀티스레드), Look(동시성)을 위주로 사용하는 거죠?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
unlock()을 호출 했을 때
ReentrantLock에서 lock.unlock()을 호출하면, 대기 중인 스레드들이 락을 획득하려고 서로 경쟁하게 됩니다. 제가 이해한 바로는, unlock이 호출된 후 스레드들중 락을 획득한 한개의 스레드는 RUNNABLE 상태로 전환되고, 나머지 락을 획득하지 못한 스레드들은 다시 WAITING 상태로 돌아가는 것이라고 알고 있습니다. 이 과정에서 스레드들이 경쟁하는 순간의 상태가 정확히 어떻게 되는지 궁금합니다. 경쟁순간에는 락을 획득하려는 스레드들 모두 RUNNABLE 상태인가요?
-
해결됨김영한의 실전 자바 - 기본편
[기본형과 참조형 문제풀이] 코드에 관한 질문이 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요!항상 선생님께서 진행하시는 문제 풀이를 수강한 이후에, 혼자 좀 더 나은 방식으로 만들 수는 없을까 고민을 하는데요,Method를 배우고 난 이후로, 코드를 대부분 Method로 넘겨서 작성하다 보니 '기능을 전부 Method로 넘겨서 작성하는 것이 진짜 잘 작성한 코드가 맞을까?' 하는 의문이 들었습니다. 아래는 마지막 문제를 제가 코딩한 내용인데요, 두 가지 질문이 있습니다.실무적인 관점과 비교해서 아래의 코드처럼 작성하는 방식(모든 기능을 Method에 집약한 방식)이 괜찮은 방식인가요?코드의 개선점이 있다면 어떤 점을 개선하면 좋을까요?항상 좋은 강의 해주셔서 감사합니다!package ref.ex; import java.util.Scanner; public class ProductOrderMain2 { public static void main(String[] args) { int num = orderCount(); ProductOrder[] orders = new ProductOrder[num]; createOrder(orders); orderPrint(orders); } static int orderCount() { Scanner scan = new Scanner(System.in); System.out.println("-----------------------------------"); System.out.println(" 상품 등록 시스템 "); System.out.println("-----------------------------------"); System.out.print("입력할 주문의 개수를 입력하세요: "); int num = scan.nextInt(); System.out.println(); return num; } static void createOrder(ProductOrder[] orders) { Scanner scan = new Scanner(System.in); for(int i = 0; i < orders.length; i++) { orders[i] = new ProductOrder(); System.out.println((i+1) + "번째 주문 정보를 입력하세요"); System.out.print("상품명: "); orders[i].productName = scan.nextLine(); System.out.print("가격: "); orders[i].price = scan.nextInt(); System.out.print("수량: "); orders[i].quantity = scan.nextInt(); scan.nextLine(); System.out.println(); } } static void orderPrint(ProductOrder[] orders) { int total = 0; for(ProductOrder P : orders) { System.out.println("상품명: " + P.productName + ", 가격: " + P.price + ", 수량: " + P.quantity); total += (P.price * P.quantity); } System.out.println("총 결제금액: " + total); } }
-
미해결스프링 핵심 원리 - 기본편
static 지운 후 memberRepository 오류
[질문 내용]테스트 케이스 수행 시 다른 주소값이 나오길래, 다른 분들 질문글 참고하여 AppConfig의 MemberRepository 부분에 static을 지워보았으나, 테스트를 돌려보니 아래와 같은 오류가 뜹니다. OrderServiceImpl 과 MemberServiceImple의 memberRepositoy 에서 final을 지워봤으나 해결하지 못고 오류를 찾지 못하여 질문 드립니다.<MemoryMemberRepository> <OrderServiceImpl> <MemberServiceImpl>
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
yield()를 추가해도 무한반복은 계속해서 발생하지 않을까요?
안녕하세요. 강의 수강 중 궁금한 것이 있어 질문드립니다.MyPrinterV4에서 yield()를 추가해도 인터럽트 되지 않은 상태에서 while문에서 무한 반복이 발생(성능저하의 근본 원인)하는 것은 V3와 동일하기 때문에 때문에 성능 향상이 있을까 싶습니다.
-
미해결스프링 핵심 원리 - 기본편
주문과 도메인 개발 8:21부분 오류 해결 도와주세요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] DiscountPolicy 부분에서 자꾸 cannot resolve symbol 'DiscountPolicy' 이라는 오류문구가 뜨는데 뭐가 문제인지 모르겠습니다. 라이브 코딩 계속 따라 쳤는데 이유를 모르겠네요..
-
미해결스프링 핵심 원리 - 기본편
1L이 무슨 뜻인지 확실하게 모르겠습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]구글링으로 알아본 1L 의 의미는 long 자료형이라는 뜻도 있고자바의 직렬화를 쓸 때 쓰인다고 하는데 이건 잘 이해가 안되네요.. 1L를 왜쓰는지 모르겠어요
-
해결됨오브젝트 - 기초편
객체 지향 설계 첫번째 원칙
안녕하세요. 좋은 강의 찍어주셔서 진심으로 감사합니다. 한 마디 한 마디 이해하려고 하며 배우고 있습니다. 3-1 강의 11분 쯤에 '행동을 결정하고 객체를 나중에 선택하라는 원칙'이 객체를 선택하기 전에 요청을 결정하기 때문에 코드를 수정하지 않고도 협력하는 객체를 교체할 수 있게 해준다고 말씀하신 부분을 좀 더 설명해주실 수 있을까요 ??calculateDiscount 행동을 먼저 정하고 이 행동을 하기에 적합한 객체를 선택한다고 말씀해주신 앞부분 내용은 잘 이해했는데, '객체를 선택하기 전에 요청을 결정하기 때문에 코드를 수정하지 않고도 협력하는 객체를 교체할 수 있게 해준다' 이 부분에 대한 이해가 잘 안 갑니다.여담이지만 <객체지향과 사실과 오해> 도 잘 읽었습니다. <오브젝트> 책이 두꺼워서 망설이고 있었는데 강의를 내주셔서 감사합니다.
-
해결됨김영한의 실전 자바 - 중급 1편
중첩 내부 클래스 문제풀이2 - 코드 리뷰 좀 해주세요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.중첩 내부 클래스 문제풀이2 풀긴 했는데 좀 부분들이 좀 달려서 이것도 괜찮은가? 싶은 게 있습니다.이 코드를 보고 좀 고쳐야 할게 있을까요?참조는 inner클래스 car클래스를 참조했습니다.addBook() 메서드에서 new book(내용) 이게 더 낳은것 같으니 이거 빼고요.추가1.문제풀이1 문제4 AnonymousMain을 인텔리제이 자동완성으로 풀게 되었는데 이것은 괜찮은지 묻고싶습니다.답변 부탁드립니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
trylock(1500)질문입니다
안녕하세요 강의 잘보고 있습니다. 강의 내용중 tryLock메서드 실습 부분에 서 tryLock에 인자로 500 밀리초를 넘겨 0.5초동안 락을 획득하지못하면 포기하는 것을 실습했습니다. 추가로 1500밀리초를 넘겨서 돌려봤는데 이때도 락을 얻지 못했습니다. 출금시간은 1초라서 락해제까지 완료가 된상태인데 왜 다음스레드가 락을 얻지 못할까여,, ㅠㅠ19:00:56.252 [ Thread-1] 거래 시작: BankAccountV519:00:56.252 [ Thread-0] 거래 시작: BankAccountV519:00:56.254 [ Thread-1] [검증 시작] 출금액: 800, 잔액: 100019:00:56.254 [ Thread-1] [검증 완료] 출금액: 800, 잔액: 100019:00:56.752 [ main] t1 state: TIMED_WAITING19:00:56.752 [ main] t2 state: TIMED_WAITING19:00:57.258 [ Thread-1] [출금 완료] 출금액: 800, 잔액: 20019:00:57.258 [ Thread-1] Thread-1 락 해제19:00:57.258 [ Thread-1] 거래 종료19:00:57.758 [ Thread-0] [진입 실패] 이미 처리중인 작업이 있습니다 if (!lock.tryLock(1500, TimeUnit.MILLISECONDS)) { log("[진입 실패] 이미 처리중인 작업이 있습니다") return false } lock.lock() //그냐 트라이랑 세트라 보삼 try { log("[검증 시작] 출금액: $amount, 잔액: $balance") if (amount > balance) { log("[검증 실패] 출금액: $amount, 잔액: $balance") return false } log("[검증 완료] 출금액: $amount, 잔액: $balance") Thread.sleep(1000) balance -= amount log("[출금 완료] 출금액: $amount, 잔액: $balance") } finally { log("${Thread.currentThread().name} 락 해제") lock.unlock() //언락 반드시 해야함 }코드가 코틀린인점 죄송합니다.. 자바랑 같은라이브러리를 사용해서 혹시나해서 여쭤봅니다
-
미해결스프링 핵심 원리 - 기본편
CoreApplication 실행시 AppConfig, AutoAppConfig순서
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]CoreApplication 실행 시에 @SpringBootApplication어노테이션 안에 @ComponentScan 이 있어서 @Configuration이 써진 AppConfig와 AutoAppConfig가 스캔되는 대상인 것은 알겠습니다. CoreApplication 실행시 AppConfig의 로그가 찍히는데 1.AppConfig와 AutoAppConfig가 둘다 작동됐는데 AppConfig가 뒤에 작동 된건지 순서가 궁금합니다. 2.AutoAppConfig에서 필터로 AppConfig는 스캔되지 않게 해줬는데 이것과 무관하게 CoreApplication 의 어노테이션으로 인해 AppConfig파일도 스캔된건지 궁금합니다.@Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { }CoreApplication 실행 시에 스프링 컨테이너를 설정 안해줬는데 왜 AppConfig의 로그가 도는지... 궁금합니다
-
미해결스프링 핵심 원리 - 기본편
안녕하십니까 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]강의 내 나오는 클래스 다이어그램 혹시 어떤 프로그램 사용해서 그리시나요? DrawIO는 아닌 것같은데 저도 선생님처럼 설계시 다이어그램을 그려보고 싶어서 문의드립니다.
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
비공정 모드가 공정 모드가 빠른 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]비공정 모드가 공정 모드가 빠른 이유가 뭔지 자세히 궁금합니다. 비공정 모드에서도 어느 정도 대기큐가 있다고 하셨는데 그 걸 제외하고 공정 모드에서는 대기큐를 사용하면 어떤 스레드가 다음 락을 가져야할 지 알기 때문에 좀 더 빠르지 않나? 라는 생각이 들어서요.. 그리고 비공정 모드에서는 반대로 대기큐를 사용하지 않았기 때문에 공정 모드보다 락 얻기 위한 경합이 일어나서 좀 더 느릴 수 있는거 아닌가..? 싶어서 여쭤봅니다..시스템 상황에서 어떻게 비공정 모드가 공정 모드보다 빠른지 이해가 가지 않네요..ㅠㅠ
-
미해결김영한의 실전 자바 - 중급 1편
혹시 중급1에서 완벽히 이해가 안됬다고 느끼면 중급1편을 다시 재수강하고 중급2로 넘어가는게 좋을까요? 아니면 우선 순차적으로 모두 수강후에 재수강하는것이 좋을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]혹시 중급1에서 완벽히 이해가 안됬다고 느끼면 중급1편을 다시 재수강하고 중급2로 넘어가는게 좋을까요? 아니면 우선 순차적으로 모두 수강후에 재수강하는것이 좋을까요?
-
미해결스프링 핵심 원리 - 기본편
스프링부트 질문이 있습니다
제가 현재 자바와 스프링 부트를 함께 배우는 비전공자 부트 캠프를 다니는 중인데부트캠프에서 자세한 내용은 배우기 시간이 촉박한 관계로 강사님이 자세한 설명은 스킵합니다. 이로 인해 비전공자임에도 개발자의 꿈을 꾸는 저는 추가로 강의를 들어서 보충학습을 하고자하는데현재 제가 강의로 배우고 있는 내용은 스프링으로 심화적인 스프링부트의 이해를 위해서 필요한지 아니면 스킵하고 바로 스프링 부트쪽으로 넘어갈지 고민이되서 질문드립니다
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
실무에서 excutor service사용
안녕하세요. 실무에서 시간이 오래소요되는 3개의 delete쿼리를 excutor service를 사용하여 멀티스레드형식으로 1개의 스레드가 1개의 쿼리를 수행하도록 구현해보고 싶습니다. 그런데 멀티스레드를 사용했을때 트랜잭션은 보통 어떻게 처리하시나요.. ? 저는 @transactional 을 선언해서 사용하고 있는데 이는 스레드1개당 트랙잭션이 생성되는거라 제가 의도한데로 롤백이 제대로 안될거라고 하더라구요.. 3개의 쿼리가 모두 성공했을때 커밋되고 그렇지않으면 롤백시키고싶은데 이부분에 대한 지식도 혹시 알수있을까요? 추가로 혹시 해당 질문 관련 강의를 개설해놓으신게 있다면 알려주시면 감사하겠습니다!
-
미해결김영한의 실전 자바 - 중급 2편
제가 작성한 코드 출력 결과에 의문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]< 사전 설명 >Rectangle 객체에서 hashCode()와 equals() 둘중 equals()만 오버라이드 하였습니다. 이후 public class RectangleTest { public static void main(String[] args) { Set<Rectangle> rectangleSet = new HashSet<>(); for (int i = 0; i < 13; i++) { rectangleSet.add(new Rectangle(20, 20)); } System.out.println(rectangleSet.size()); for (Rectangle rectangle : rectangleSet) { System.out.println("rectangle = " + rectangle); } } }위와 같은 코드를 작성했을때System.out.println(rectangleSet.size()); 출력 결과가 13이 나오고for문의 출력 결과도 같은 결과가 13번 나옵니다. < 질문 >hashCode()를 오버라이드 하지 않음으로써 해시인덱스가 랜덤으로 배정되는 것으로 알고있습니다.그래서 논리적으로 같은 객체가 들어오더라도 다른 해시인덱스에 할당 되는것이 문제가 됩니다. 하지만 제가 작성한 코드와 같이 많은 for문을 돌게 될면 새로 만들어진 Rectangle 객체가 언젠가 최소 한번쯤은 해시인덱스에서 중복된 객체를 만나게되고, 중복되는 해시 인덱스의 버킷에서 equals() 메서드가 실행되어 저장이 취소될것이라고 예상했습니다.그래서 rectangleSet.size()는 13 미만이 될거라 생각했지만 아니었습니다. 오버라이드된 equals() 메서드가 실행되지 않는 이유가 무엇일까요?
-
미해결김영한의 실전 자바 - 기본편
Student student1 = new Student();일때 Student 타입질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. new를 통해 클래스를 기반으로 인스턴스를 생성하면 참조값을 반환한다고 하셨습니다. 그렇다면 맨앞의 Student 타입이라면 참조값의 타입이라고 이해하면 될까요?16진수라면 다른 타입을 써도 되나요? double이나 long?
-
미해결스프링 핵심 원리 - 기본편
AllBeanTest 시 discountPrice 값 0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]AllBeanTest 클래스의 findAllBean 테스트하는데 자꾸 실패하네요. 1000원이 아닌 0원으로 나오는데, member.getGrade()를 해보면 VIP가 아닌 null로 나옵니다..package hello.core.autowired; import hello.core.AutoAppConfig; import hello.core.discount.DiscountPolicy; import hello.core.member.Grade; import hello.core.member.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import java.util.List; import java.util.Map; public class AllBeanTest { @Test void findAllBean(){ 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, 10000, "fixDiscountPolicy"); Assertions.assertThat(discountPrice).isEqualTo(1000); } 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); } } }