묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 중급 2편
섹션 3. ArrayList - 제네릭2
안녕하세요!해당 파트 복습하다가 궁금증이 생겨 질문 드립니다!제네릭은 런타임 시점에 Object나 따로 지정한 상한선으로 변하기 때문에 생성자에는 사용하지 못 한다고 이해하고 있습니다.때문에 해당 배열도 Object 타입으로 선언한 것은 이해했는데요.여기서 궁금한 것은,해당 코드도 런타임 시에는 E가 Object로 바뀔텐데, 그럼 Object 타입으로 캐스팅되어서 반환되어야 하는 것이 아닌지 궁금합니다!혹시 메서드 선언부에 타입 매개변수가 있고 없고의 차이인 건가요?아니면 pdf 파일에는 나와있지 않지만, Main 함수에서 get 함수를 반환받을 때 거기서 자바가 E 타입으로 캐스팅해주는 건가요? <질문 정리>생성자 안에 있는 E 타입은 변하는데, 왜 get 함수 안에 있는 E 타입은 유지가 되는지 궁금합니다!
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
for문 조건식에서 `<=` 와 `==` 질문
[질문 내용]public static void main(String[] args) { int row = 5; for (int i = 1; i <= row; i++) { for (int j = 1; j <= i; j++) { //for (int j = 1; j == i; j++) System.out.print("*"); } System.out.println(); } }위의 예제를 보면 j == i 로 코드를 입력했을 경우, 1행 * 하나만 출력이 되고 그 다음은 출력이 되지 않습니다.j == i가 될 때까지 출력해라 라는 논리구조가 적용이 되지 않는 이유가 궁금합니다.만약 j == i 일 때만 출력해라 라고 한다면 별은 5행까지 하나씩 출력이 되어야 할 것 같은데 그렇게 되지 않기도 하구요.조언 부탁드립니다!
-
해결됨김영한의 실전 자바 - 중급 1편
Math클래스 메서드중 random,질문(추가 round 메서드도요)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금증이 생겨서 질문을 남깁니다.Math 클래스중에 메서드에 있는 Math.radom()을 추적해 보니, Ranodm 클래스를 갖고 와서 쓰고 있다는 사실을 알수 있었습니다.Math클래스에 random()이라는 메서드를 집어 넣은 이유가 저가 생각 하기에는 random 이라는 것이 복잡하고, ocp원칙을 지키기 위해서, Math 클래스에 관계를 맺고 있다 라고 생각해도 될까요? 아니면 다른 이유가 있는 것인지 알고 싶습니다.추가 질문round() 메서드의 값을 예상햇을때 3.0이 나올줄 알았는데, 3이 나오고, long으로 값을 반환 한다는 것을 알 수 있었습니다.ceil(),floor() 메서드 들은 전부다 반환값이 double인데, rond() 메서드는 왜 long으로 반환하는지 알고 싶습니다.답변 부탁 드립니다.
-
미해결스프링 핵심 원리 - 기본편
NoUniqueBeanDefinition 예외
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 강의를 복습하는 도중에 다음 설정과 같이 intellij로 테스트를 실행하면 다음과 같이 NoUniqueBeanDefinition 예외가 나옵니다. 해당 설명을 보면 컴포넌트 스캔으로 등록된 MemoryMemberRepository와 AppConfig에서 등록된 MemoeyRepository 때문에 생성자 주입이 일어날때 어떤 것을 선택할지 몰라서 생기는 오류처럼 보입니다. 이를 해결하기 위해 커뮤니티 게시판을 살펴봤는데 다음과 같이 test 환경을 intellij idea가 아닌 gradle로 실행하면 된다고 하여 시도해보았더니 해결되었습니다. 그런데 이런 해결방법이 이해가 되지 않습니다. gradle과 intellj 무슨 차이가 있는지 궁금하고 gradle로 테스트하더라도 코드는 똑같이 분명히 똑같이 충돌이 일어날텐데 오류 없이 해결되는지 그 이유가 궁금합니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
문제풀이 3 관련
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]문제풀이 3에서 마지막에 totalprice 변수를 초기화 하고 진행을 하는데, 혹시 변수 초기화 안하고 이렇게 작성해도 무방할까요? System.out.println(foodName + " " + foodQuantity + "개를 주문하셨습니다. 총 가격은 " + foodPrice * foodQuantity + "원입니다.");
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
자바의 컴파일
자바파일을.. 컴파일해서 .class로 만들면 어떤 운영체제에서 컴파일을 하든 모든 운영체제에서 .class가 돌아가는게 맞나요?아니면 컴파일을 할때 맞는 운영체제에서 먼저 컴파일을 해야하는건가요?
-
해결됨김영한의 실전 자바 - 중급 2편
System.out.println(set)의 시간 복잡성
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이 코드에서 System.out.println(set)의 경우는 O(n)이 맞을까요?
-
미해결스프링 핵심 원리 - 기본편
CoreApplication 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 6:11 초 내용과 같이 CoreApplication 코드를 실행했는데 강사님과 다르게 아래와 같은 오류가 뜹니다.다른 코드들은 다 똑같이 작성하였는데 혹시 이 오류가 인텔리제이 무료 버전을 사용해서 생기는 오류인가요?
-
미해결스프링 핵심 원리 - 기본편
@PostConstruct 사용 목적
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@PostConstruct를 사용하는 근본적인 이유는 빈 등록 이후에 빈 객체의 필드를 초기화 하기 위함인가요? 아래 코드와 같이 동작하는 것이 맞을까요?//빈으로 등록하자 마자 init() 메소드를 호출해서 repositoryName 초기화 @Repository public class DatabaseMemberRepository{ private String repositoryName; @PostConstruct public void init(){ this.repositoryName = "DatabaseMemberRepository "; } }만약 1번 내용이 맞다면 아래 코드처럼 @PostConstruct를 사용하지 않고 그냥 main 메소드에서 setter로 초기화 해도 같은 로직이라고 보면 될까요?public class Application { public static void main(String[] args) { ApplicationContext ac = new AnnotationConfigApplicationContext(DatabaseMemberRepository.class); final MySqlMemberRepository bean = ac.getBean(DatabaseMemberRepository.class); bean.setRepositoryName("DatabaseMemberRepository"); } }그럼에도 불구하고 @PostConstruct를 사용하는 이유는 빈으로 등록되고 @PostConstruct가 붙은 메소드가 자동으로 실행되므로 개발자가 실수로 필드 초기화를 까먹고 NPE 같은 오류가 발생하지 않도록 방지하기 위함인가요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ArrayEx2 질문입니다 ㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]똑같이 따라했는데 저는 5까지 정수를 입력한 후에 출력이 안나오고 그 후로 뭘 더 입력하면 오류가 나와버려요 ...ㅠㅠ.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ScannerWhileEx3 에서 질문있습니다 !
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]조금 논외 질문이긴 하지만 while (true)로 무한루프를 돌려서 -1을 입력한 후 숫자들의 합계와 평균이 나오게 만들고나서도 프로그램이 종료가 안되고 다음 계산을 하는 형식으로는 어떤식으로 코딩을 할 수 있을까요? ㅠㅠex1234총합 10을 출력 후 그대로 이어서 프로그램이 종료가 되지않구 다음 숫자를 입력했을때 다시 이후부터 누적된 총합을 계싼하는 형식으로도 코딩이 가능할까요?그리구 아예 총합을 초기화 후 다시 출력하는 방식도 가능한지 궁금합니다 ...if로 넣어서 혼자 만들어보려고했는데 변수가 안만들어지는건지 계속 컴파일 오류가 떠서요 ㅠㅠ
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
Scanner 학습 관련
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]System.out.print("정수를 입력하세요:"); int intValue = scanner.nextInt(); System.out.println("입력한 정수: " + intValue); System.out.print("실수를 입력하세요:"); double doubleValue = scanner.nextDouble(); System.out.println("입력한 실수: " + doubleValue);타입이 다르면 오류가 발생한다고 했는데, double에 정수(예 15) 입력하면 15.0으로 나오더라구요. 이건 자동형변환이 된건가요..? 아니면 숫자 -> 숫자는 상관 없는 걸까요?
-
미해결스프링 핵심 원리 - 기본편
스프링 프로젝트 부분 수정에 대한 질문입니다.
스프링이 처음입니다. 문의가 어설퍼도 이해바랍니다. 스프링으로 개발된 프로젝트가 있습니다. 서버에는 컴파일 된 class 파일들이 있는데요. 부분적인 기능 수정을 위해서 전체 프로젝트를 WAR파일로 컴파일하지 않고 해당 java 파일만 컴파일하여 class파일을 만들어 서버에 올려 파일을 교체해도 전체 서비스 작동에 문제가 되지는 않는지 궁금합니다.a.java -> a.class 예를 들어 요렇게 부분 파일만 코드 수정 후 서버에 해당 a.class 파일을 교체해도 문제가 없는지요.
-
미해결스프링 핵심 원리 - 기본편
NoSuchBeanDefinitionException 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]ConfigurationSingletonTest에서 memberRepository 빈이 없다는 오류가 뜹니다. AppConfig 파일에서 memberRepository 메소드가 @Bean으로 잘 등록되었고, AppConfig 파일도 @Configuration으로 잘 등록된 것을 확인했습니다. 다음과 같이 오류가 뜨는 이유를 잘 모르겠습니다. 아래와 같이 ConfigurationSingletonTest코드 중 getBean에서 오류가 생기는 것 같은데 이유를 모르겠습니다.MemberRepository memberRepository = ac.getBean("memberRepository", MemberRepository.class);아래는 MemberServiceImpl, orderServiceImpl, AppConfig, ConfigurationSingletonTest 코드입니다. package hello.core.member; public class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; 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); } //테스트 용도 public MemberRepository getMemberRepository() { return memberRepository; } }package hello.core.order; import hello.core.discount.DiscountPolicy; import hello.core.member.Member; import hello.core.member.MemberRepository; public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; 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; } }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(){ return new MemberServiceImpl(MemberRepository()); } @Bean public MemberRepository MemberRepository() { return new MemoryMemberRepository(); } @Bean public OrderService orderService(){ return new OrderServiceImpl(MemberRepository(), discountPolicy()); } @Bean public DiscountPolicy discountPolicy(){ //return new FixDiscountPolicy(); return new RateDiscountPolicy(); } }package hello.core.singleton; import hello.core.AppConfig; import hello.core.member.MemberRepository; import hello.core.member.MemberServiceImpl; import hello.core.order.OrderServiceImpl; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import static org.assertj.core.api.Assertions.assertThat; public class ConfigurationSingletonTest { @Test void configurationTest(){ ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class); OrderServiceImpl orderService = ac.getBean("orderService", OrderServiceImpl.class); MemberRepository memberRepository = ac.getBean("memberRepository", MemberRepository.class); MemberRepository memberRepository1 = memberService.getMemberRepository(); MemberRepository memberRepository2 = orderService.getMemberRepository(); System.out.println("memberService -> memberRepository = " + memberRepository1); System.out.println("orderService -> memberRepository = " + memberRepository2); System.out.println("memberRepository = " + memberRepository); assertThat(memberService.getMemberRepository()).isSameAs(memberRepository); assertThat(orderService.getMemberRepository()).isSameAs(memberRepository); } }
-
해결됨스프링 핵심 원리 - 기본편
OrderService를 테스트 하는데 MemberService도 꺼네서 사용하는 이유가 있을까요??
코드를 보면 조인만 하고 다른 동작은 안하는것 같은데 막상 MemberService 부분을 제외 해보면 NullPointException이 생겨서MemberService가 있어야만 예외가 안생기는지 궁금합니다@Test void createOrder() { Long memberId = 1L; Member member = new Member(memberId, "memberA", Grade.VIP); memberService.join(member); Order order = orderService.createOrder(memberId, "itemA", 10000); Assertions.assertThat(order.getDiscountPrice()).isEqualTo(1000); }
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
scanner input 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Scanner scanner와 Scanner input의 차이가 궁금합니다. 강의자료에는 Scanner input이라고 되어있는데 Scanner scanner를 사용해도 되는지도 궁금합니다.
-
미해결김영한의 실전 자바 - 중급 1편
생성자에서 객체 생성..?
public Car(String model, int chargeLevel) { this.model = model; this.chargeLevel = chargeLevel; this.engine = new Engine(this); }생성자에서 객체 생성하는 부분이 이해가 안돼요.CarMain에서 인스턴스 생성할 때 모델, 차지레벨 받는 거까진 이해가 되는데Car인스턴스에 엔진 필드를 새로운 엔진 객체로 받는건가요..?그리고 또 그 엔진 객체엔 this로 받는 게 car인건가요..?헷갈려서 어떻게 질문드려야할지도 잘 모르겠어요..
-
미해결김영한의 실전 자바 - 중급 2편
HashIndex() 와 capacity에 대해
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 듣던 중 의문이 생겨 질문 드립니다.메모리 최적화를 위해 value % capacity 를 통해 HashIndex 를 얻고, 이를 통해 메모리 최적화와 검색, 조회 속도 등에서 이점을 얻을 수 있다는 것은 이해가 됐습니다.그런데, List 의 배열 특성상, capacity가 동적으로 변하게 될텐데, 이에 따라 동일한 value 를 넣어도 다른 hashIndex가 만들어지지 않을까요?학습용이라 가장 심플한 방법으로 보여주신 것 뿐일까요?
-
해결됨스프링 핵심 원리 - 기본편
역할과 구현에 대해
회원 서비스의 역할이 회원 가입과 회원 조회라는 것은 알겠는데회원 가입과 회원 조회 그 자체가 구현이 되는 것인 가요?실무에서 글로만 요구 사항을 전달 받았을 때무엇을 역할로 지정하고 무엇을 구현으로 정하는지궁금합니다, 기준이 있다면 기준이 무엇인지 알고 싶습니다
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ChangeVarEx 어디서 복사해서 오신건가요
ChangeVarEx 이거를 어디서 갖고 오신건가요? 너무 빨라서 안보임...스캐너 ex에도 없는뎅..