44,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결김영한의 실전 자바 - 기본편
equals method
저는 강의를 듣고 문제를 풀다가 이러한 equals 메서드를 보게 되었습니다.제가 생각 하기로는 public boolean equals( Date obj){ } 로 하는게 다운 캐스팅을 할 필요도 없고, 더 편할 것 같은데 특별한 이유가 있나요 ?
- 미해결김영한의 실전 자바 - 기본편
생성자 호출과 스택
public class JavaMemoryMain2 { public static void main(String[] args) { method1(); } static void method1() { Data data1 = new Data(10); method2(data1); } }스택 영역에 main 스택 프레임이 쌓이고, method1() 호출 통해 method1 스택 프레임이 쌓이고 난 후에 new Data(10)에서 생성자를 호출할 때도 스택 영역에 Data 스택 프레임이 쌓이고 생성자 호출이 종료되는 즉시 Data 스택 프레임이 제거되는게 맞을까요? 그니까 method1 스택 프레임이 쌓이고, method2 스택 프레임이 쌓이기 전에 Data 스택 프레임이 쌓이고 제거되는 것이죠. 혹시 이게 맞을까요??
- 미해결김영한의 실전 자바 - 기본편
default 클래스 질문
한 파일에 public이 붙은 클래스는 2개 이상이 아닌 단 1개만 존재할 수 있다는 것은 알겠습니다. 그런데, public이 붙은 클래스가 0개 존재할 수 있는지(= default가 붙은 클래스만 존재함), 실제로 이러한 경우가 실무에서도 존재하는지 질문드립니다.클래스 파일을 만든 후에 public을 제거했더니 문제가 발생하지는 않았습니다. 실무에서도 public이 안 붙은 클래스 파일이 존재하는 경우가 있나요?
- 미해결김영한의 실전 자바 - 기본편
강의교안 생성자 파트 질문
new MemberConstruct("user1", 15, 90);강의 교안에 '여기서는 Member 인스턴스를 생성하고 바로 MemberConstruct(String name, int age, int grade) 생성자를 호출한다.'라고 나와있는데요. MemberConstruct 인스턴스를 생성하고 MemberConstruct(String name, int age, int grade) 생성자를 호출한다고 이해하면 되는걸까요?
- 해결됨김영한의 실전 자바 - 기본편
섹션2. 문제와 풀이
productOrderMain의 리펙토링 문제입니다.문제에서'static void printOrders(ProductOrder[] orders) 배열을 받아서배열에 들어있는 전체 ProductOrder 의 상품명, 가격, 수량을 출력합니다.'라고 하는데 배열을 받는 다는 게 뭔가요?매개변수 자리에 배열을 놓고 호출할 때도 배열 변수를 놓는 게 뭘 불러오고 대입이 되는 건지 이해가 되지 않습니다.ㅠㅠ저는 for each 문이 아니라 그냥 for문으로 풀어보려 했는데 메서드에 배열을 받는다는 게 뭔지 몰라서 그냥 for문으로 어떻게 풀어야할지 모르겠습니다.printOrders(orders);static void printOrders(ProductOrder[] orders) { for (ProductOrder order : orders) { System.out.println("상품명: " + order.productName + ", 가격: " + order.price + ", 수량: " + order.quantity); } }
- 미해결김영한의 실전 자바 - 기본편
하위 package 생성시 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]class1 패키지 하위로 ex패키지를 만드려 하는데 하위로 들어가는 게 아닌 별도로 따로 패키지가 생성되는데 어떤 항목을 재설정해야할까요??
- 해결됨김영한의 실전 자바 - 기본편
섹션2. 참조형과 메서드 호출 - 활용
package refMethod2에서 학생의 정보를 바로 입력하는 메서드를 만들어서 참조값을 반환해서 사용하신다고 했는데, 메서드를 호출하고 수행한 뒤에 끝나면 메모리에서 사라지는 거 아닌가요?ㅠㅠcreatStudent메서드를 호출하면Student 객체를 생성하고이름, 나이, 성적을 넣은 뒤Student 객체의 참조값을 반환하는데메서드가 종료돼서 Student의 객체는 사라져서 참조값이 있어도 사용하지 못하는 게 아닌가해서요... 입문편 메서드 pdf에 이렇게 써있어서요!'메서드 호출이 끝나면 더 이상 해당 메서드가 사용한 메모리를 낭비할 이유가 없다. 메서드 호출이 끝나면 메서드 정의 에 사용한 파라미터 변수인 int a , int b 는 물론이고, 그 안에서 정의한 int sum 도 모두 제거된다.'
- 미해결김영한의 실전 자바 - 기본편
List<String> list = new ArrayList<>(); 이와 같이 작성하는 이유를 알고 싶습니다.
다형성 부분을 배우다보니 비슷한 맥락일 것 같아서요.. 하지만 확실히 이해되지는 않습니다.보통 Map, List를 사용할 때 위와같이 작성하는데, 위와같이 작성할 경우 부모클래스에 있는 method만 사용가능하면서 오버라이딩된 형태로 쓰이잖아요. 그런데 왜 굳이 앞에 부모클래스를 적어주는 걸까요?
- 해결됨김영한의 실전 자바 - 기본편
패키지 생성
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.선생님께서 패키지를 생성하실 때 com.helloshop이라고 생성하시면 인텔리제이에서 자동으로 com이라는 패키지를 만들고 그 밑에 helloshop이라는 패키지를 만들어 주던데 저는 그냥 com.helloshop이라는 패키지 생성됩니다.어떤 세팅을 바꿔야 하는지 알고 싶습니다!
- 미해결김영한의 실전 자바 - 기본편
Student 에 대한 질문이에요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. [질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요? Student class 의 Student변수 선언의 Student객체 생성의 Student각 Student는 의미가 다른데 교재에서 계속 변수, 클래스, 객체 'Student'로 반복되니까 엉키게 되네요 <질문>1. 위 3개는 같은 명으로 해야 하는 약속인가요?, 혹시클래스의 Student는 classStudent변수선언의 Student는 varStudent객체생성의 Student는 objStudent 식으로 구분하기 쉬운 명으로 변경해도 되나요?클래스와 객체생성의 Student는 같아야 할 것 같긴 한데..입문자 질문이라 양해 구합니다^^
- 미해결김영한의 실전 자바 - 기본편
Class 도입과정에서 오류가나타납니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.Student 클래스를 같은패키지 안에 여러번 다시만들어도 저렇게 인식을못하는데어디가 문제일까요? 인텔리제이 오류코드는C:\java_study\Java-basic\src\Class1\ClassStart3.java:7:24java: cannot find symbol symbol: class student location: class Class1.ClassStart3라고나옵니다.
- 미해결김영한의 실전 자바 - 기본편
Caw(X) Cow(O) 오타 수정할 곳이 많은데 어떡하죠?
제곧내
- 미해결김영한의 실전 자바 - 기본편
Arrays.sort
우리는 만약 int[] a = {1,3,2} ; 라고 주어졌다면 Arrays.sort(a) ; 를 하면 되는 것으로 알고 있습니다. 그런데 AudioBook 의 경우에는 사용자가 정의한 객체이기 때문에 sort 의 기준이 명확하지 않아 compareTo 메서드를 사용해야하는 것으로 알고 있어요. 그런데 여기서 AudioBook 객체가 Comparable class 를 반드시 implements 해야하는 이유는 그래야 Arrays.sort() 를 이용할 수 있기 때문인가요? 만약 implements 없이 그냥 사용하면 Arrays.sort() 에서는 compareTo 를 활용해야한다는 인식 자체를 못하는 건가요? 아래에는 제가 질문을 하게끔 만든 코드입니다. public class Books { //----------------------------------------------------------------- // Creates a AudioBookCollection object and adds some books to it. Prints // reports on the status of the collection. //----------------------------------------------------------------- public static void main (String[] args) { AudioBookCollection library = new AudioBookCollection(); library.addBook("The Kaiju Preservation Society", "John Scalzi", "Will Wheaton", 25.99, 482); library.addBook("Revenger", "Alastair Reynolds", "Clare Corbett", 22.94, 880); library.addBook("Klara and the Sun:A Novel", "Kazuo Ishiguro", "Sura Siu", 24.50, 616); library.addBook("Endurance: Shackleton's Incredible Voyage", "Alfred Lansing", "Simon Prebble", 21.83, 620); library.addBook("Barbarian Days: A Surfing Life", "William Finnegan", "William Finnegan", 21.99, 1088); System.out.println(library); library.sort(); System.out.println(library); } } import java.text.NumberFormat; import java.util.Locale; import java.util.Arrays; public class AudioBookCollection { private AudioBook[] collection; private int count; private double totalCost; /*----------------------------------------------------------------- * Constructor: Creates an initially empty collection. *----------------------------------------------------------------*/ public AudioBookCollection () { collection = new AudioBook[100]; count = 0; totalCost = 0.0; } /*----------------------------------------------------------------- * Adds an audio book to the collection, increasing the size of the * collection if necessary. *----------------------------------------------------------------*/ public void addBook (String title, String author, String readBy, double cost, int minutes) { if (count == collection.length) this.increaseSize(); collection[count] = new AudioBook(title, author, readBy, cost, minutes); totalCost += cost; count++; } /*----------------------------------------------------------------- * Returns a report describing the Book collection. *----------------------------------------------------------------*/ public String toString() { Locale usa = new Locale("en", "US"); NumberFormat fmt= NumberFormat.getCurrencyInstance(usa); String report = "~~~~~~~~~~~~~~Wow Cool~~~~~~~~~~~~~~~~~~~~~~~\n"; report += "My Audio Book Collection\n\n"; report += "Number of Books: " + count + "\n"; report += "Total cost: " + fmt.format(totalCost) + "\n"; report += "Average cost: " + fmt.format(totalCost/count); report += "\n\nBook List:\n\n"; for (int i = 0; i < count; i++) report += collection[i] + "\n"; return report; } public void sort() { Arrays.sort(collection,0,count); } //----------------------------------------------------------------- // Increases the capacity of the collection by creating a // larger array and copying the existing collection into it. //----------------------------------------------------------------- private void increaseSize () { AudioBook[] temp = new AudioBook[collection.length*2]; for (int i = 0; i < collection.length; i++) temp[i] = collection[i]; collection = temp; } } import java.text.NumberFormat; import java.util.Locale; public class AudioBook implements Comparable<AudioBook> { private String title, author, readBy; private double cost; private int minutes; //----------------------------------------------------------------- // Creates a new audio book with the specified information. //----------------------------------------------------------------- public AudioBook (String title, String author, String readBy, double cost, int minutes) { this.title = title; this.author = author; this.readBy = readBy; this.cost = cost; this.minutes = minutes; } //----------------------------------------------------------------- // Returns a string description of this audio book. //----------------------------------------------------------------- public String toString() { // for formatting money NumberFormat fmt= NumberFormat.getCurrencyInstance(Locale.US); // instead of using the ready-made Locale.US we could also create our own // Locale usa = new Locale("en","US") // try looking up country locale codes on the web! // for formatting strings String description; description = String.format(fmt.format(cost) + "\t" + minutes + "\t" + "%-20s" + "\t" + "%-50s",author,title); return description; } // compare based on book length public int compareTo(AudioBook other) { int answer = 0; if (this.minutes<other.minutes){ answer = -1; } if (this.minutes>other.minutes){ answer = 1; } return answer; } }
- 미해결김영한의 실전 자바 - 기본편
Static instance
이 강의를 보면 Data3 type 의 인스턴스가 3개 만들어지는 동안 count 는 단 하나의 인스턴스를 만든 것인가요?
- 미해결김영한의 실전 자바 - 기본편
접근제어자와 this
public class Ant { private int age ; public Ant(int age){ this.age = age ; // this 는 Ant 메서드를 부른 객체의 참조값 인데, x001.age 로 private 접근 제어자에 접근 불가 아닌가 ? } }this 는 Ant 메서드를 부른 객체의 참조값 이라고 알고 있습니다. 그렇다면 예를 들어 x001.age 와 같이 나타날텐데 private 접근 제어자라 필드 변수에 사실 접근할 수 없지 않나요 ? 생성자에서의 접근은 예외로 인정해주는 건가요 ?
- 미해결김영한의 실전 자바 - 기본편
super
만약 child 가 parent 를 상속받았을때 constructor 에서 super() ; 를 언급해줘야 하는데. 만약 child 가 기본 생성자이고, 부모의 생성자 역시 기본 생성자이면 굳이 명시적으로 적지 않아도 상관 없나요 ? Public class Parent{private int age ; } public class Child extends Parent{private int age ; } 이런 식으로만 작성해도 상관없나요 ?
- 미해결김영한의 실전 자바 - 기본편
Static
public class PrintWritterr { public static void main(String[] args) { int x = 5 ; int y = change(x) ; System.out.println(x); System.out.println(y); } public static int change(int x){ x= x + 5 ; return x ; } }여기에서 왜 x 의 값은 변하지 않나요 ? 저는 x 역시 10 이 출력될거라 생각했는데, 5가 출력되는 이유를 모르겠습니다. 제가 추측키로는 아래 public static int change(int x){ x= x + 5 ; return x ; } } 이거는 메서드 영역에서 관리되는데에 반해 메인 메서드의 x 는 다른 곳에서 관리되기 때문인가요 ? 예를 들면 우리는 public class Account { private int balance ; public void deposit(int amt ){ balance += amt ; } public void withdraw(int amt){ if(balance >=amt) { balance -= amt; } else{ System.out.println("잔액 부족"); } } public void getBalance(){ System.out.println("잔고: "+balance); } } 이 클래스에서는 메서드에 저장된 값이 balance 에 계속 영향을 준다는 것을 알고 있습니다.근데 윗 케이스는 아래 메서드가 영향을 주지 못하는 이유를 모르겠습니다
- 미해결김영한의 실전 자바 - 기본편
객체의 수
AudioBook[] a = new AudioBook[100] ; 이라고 할때, a[0], a[1] ,a[2] ... a[99] 전부 다 객체들인가요 ?그리고 이것을 object references 라고 부를 수 있나요 ?
- 미해결김영한의 실전 자바 - 기본편
명시적인 @Override 표시
안녕하세요 만약 자식 클래스가 부모클래스의 메서드를 Override 할때@Override 을 쓰지 않고 오버라이딩해도 문제가 없나요?눈으로는 발생하지는 않지만 혹시 제가 모르는 발생하는 오류가 있나요 ?
- 미해결김영한의 실전 자바 - 기본편
생성자의 역할에 대해 질문드립니다.
안녕하세요,자바 생성자에 대해서 궁금한게 있어서 질문드립니다.보통 생성자는 변수의 초기화를 해주기 위해서 많이 사용하는데요. 강의에서 배운것을 기준으로 하면public class A { private String a; private String b; public A(String a, String b) { this.a = a; this.b = b; } }이런식으로 초기화를 위해 생성자를 사용하는데, 혹시 이런 방식으로public class A { private String a; private String b; public A(String c, String d) { this.a = "new" + c; this.b = "apple" + d; } }매개변수로 a,b를 받아서 초기화하는게 아니라c,d와 같은 다른 변수를 받아서 새로운 것을 만들어줄때도 생성자를 사용하는지 궁금합니다!