30%
46,200원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨김영한의 실전 자바 - 중급 1편
섹션 8. 람다
print(() -> { int random = new Random().nextInt(6) + 1; System.out.println("random = " + random);});는 함수를 인수로 전달한다고 하셨는데, 지금 print를 보면print(Piece piece)로 되어있습니다. 인수로 받을 수 있는 거는 Piece클래스인데 어떻게 인수만 넘긴 것으로 piece.value();가 작동이 되는지 의문이 들어서 질문 남깁니다!public class Ex1AnswerMain5 { public static void main(String[] args) { print(() -> { int random = new Random().nextInt(6) + 1; System.out.println("random = " + random); }); print(() -> { for (int i = 0; i < 3; i++) { System.out.println("i = " + i); } }); } private static void print(Piece piece) { System.out.println("프로그램 시작"); piece.value(); System.out.println("프로그램 종료"); }
- 미해결김영한의 실전 자바 - 중급 1편
concat()이 내부적으로 생성하는 String 인스턴스
public class StringImmutable2 { public static void main(String[] args) { String before = "hello"; String after = before.concat(" java"); System.out.println("before = " + before); System.out.println("after = " + after); } }자바 프로그램 로딩 시점에 문자열 리터럴이 문자열 풀에 보관된다고 알고 있는데요. 위 코드에서 "hello" 뿐만 아니라 " java"도 문자열 리터럴인가요? 그렇다면 " java"도 문자열 풀에 저장되는 것인가요? (제가 자바 기초 지식이 부족한 상태입니다)concat() 내부에서 생성하는 String 인스턴스는 문자열풀에 생성되는 것인가요? 아니면 문자열풀이 아닌 힙 영역에 생성되는 것인가요?
- 미해결김영한의 실전 자바 - 중급 1편
String이 불변 객체인 이유 질문
String이 불변 객체인 이유가 궁금한데요. String 내부에 문자열이 final byte[] value;에 저장되는데 참조변수 final에 들어있는 값(배열의 시작 주소값)이 변경될 수 없는 것이지 byte[] 배열 내부에 있는 원소는 변경 가능하다고 알고 있습니다.final char[] chArr = new char[] {'a', 'b', 'c', 'd', 'e'}; chArr[0] = 'k'; // 가능 System.out.println(chArr); chArr = new char[]{'A', 'B', 'C', 'D', 'E'}; // 불가능 byte[] 배열 내부에 있는 값이 변경 가능한데 String은 왜 불변 객체인 건가요? 혹시 내부적으로 모든 문자를 변경할 수 없도록 하는 어떠한 로직이 존재하는 건가요...?
- 해결됨김영한의 실전 자바 - 중급 1편
섹션 7. 정적중첩클래스
제가 이해를 잘 못한 거 같아서 질문 드립니다!질문 1 : main에 NestedOuter outer = new NestedOuter();를 객체로 생성하면 내부에 있는 모든 것들이 생성되서 아래 올린 코드의 모든 것들이 저 객체 안에 생성되는 게 맞나요?outInstanceValue, Nested 클래스도 같이 포함되어서 생성되는 거 아닌가 해서요! 질문 2 : Nested는 static인데 객체를 생성할 수가 있나요? static이면 힙 영역이 아니라 메서드영역에 생성되어있는 거 아닌가요? 질문 3 : 질문 2에 이어서 든 생각으로 NestedOuter.Nested.print()로 바로 꺼내 쓸 수 있어야 된다고 생각했는데 왜 안 되는 건가요?ㅠㅠ public class NestedOuterMain { public static void main(String[] args) { NestedOuter outer = new NestedOuter(); NestedOuter.Nested nested = new NestedOuter.Nested(); nested.print(); System.out.println("nestedClass = " + nested.getClass()); } }public class NestedOuter { private static int outClassValue = 3; private int outInstanceValue = 2; static class Nested { private int nestedInstanceValue = 1; public void print() { // 자신의 멤버에 접근 가능 System.out.println("nestedInstanceValue = " + nestedInstanceValue); // 바깥 클래스의 인스턴스에 접근 불가 //System.out.println(outInstanceValue); // 바깥 클래스의 클래스 멤버에 접근 가능 System.out.println("outClassValue = " + outClassValue); } }
- 해결됨김영한의 실전 자바 - 중급 1편
Object 다형성 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. Object복습하다가 Parent와 child 클래스를 다형성 해보자 해서 만들었는데, 하다 보니까,원래 코드는 (이런식) 상속 관계 - Object - Parent - Childif (object instanceof Parent parent) { parent.parentMethod(); } else if (object instanceof Child child) { child.childMethod(); }else - if문에서 노란줄이 떠서이런식 으로 만들었는데 이런 식의 코드가 실무에서 있는지 갑자기 궁금해져서 질문을 남깁니다.답변 부탁 드립니다.
- 해결됨김영한의 실전 자바 - 중급 1편
마지막 단에서 공통 처리할 때의 catch 부모 예외
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]5:50에서 공통 처리 catch를 최상위 예외인 Exception으로 잡았는데결국 해결할 수 없는 예외들은 언체크 예외들로 구성되어 있으니깐 RuntimeException으로 잡는게 낫지 않나요?다른 케이스가 있어서 그런건지 궁금해서 질문 남깁니다.
- 해결됨김영한의 실전 자바 - 중급 1편
섹션6. 문제와 풀이
1번째 질문 : 아래쪽 while 부분에 "%2d "가 어떻게 간격을 맞출 수 있는 건가요?%는 연산자에서 나머지를 뜻하는데 뭔가 다른 기능이라도 있는 건가요?2번째 질문 : int offsetWeekDays = first.getDayOfWeek().getValue() % 7; 는 날짜의 요일을 맞추기 위해서 만든 거 같은데 왜 굳이 끝에 '% 7'을 표시해서 나머지로 구하는 건가요?'% 7'을 뺀다음에 first의 날짜를 2024. 1. 10 일로 바꿔도 정상작동하는데 뭔가 이유가 있는 건가요?나머지로 값을 구하는 이유가 있을까요?전체 코드 첨부하겠습니다!public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("년도를 입력하세요 : "); int year = scanner.nextInt(); System.out.print("월을 입력하세요 : "); int month = scanner.nextInt(); printCalendar(year, month); } private static void printCalendar(int year, int month) { LocalDate first = LocalDate.of(year, month, 1); LocalDate firstNext = first.plusMonths(1); // 월요일 (1%7) = 1, 화요일 (2%7) = 2, ... 일요일(7%7) = 0 int offsetWeekDays = first.getDayOfWeek().getValue() % 7; System.out.println("Su Mo Tu We Th Fr Sa"); for (int i = 0; i < offsetWeekDays; i++) { System.out.print(" "); } LocalDate dayIterator = first; while (dayIterator.isBefore(firstNext)) { System.out.printf("%2d ", dayIterator.getDayOfMonth()); if (dayIterator.getDayOfWeek() == DayOfWeek.SATURDAY) { System.out.println(); } dayIterator = dayIterator.plusDays(1); } }
- 해결됨김영한의 실전 자바 - 중급 1편
섹션4-문제풀이2 로또 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 질문이 생겨서 질문을 남깁니다.문제 답안 풀이 나온 방법 말고 다른 방법으로 풀려고 하는데, 답이 나오는지 확인을 받고 싶어서 이렇게 질문을 남깁니다.compareTo로 해서 로또 번호가 잘나오는지 확인을 받고 싶네요. 계속 하는데 실패 해서요..어렵 네요..답변 부탁드립니다.
- 미해결김영한의 실전 자바 - 중급 1편
Object equals()에서 this의 타입
public class EqualsMainV1 { public static void main(String[] args) { UserV1 user1 = new UserV1("id-100"); // x001 UserV1 user2 = new UserV1("id-100"); // x002 System.out.println("equality = " + (user1.equals(user2))); // 동등성 비교: x001.equals(x002) } } public class UserV1 { private String id; public UserV1(String id) { this.id = id; } } public class Object { ... public boolean equals(Object obj) { return (this == obj); } ... }위 코드에서 'user1.equals(user2)'라는 부분이 잘 이해가 안 되는데요. UserV1에서 equals()를 오버라이딩하지 않았기 때문에 Object 클래스의 equals()가 호출됩니다.Object 클래스의 equals()의 매개변수에서는 UserV1 -> Object로의 자동 업 캐스팅이 발생하고 참조변수 obj는 Object 타입입니다. 그렇다면 this도 Object 타입이라는 것인데, UserV1 인스턴스가 생성될 때 내부에 Object도 함께 생성되는데 이 경우에서 Object 클래스의 this는 UserV1가 아닌 Object를 의미하는 건가요?(즉, Object 클래스의 equals()에서 this의 타입에 대해 질문드리고자 합니다.)
- 미해결김영한의 실전 자바 - 중급 1편
Object[] 참조변수에 Car[] 참조변수 대입
public class ObjectPolyExample2 { public static void main(String[] args) { Car[] cars = {new Car(), new Car(), new Car(), new Car()}; size(cars); } private static void size(Object[] objects) { ... } }Object[] 타입 참조변수에 Car[] 타입 참조변수를 넣는 것은 가능하지만 그 반대는 불가한 이유, 그리고 Object[] 타입 참조변수에 Car[] 타입 참조변수를 대입하면 어떻게 되는가에 대해 질문드리고자 합니다.제가 추측하기에는 자동 업캐스팅이 발생하기 때문이고, 이전에는 Car 타입으로 해석되었던 참조변수가 Object 타입으로 해석될 것이라 생각됩니다(객체 배열이니까 모든 객체에 대한 참조변수가 Car 타입 -> Object 타입으로 해석된다는 뜻).그리고 Car[] 타입 참조변수에 Object[] 타입 참조변수를 대입했을 때 컴파일 오류가 발생하는 이유는 업캐스팅은 자동으로 발생하지만 다운캐스팅은 자동으로 발생하지 않기 때문입니다. 저는 이렇게 추측했는데 틀린 부분 지적해주시면 감사하겠습니다.
- 미해결김영한의 실전 자바 - 중급 1편
정적 중첩 클래스 관련 질문
1) 실무에서 정적 중첩 클래스를 사용하는 가장 큰 이유는협업하는 동료가 코드를 빨리 파악할 수 있도록 이라고 이해하면 될까요? 2) 1번 이유가 아니라면 어떻게 가장 많이 활용하나요?
- 해결됨김영한의 실전 자바 - 중급 1편
섹션 5. 문자열과 타입 안전성 1
마지막 return price * (discountPercent / 100); 이 무조건 0이 반환되는 이유가 뭔가요?예를들어 BASIC에 들어오면 discountPercent 에는 10의 값이 들어가고마지막에 price ( 10 / 100); 이 되는 거 아닌가요?ㅠㅠpublic int discount (String grade, int price) { int discountPercent = 0; if (grade.equals("BASIC")) { discountPercent = 10; } else if (grade.equals("GOLD")) { discountPercent = 20; } else if (grade.equals("DIAMOND")) { discountPercent = 30; } else { System.out.println(grade + "할인X"); } return price * (discountPercent / 100); }
- 해결됨김영한의 실전 자바 - 중급 1편
섹션 4. 문제와 풀이2
LotteGenerator 클래스에서private final Random random = new Random(); 에서이것만 final로 처리한 이유가 있을까요? import java.util.Random; public class LotteGenerator { private final Random random = new Random(); private int[] lotteNumbers; private int count; public int[] generate () { lotteNumbers = new int[6]; // 배열 6칸 생성 count = 0; while (count < 6) { // 1부터 45 사이의 숫자 생성 int number = random.nextInt(45) + 1; // number에 random 번호 넣기 // 중복되지 않는 경우에만 배열에 추가 if (isUnique(number)) { lotteNumbers[count] = number; count++; } } return lotteNumbers; } // 이미 생성된 번호와 중복되는지 검사 private boolean isUnique(int number) { for (int i = 0; i < count; i++) { if (lotteNumbers[i] == number) { return false; } } return true; } }
- 해결됨김영한의 실전 자바 - 중급 1편
정보 출력 할때 클래스(Method, Fild, Class) 질문?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금점이 생겨서 질문을 남김니다.필드나, 메서드를 조회할 때Field, Method라는 인스턴스 배열에 값을 넣어서 조회하는것을 보았습니다.근데 인터페이스를 조회할때는Class라는 인스턴스 배열을 통해서 값을 넣었습니다. 이것을 보면서 그냥 Class라는 인스턴스라는 배열에 값을 넣어서 출력하면 되는거아닌가? 라는 생각이 들더군요.아니면 최상위 부모인 obj에 넣은 다음 출력하는 방법도 있을테고요. 이렇게 설계한(Fild,Method 에 값을넣음) 이유가 있을 텐데, 이유를 설명해 주실수 있으신가요?답변 부탁드립니다.
- 미해결김영한의 실전 자바 - 중급 1편
내부 클래스 인스턴스 생성
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]내부 클래스 인스턴스 생성 시 pdf에는 `new 바깥클래스의 인스턴스 참조.내부클래스()`라고 나와있는데 `바깥클래스의 인스턴스 참조.new 내부클래스()`가 더 맞지 않을까 해서 문의 남깁니다!
- 미해결김영한의 실전 자바 - 중급 1편
open jdk22버젼을 사용해도 무방할까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 다름이아니라 open jdk21 버젼이 없어져서 open jdk22 버젼으로 했는데 인텔리제이에서 버젼이 업그레이드 되면 전 버젼은 자동적으로 다운로드를 못하게 막아두는건가요? open jdk22를 써도 되는지 여쭈어보고싶습니다.
- 미해결김영한의 실전 자바 - 중급 1편
CompareTo 메서드
1.String 클래스는 comparable 을 우리가 implements 하지 않아도 자동으로 상속을 받고 있는건가요? 다른 클래스들은 우리가 compareTo 메서드를 override 해야하지만 String 클래스는 기본적으로 override 되어 있어서 특별히 override 해야하지 않는 이상 이미 내장되어 있는 compareTo 메서드를 쓰면 되나요 ? 3. a.compareTo(b) == 0 일때 .equals(0) 이 아니라 == 을 사용하는 이유는 무엇인가요 ?
- 해결됨김영한의 실전 자바 - 중급 1편
List<Integer> list = new ArrayList<>();가 사용 가능한 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.List<Integer> list = new ArrayList<>(); 이것이 왜 list 인터페이스가 클래스처럼 기능이 구현된 채로 사용될 수 있는 것이죠? 클래스처럼 기능이 구현된 채로 사용하려면 ArrayList<Integer> list = new ArrayList<>(); 이렇게 사용해야 하지 않나요,,?
- 해결됨김영한의 실전 자바 - 중급 1편
문제 풀이 1-1 문제 질문이요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]문제를 풀긴 해서 답이 나오긴 했는데.답안 풀이를 보니 코드를 이런식 으로도 작성해도 되는지모르겠더라고요.한번에 값을 넣어봣는데.. (생각이 안나서, 어찌 저찌 하다가 하니 이렇게 되었는데)이런 식으로 코드를 해도 되는건가요?
- 해결됨김영한의 실전 자바 - 중급 1편
섹션3. String
여기서 원래 charArr을 출력하면 배열의 참조값이 나와야하는 거라고 생각했는데 왜 hello가 나오는 건가요?int, String 배열을 출력하면 참조값이 나오는데 char만 뭔가 다른게 있는건가요?public static void main(String[] args) { char[] charArr = new char[] {'h', 'e', 'l', 'l', 'o'}; System.out.println(charArr); int[] i = new int[] {1, 2, 3}; System.out.println(i); } -실행 결과 hello [I@7cc355be