44,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결김영한의 실전 자바 - 기본편
다형성 참조에 관하여 질문 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.Parent poly = new Child();이코드가 부모에 자식을 참조 할 수 있다는건 알겠습니다. 그런데 근본적으로 코드가 해석이 명확히 안됩니다.Parent타입의 변수 poly를 선언하고 poly에 Child클래스의 객체를 생성후 그 객체의 참조값을 대입을 한건가요? 그럼 이 그림에서 Parent poly = new Child(); 이 코드를 작성시 메모리에 Parent도 생성이 되는걸로 나와있는데 Child객체만 생성된거 아닌가요? Parent도 메모리가 할당되는 이유가 궁금합니다. 그리고 자식의 기능을 호출 할 수 없다고 하셨는데 poly에 결과적으로 Child객체의 참조값이 대입된거 아닌가요? 그러면 참조값을 찾아서 메소드를 호출 할 수 있는거 아닌가요?
- 미해결김영한의 실전 자바 - 기본편
다형적참조와 메서드 오버라이딩 관련해서 질문있습니다!!
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요! 강의 너무 잘보고있습니다 ㅎㅅㅎ다형적 참조에서 궁금한 점이 있어 질문 드립니다!사진처럼 Child에서 Parent 메서드를 오버라이딩 했습니다. 인스턴스는 Child로 생성했고,parent 변수에 업캐스팅 해주어 Parent type으로 변경했습니다. 근데 결과가 부모(Parent)의 parentMethod()가 실행될줄 알았는데 오버라이딩 된 자식의 메서드가 실행되었습니다..!저는 위의 그림처럼 될것이라고 생각했습니다.강의에서도 자식방향으로는 내려갈 수 없다고 하셨고,같은type인 Parent 인스턴스 부터 메서드를 찾아서부모의 parentMethod가 실행될줄알았는데어째서 밑으로 내려간 것인지 궁금합니다!! 추가로)instanceof (5:00쯤) 강의에서도자식방향으로 내려갈수 없으니 다시 다운사이징 해줘서child.childMethod()를 호출했다고 이해했습니다. 다른질문글을 찾아보긴했는데 컴파일시, 런타임시에 뭔가 다다고하셨고오버라이딩은 런타임 때에 알수있어서라는 식의 답변을 보았는데 이해가 안돼서 질문드립니다 흑흑.. 설명해주시기 너무길면 어떤 개념을 찾아보아야 하는지 알려주실수있을까요!!
- 미해결김영한의 실전 자바 - 기본편
섹션9상속-상속과 메모리 구조 질문있습니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 강사님! 강의 너무 잘 보고 있습니다 짱...섹션9상속-상속과 메모리 구조 10분 전후 내용에서 질문이있습니다!이 페이지에서 그림에서ElectricCar 부분에 move()가 없으니Car부분으로 가서 move()를 찾잖아요!(현재 타입에서 기능을 찾지 못하면 상위 부모 타입으로 가서 찾는다!) 만약에 Car에도 뭔가 상속이있었고,Car의 부모에도 상속이있었고.. 이처럼Car위에도 상속이 이어졌을경우 그림의 Car네모칸안에 위의 부모 객체들도 여러개 생성되는 건가요??(초록 = Car의 부모 'CCar 객체'회색 = CCar1의 부모 'CCCar2객체'.. )모든 기능을 이용 가능해야 하니까저는 위의 그림처럼 되어야 한다고 이해했는데맞는지 궁금해서 질문 올립니다!! 아직 뒤의 강의를 안봐서 중복된 내용일수도 있는점 미리 사과드립니당..//
- 미해결김영한의 실전 자바 - 기본편
static 메서드와 this 관련해서 질문이 있습니다.
public class DecoData { private int instanceValue; private static int staticValue; public static void staticCall() { System.out.println(this.instanceValue); } .... }안녕하세요! 강의에서 "static 영역 입장에서 힙 영역에 있는 인스턴스의 참조값을 몰라서 인스턴스 변수에 접근할 수 없다." 라고 얘기를 해주셨는데 그러면 this는 클래스 본인의 인스턴스 참조값이니 이 this를 이용하면 static 메서드에서도 인스턴스 변수에 접근할 수 있지 않을까? 라는 생각을 해서 코드를 짰는데 오류가 났습니다. 왜 static 메서드 영역에서 this를 사용해도 인스턴스 변수에 접근할 수 없나요?감사합니다.
- 미해결김영한의 실전 자바 - 기본편
예외처리
학교 수업에서 예외처리를 먼저 진도 나가서 그러는데, 예외 처리의 경우에만 중급편 앞쪽 강의를 건너뛰고 예외처리 먼저 들어도 괜찮을까요? 그리고 고급편 강의에서는 어떤 것을 다뤄주실 예정이신지 대략적으로라도 여쭤볼 수 있을까요 ?!!!!
- 미해결김영한의 실전 자바 - 기본편
import관련 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.패키지 import를 할때 import는 하나만 할 수 있다고 하셨는데 a패키지와 b패키지에 클래스명이 User로 같아서 하나만 할 수 있다는건가요? 직접해보니까 c라는 패키지를 만들어서 클래스명을 User로 안하니까 import가 되더라고요 만약 그렇다면 강의에서 보통 자주쓰는 패키지를 임포트하고 다른 패키지는 풀네임으로 쓴다고 하셨는데 그냥 클래스명만 조금 바꾸고 둘다 임포트해서 쓰는게 더 낫지 않나요?
- 미해결김영한의 실전 자바 - 기본편
블로그 포스팅 관련 질문입니다.
안녕하세요 김영한 선생님.Node 계열로만 개발 하다가 Spring을 시작하게된 학생입니다.블로그에 정리를 하면서 수강을 할까 싶은데 강의 화면을 캡처해서 부연설명을 다는 식으로 포스팅을 하면 문제가 될까 싶어 먼저 여쭤봅니다..!
- 미해결김영한의 실전 자바 - 기본편
섹션2 문제와풀이 ProductOrderMain3 문제 이렇게 풀어보았습니다.
package ref.ex; import java.util.Scanner; public class ProductOrderMain3 { static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { System.out.print("입력할 주문의 개수를 입력하세요: "); int arrayLength = scanner.nextInt(); ProductOrder[] orders = createOrder(arrayLength); printOrders(orders); System.out.println("총 결제 금액: " + getTotalAmount(orders)); } static ProductOrder[] createOrder(int arrayLength) { ProductOrder[] orders = new ProductOrder[arrayLength]; for (int i = 0; i < arrayLength; i++) { orders[i] = new ProductOrder(); scanner.nextLine(); System.out.println((i + 1) + "번째 주문 정보를 입력하세요."); System.out.print("상품명: "); orders[i].productName = scanner.nextLine(); System.out.print("가격: "); orders[i].price = scanner.nextInt(); System.out.print("수량: "); orders[i].quantity = scanner.nextInt(); } return orders; } static void printOrders(ProductOrder[] orders) { for (ProductOrder order : orders) { System.out.println("상품명: " + order.productName + ", 가격: " + order.price + ", 수량: " + order.quantity); } } static int getTotalAmount(ProductOrder[] orders) { int totalAmount = 0; for (ProductOrder order : orders) { totalAmount += order.price * order.quantity; } return totalAmount; } }다 풀고 선생님 풀이 보니까 훨씬 간결하게 느껴지네요 ㅠㅠ 메인 메소드를 줄이려고 배열을 생성하고 사용자가 값을 넣는 부분을 메인 메소드 밖에 만드려고 시도하였습니다. 그러다보니 스캐너를 클래스범위에서 생성해야했었고 createOrder메소드의 타입과 매개변수도 바꾸는 등 대대적으로 다 바꾸는 고생을 해야 했습니다 하면서 사용자가 값을 입력하는 부분과 그걸 받아서 배열에 집어넣는 부분을 구분하여 메소드를 하나 더 만드는게 좋다고 생각했으나 하다보니 산으로 가버려서 createOrder메소드가 지나치게 많은 역할을 하고 커져버린 것 같습니다. 피드백 부탁드립니다!
- 미해결김영한의 실전 자바 - 기본편
jdk 버전 21
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의에서는 21버전 Oracle OpenJDK를 사용하라고 하셨는데 제 화면에는 (21버전) OracleGraalVM 만 뜨는데 이걸로 사용해도 무방한가요? 상관없어보이지만 혹시나 해서 궁금한 마음에 여쭤봅니다!
- 미해결김영한의 실전 자바 - 기본편
부모(Item) 클래스의 생성자 및 메서드의 접근 제어자가 public인 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 강의 잘 듣고 있습니다.해당 강의에서 부모 클래스인 Item의 생성자 및 print(), getPrice()메서드에 대한 접근제어자를 public으로 설정하셨습니다.제 생각에는 ShopMain 클래스에서 부모 클래스에 접근할 때에는 모두 Item의 자식(book, album, movie)을 통해서만 접근하는 상황이고 이러한 접근 방식이 옳다고 판단되어서 부모 클래스의 생성자 및 메서드의 접근 제어자를 protected로 설정하였습니다(당연하게도 해당 예제에서 실행 결과는 public으로 했을 때와 동일합니다).이 경우에 언젠가는 자식 클래스를 통해 접근하지 않을 경우가 발생할 수 있기 때문에 public으로 설정을 하신 걸까요? 아니면 protected로 설정하는 것이 조금 더 논리에 맞는 걸까요?package extends1.ex; public class Item { private String name; private int price; protected Item(String name, int price) { this.name = name; this.price = price; } protected void print() { //이름과 가격은 모든 자식에서 동일하게 수행하는 기능이므로 부모에 구현 System.out.println("이름:" + name + ", 가격:" + price); } protected int getPrice() { return price; } }
- 미해결김영한의 실전 자바 - 기본편
오버라이딩의 조건
왜 오버라이딩하는 메서드의 접근 제어자는 부모 클래스의 메서드보다 더 제한적이면 안되는 건가요??
- 미해결김영한의 실전 자바 - 기본편
기본형참조형 문제풀이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]문제 풀이 중 gettotalamount 메서드 부분에서 인트(int)반환을 돌리는 것과 보이드(void) 반환타입이 없게 해서 sysoutprint 를 바로 적어서 하는 것 차이는 뭔가요?
- 미해결김영한의 실전 자바 - 기본편
참조값에 대한 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.제가 제대로 이해했는지 답변 부탁드립니다.Student student1 = new Student(); 이부분에서 Student 클래스에 새로운 객체가 생성되고 student1라는 변수에는 생성된 객체가 아닌 객체의 참조값(메모리에 저장된 위치)이 저장된것이 맞나요?students[0] = student1; 에서는 student1에는 참조값이 들어가있는 상태이고 students[0]에 student1의 참조값이 그냥 대입되는 것이 아니라 복사된 참조값이 대입된다는 것이 맞나요? 결과적으로 김영한님이 주의해야한다는 것이 정확히 무언이지를 모르겠습니다. 12:00의 주의! 변수에는 인스턴스 자체가 들어가있는 것이 아니다! 부분에서 인스턴스가 복사되어 대입되는것 이라고 생각하더라도 문제가 될 것이 있나요?
- 해결됨김영한의 실전 자바 - 기본편
강의 시간에 사용하는 메모장에 대한 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]안녕하세요. 강의 항상 잘 듣고 있습니다.강의와는 상관없는 질문입니다만 수업시간에 사용하는 메모장? 어플인가요?? 아니면 맥에 기본으로 있는 메모장인걸까요??깔끔해보여서 질문드립니다.
- 미해결김영한의 실전 자바 - 기본편
중급
혹시 hasNextLine() , while(hasNext()) 이런건 다음 중급 강의에서 다뤄주시나요/ 다뤄주신다면 몇강에서 다뤄주시나요?
- 미해결김영한의 실전 자바 - 기본편
static 메소드 안에 지역 변수
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 제가 이해한게 맞는지 확인하고자 질문 남깁니다.static 메소드와 변수는 메소드 영역에 저장이 되는데 그렇다면 static 메소드 안에서 생성된 지역 변수는 stack 영역에 할당되는 것인가요? 아니면 함께 메소드 영역 내부에 저장이 되나요?
- 미해결김영한의 실전 자바 - 기본편
인터페이스 객체 생성
안녕하세요! 인터페이스와 메모리 구조에 관련된 질문이 있습니다.강의를 통해서 인터페이스를 구현한 클래스의 객체를 생성하면힙에는 인터페이스 객체(x001), 클래스 객체(x002)가 함께 생성된다고 이해했습니다.(x000<시작 주소>이라는 공간 안에 x001과 x002가 함께 있는 형태)상속의 경우, 부모 클래스 객체와 자식 클래스 객체가 같은 공간에 생성된다는 것이 명확히 이해가 되는데인터페이스의 객체가 생성된다는 것이 정확한 표현인 것인지, 설명을 위한 개념인지 궁금합니다.인터페이스는 인스턴스 멤버가 없는 추상메서드만 존재하기에 인스턴스화 된다는 거 자체가 이해가 안돼서요..혹시 가상 메서드 테이블이 존재하는 메모리 공간이 형성되는데 이것을 인터페이스 객체라고 표현하신 걸까요?그렇다면 참조변수를 인터페이스 타입으로 했을 때는 인터페이스 메서드테이블을 먼저 확인하고,오버라이딩 된 클래스의 메서드를 호출하며참조변수를 클래스 타입으로 했을 때는해당 클레스의 메서드 테이블을 바로 확인하고 클래스의 오버라이딩 된 멤버 메서드를 호출한다.위와 같은 이해가 맞는 것인지 궁금합니다. 감사합니다.
- 해결됨김영한의 실전 자바 - 기본편
부모는 자식을 담을 수 있지만 자식은 부모를 담을 수 없는 이유
[질문 내용]다형적 참조 시 부모 클래스는 자식 클래스를 참조하여 대입할 수 있으나, 자식 클래스는 부모 클래스를 참조하여 대입할 수 없는 부분에 대해 좀 더 작동 원리를 이해하고 싶어서 질문드립니다. 예시)Parent a= new Child(); -> 실행 가능Child b = new Parent(); -> 실행 불가. 컴파일 에러 발생. 위와 같이 규칙이 정해진 이유는하위 클래스는 인스턴스 생성 시 상위 클래스 생성자를 무조건 호출하여 인스턴스 내에 상위 클래스, 하위 클래스 정보가 모두 존재하는 반면, 상위 클래스는 인스턴스 생성 시 본인의 인스턴스만 생성하기 때문에 인스턴스 내부에 상위 클래스 정보밖에 존재하지 않아 하위 클래스 데이터 타입에 해당 인스턴스 참조값을 대입할 수 없는거라고 이해하면 될까요? 상기 작동 방식이 결국엔 다운캐스팅을 명시해야하는 이유와 일맥상통하는 것 같은데 제가 정확하게 이해한건지 모르겠습니다.
- 미해결김영한의 실전 자바 - 기본편
스택영역과 힙영역 질문입니다.
[질문 내용]여기에 질문 내용을 남겨주세요. 제가 이해력이 안좋아서 자꾸 질문을 남기게되네요 ㅠ method1()의 스택프레임이 제거되고 지역변수 data1도 함께 제거되었다. 여기는 이해가 갑니다. Data data1 = new Data(10);으로 만들어 져서 data1은 참조값 x001을 갖고 있고 Data의 인스턴스라는 것과 메서드 내에서 사용했기 때문에 data1은 지역변수라 칭한것도 이해가 됩니다. 하지만정리 부분에 // 지역 변수는 스택 영역에, 객체(인스턴스)는 힙 영역에 관리되는 것을 확인 했다.// 이 부분에서 지역 변수라 하면 data1이고 또 객체라 하면 Data인스턴스에 data1의 참조값을 지칭하는 말 일텐데 제가 제대로 이해하지 못한 부분이 있나 싶습니다.
- 미해결김영한의 실전 자바 - 기본편
상속과 접근제어지 질문
첫번쨰 질문child 클래스, parent 클래스,메인메소드 있는 클래스 가 있을떄 서로 각각 다른 패키지라고 할떄Child c = new Child(); 일떄 c.protectedmethod(); 왜 이 코드는 실행이안되나요 상속받았으니 부를수있는거아닌가요 ?두번쨰 질문 parent 클래스,메인메소드 있는 클래스는 같은 패키지이지만 child 클래스혼자만 다른 패키지소속 일경우메인메소드에서 c.protectedmethod(); 작동 , c.publicmethod(); 도 당연히 작동 근데 여기서 c.protectedmethod() ; c 가 상속받은 클래스 의 객체여서 되는건지( 그리고 왜 첫번쨰와 세번쨰의 경우는 c.protectedmethod();가 실행이안되는지도 궁금합니다)같은 패키지여서 되는것인지는 알지못함 그리고 Parent p = new Parent(); 일떄 p.defaultmethod();는 불러져도 c.defaultmethod();는 안됨 - 메인메소드와 부모 클래스가 같은 패키지여도 자식 클래스는 다른 클래스여서 디폴트는 안되는게 맞다고 생각하면되나여 ?세번쨰 질문이번엔 child 와 메인메소드가 같은 패키지일떄 parent 혼자 다른 패키지 이떄는 메인 메소드에서c.protectedmethod(); 는 왜 안돨까요? 상속 받으면 되는 걸로 알고있는데 publicmethod 는 불러지고 default 는 같은 패키지가 아니니까 못부른다 쳐도 c.protectedmethod(); 는 작동해야하는거아닌가요 헷갈립니다