묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨김영한의 실전 자바 - 중급 1편
사실상 final 변수에 관하여 (값의 변경에 관한 질문입니다)
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의를 보던 중 궁금한 점이 생겼습니다.사실상 final 변수는 (final 키워드를 넣은 것 처럼) 한 번 값이 설정되면 그 후에 값을 변경하지 못합니다.=> 질문에 대한 핵심은 다음과 같습니다. 그렇다면 인스턴스를 생성하기 전에 지역 변수의 값을 변경하는 건 괜찮지 않을까? 근데 왜 안될까? => 그렇게 생각한 이유는 다음과 같습니다.지역 변수를 캡쳐하는 시점은 (강의 속 LocalPrinter) 지역 클래스의 인스턴스 생성을 시도 한 후 입니다.(제 생각에,,) 코드는 위에서 아래로 읽기 때문에 Printer printer = new LocalPrinter(); 가 적혀져 있기 전에는 지역 변수의 값을 변경해도 되지 않을까? 하는 이유입니다.
-
해결됨김영한의 실전 자바 - 중급 1편
catch 문
catch 블록에서 예외를 처리할 때, 하위 클래스의 예외를 먼저 잡고, 그 다음에 상위 클래스의 예외를 잡는 순서는 체크 예외(checked exception)뿐만 아니라 언체크 예외(unchecked exception)에도 마찬가지로 적용되나요? 심지어 두개의 catch 블록이 실제 catch 를 못한다고 하더라도 애당초 compile error 가 발생하는 문제이기 때문에 항상 예외없이 클래스의 예외를 먼저 잡고, 그 다음에 상위 클래스의 예외를 잡는 순서로 진행해야 하나요 ?
-
미해결김영한의 실전 자바 - 중급 1편
catch 문 질문
제가 알기로는 catch 문이 2개가 있다면 하위 클래스의 캐치문을 먼저 잡고 그 뒤 superclass 의 catch 문을 잡아야한다고 들었습니다. 예로 catch(Exception e)catch( FileNotFoundException e) 이렇게 하면 무조건 100 프로 컴파일 에러가 나는데, 왜 이거는 에러가 발생하지 않는건가요? 제가 알기로는 ArithmeticException 이 IllegalArgumentException 의 상위 클래스로 알고 있거든요
-
미해결김영한의 실전 자바 - 중급 1편
Catch 문
package Practice; import java.util.Scanner; public class dd { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num = 10; int input = scanner.nextInt(); // 0을 입력 try { num = num / input; // 예외 발생 System.out.println("예외 발생 후"); } catch (NullPointerException e) { System.out.println("catch문 실행"); } catch (Exception e ){ System.out.println("Exception 예외 "); } System.out.println("try-catch 바깥 호출"); } }만약 이 코드에서 Scanner 로 0 을 입력했다고 하면 첫번째 catch 는 실패하고 두번째 캐치로 가는 구조인가요? 그리고 만약 첫번째 catch 에서 잡게 된다면 2번째 catch 는 실행될 가능성이 아예 없나요? 즉 2번째 catch 는 첫번째 catch 를 못 잡았다는 가정 하에서만 실행이 되나요?
-
미해결김영한의 실전 자바 - 기본편
reference values
이 배열 객체의 경우에는 해당 빨간줄을 실행하고나서는 객체값이 아직은 생성되지 않나요? 이 질문의 의도를 파악 못한거 같은데, 제대로된 질문이 되기 위해서는 book object references 가 아니라 temp의 모든 인덱스의 값들을 물어봐야하는거 아닌가요 ?
-
미해결스프링 핵심 원리 - 기본편
servlet/jsp 사전학습
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]servlet/jsp 사전학습 없이 이 강의를 들어도 될까요?
-
미해결스프링 핵심 원리 - 기본편
OrderServiceTest에서의 getDiscountPrice()오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]getDiscountPrice부분에서 자꾸 오류가 납니다 ㅜㅜOrder패키지에 있는 클래스와 인터페이스 모두 학습자료와 동일하게 코드 작성하였습니다.어느 부분이 문제인지, 어떻게 고쳐야 할지 모르겠습니다 ㅜㅜ참고로 alt+enter로 문제해결하려고 해보았으나, getDiscountPrice를 toString으로 바꾸라고 나옵니다 .. ㅜㅜ
-
미해결김영한의 실전 자바 - 기본편
실무에서 상수 사용
1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.실무에서 상수를 사용하는 경우 예를 들어 상수만 모아놓고 필요할 때 사용할 클래스를 만들 경우 일반 클래스에 상수들을 정의해서 사용하나요 아니면 인터페이스의 멤버 변수로 사용하나요?인터페이스로 할 경우 인스턴스 생성을 막을 수 있어 괜찮을거 같은데 실무에서는 주로 어떤 방법을 사용하나요?
-
미해결김영한의 실전 자바 - 기본편
인스턴스 이해
안녕하세요. 애당초 static int x 는 변수 일뿐, instances 가 아니라 저 질문 자체가 잘못된거 아닌가요?
-
미해결객체 지향 프로그래밍 입문
강의 수준 질문드려요
완강하긴 했는데 이해를 50% 정도 밖에 못한 것 같아요.자바의 정석 한번 다 보고, 스프링이랑 스프링부트 이제 막 공부하는 시점인데, 제가 부족한 건지 아직은 이 강의가 어렵네요.어느정도 공부한 시점에서 수강하는게 좋을까요?
-
미해결김영한의 실전 자바 - 중급 1편
instanceof 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요! 질문이 있어서 글 남깁니다.자바 기본편에서는 만약에 parent instanceof Child 라고 하면 Child child = new Parent() 이기 때문에 자식은 부모를 담을 수 없어 컴파일 오류가 발생했는데, 5분 06초 부분에서는 왜 obj instanceof Dog 는 dog.sound가 가능한 건가요?
-
해결됨김영한의 실전 자바 - 기본편
오타있어요.
caw -> cow로 바꿔야할 것 같습니다. 교재랑 예제 파일 다 caw로 되어있어요.
-
해결됨C개발자를 위한 최소한의 C++
차이점을 잘 모르겠습니다.
주신 프로그램 중 constructSelect.cpp 에서 디폴트 생성자를 지우면 에러가 발생하는데 virtualFunction 에서는 디폴트 생성자가 없어도 동작합니다. constructSelect.cpp 에서 선언 방식이 아닌 new 연산자를 사용해서 해봐도 에러가 발생하고객체 내에 멤버메서드가 없어서 그런가 해서 멤버를 만들어도 에러가 발생합니다VirtualFunction 내의 소멸자의 virtual 을 제거해도 이건 잘 작동합니다.눈으로 봐서는 도저히 차이점을 모르겠습니다.
-
해결됨C개발자를 위한 최소한의 C++
이동생성자 관련
안녕하세요. 선생님 이동 생성자 강의 내용 중 질문이 있습니다. (아래 코드 참고) delete pnData를 하면, 포인터 변수가 해제되어pnData = rhs.pnData;를 실행할 수 없는 것이 아닌지 궁금합니다. 실재로는 포인터 값은 그대로고, 가리키는 값(int 0)만 삭제되는 것인가요? 포인터 값은 놔두고 가리키는 값만 없애는 문법은 어떻게 되나요? delete를 안하고, pnData = nullptr; 로만 수정해도 됬을 것 같습니다. class TestData { public: TestData(){ pnData = new int(0); } ... TestData(TestData&& rhs) noexcept{ delete pnData; pnData = rhs.pnData; rhs.pnData = nullptr; } ... TestData& operator=(TestData&& rhs) noexcept{ delete pnData; pnData = rhs.pnData; rhs.pnData = nullptr; } }
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
섹션 7. 문제와 풀이 4 마지막 문제
상품 구매와 총 결제 금액 나타내는 마지막 문제를 switch로 풀어봤는데 프로그램 종료가 되지 않습니다.뭐가 문제인지 봐주실 수 있나요?case 1~2, 4에서 break; 를 거는 게 맞는 건가요?ㅠ 사실 break;를 걸어도 계속해서 돌아가요ㅠㅠif문으로 풀었을 때는 break;를 만나면 제대로 나가지는데 swtich는 왜 이런 건가요ㅠㅠpublic static void main(String[] args) { Scanner scanner = new Scanner(System.in); int totalCost = 0; while (true) { System.out.println("1 : 상품 입력, 2 : 결제, 3 : 프로그램 종료"); int option = scanner.nextInt(); switch (option) { case 1 : scanner.nextLine(); System.out.print("상품명 : "); String name = scanner.nextLine(); System.out.print("가격 : "); int price = scanner.nextInt(); System.out.print("수량 : "); int quantity = scanner.nextInt(); int cost = price * quantity; totalCost += cost; System.out.println("상품명 : " + name + " 가격 : " + price + " 수량 : " + quantity + " 합계 : " + cost); continue; case 2 : System.out.println("총 비용 : " + totalCost); totalCost = 0; continue; case 3 : System.out.println("프로그램을 종료합니다."); break; default : System.out.println("올바른 옵션을 선택해주세요."); continue; } } }
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
for문 중첩(피라미드 *)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.<반복문 문제풀이2 7분 29초>j <= i 부분이 이해가 안됩니다.i가 i++로 증감이 되지만 j도 마찬가지로 j++로 증감되어서 i가 1일 때 j도 1i가 2일 때 j도 2i가 3일 때 j도 3 인 거 아닌가요??
-
해결됨김영한의 실전 자바 - 기본편
알고 있던 내용과 달라서 조금 혼동됩니다.
안녕하세요 영한님. 자바를 복습하고 있는 학생입니다. 이번 파트 정말 이해가 잘 되게 설명해주셔서 내용을 이해하는데는 어려움이 없었는데 기존에 알고 있던 지식때문인지 혼동되는 부분이 있어 질문드립니다. 기존에 알고 있는 지식은 자식 인스턴스 생성시 '부모의 필드 값과 가상 메서드 테이블 등의 메타 정보를 포함하는 하나의 인스턴스 생성'이었습니다. 그런데 이번 강의 내용에선 '외부에서 볼때는 하나의 인스턴스를 생성하는 것 같지만 내부에서는 부모와 자식 모두 생성되고 공간도 구분'이라고 하셨습니다. 그렇다면 이 문장을 '부모부터 자식 클래스까지의 모든 인스턴스를 생성'이라고 봐야하나요? 아니면 '부모부터 자식까지의 모든 메타 정보를 포함하는 하나의 인스턴스를 생성'이라고 봐야하나요? 뒤에서 배울 super()를 통해 자식 인스턴스 생성시 부모 생성자를 필수로 호출하므로 '모든 인스턴스'를 생성하는 것도 말이 될 거 같지만 만약 모든 인스턴스를 메모리에 생성한다면 메모리가 비효율적으로 사용되는 것도 같아 이 부분이 좀 헷갈립니다.
-
미해결김영한의 실전 자바 - 중급 1편
Period, Duration
안녕하세요 강의 듣던중 궁금한게 생겼는데Period, Duration을 사용하지 않고LocalDateTime으로만 대체 가능한거 아닌가요 ?? 특별히 Period, Duration 객체를 사용하는 이유가 있을까요 ? 대체가 가능하다면용도가 달라서 만든 객체라고 생각하면 될까요 ??
-
미해결스프링 핵심 원리 - 기본편
setter 주입 시의 생성자
클래스에 생성자가 단 1개 존재하는 경우 @Autowired를 생략할 수 있다고 하셨는데, 이는 생성자 주입을 하는 경우에만 해당하는걸까요? setter 주입을 하기 위해 OrderServiceImpl에 setter를 정의하고 각 setter에 @Autowired를 붙였다면, 이때는 생성자 주입이 아닌 setter 주입이 이뤄지는 걸까요? 제가 추가적으로 OrderServiceImpl의 생성자에 출력문을 두었더니 memberRepository에 스프링 컨테이너에 존재하는 MemoryMemberRepository 객체의 주소값이 들어왔습니다... 생성자 주입도 이뤄지고 setter 주입도 이뤄지는 건가요...?public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { System.out.println("OrderServiceImpl.OrderServiceImpl"); System.out.println("memberRepository = " + memberRepository); this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; }
-
미해결스프링 핵심 원리 - 기본편
수동 빈 등록 vs 수동 빈 등록
수동 빈 등록 vs 수동 빈 등록에 대해 다루시지 않았다는 점이 궁금해서 질문드립니다. 제가 생각한 이유는 다음과 같은데, 실무 경험이 없어서 오류가 있을 것 같은데 오류 알려주시면 감사하겠습니다. 보통 애플리케이션의 설정 클래스는 1개 만들고, 이 클래스 내에서 여러 메서드(빈 등록 메서드)를 정의합니다. 중복되는 이름을 가진 메서드(= 빈의 이름이 중복됨)를 정의하면 자바 언어 차원에서 메서드 중복 정의되었다고 컴파일 오류로 알려주기 때문에 빈 이름(= 메서드 이름)을 중복 정의할 일이 없기 때문입니다.그런데, 생각해보면 @Bean도 name 옵션을 통해 빈 이름을 변경할 수 있고, 그렇다면 수동 빈 등록 시에도 빈 이름 중복 문제가 발생하는데 수동 빈 등록 vs 수동 빈 등록에 대해 다루시지 않는 이유가 무엇인가요? 혹시 자동 빈 등록보다 수동 빈 등록을 사용할 일이 적어서 그러한 것인가요?