- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 배열의 인덱스를 혹시 for(int i = 0; i < n; i++){ for(int i = 0; i < 5; i++){ arr[i][j] = sc.nextInt(); } } 이렇게 하면 안되는 이유가 있을까요?
만약 Car()랑 ECar()를 출력하고 싶으면 ElectricCar tesla = new ElectricCar("Tesla", 2021, 75); 전에 기본생성자를 호출해야 하나요 예를 들면 ElectricCar tesla = new ElectricCar(); ElectricCar tesla = new ElectricCar("Tesla", 2021, 75); 이렇게 해야지 각 class의 기본 생성자를 호출 하는건가요?
질문은 동영상 강의에 들어가서 오른쪽에 커뮤니티 버튼을 통해 해주세요. 그래야 어떤 강좌에서 질문하셨는지 알 수 있습니다. 영상에서 몇 분 몇 초 대를 알려주셔야 제가 한 번에 질문 내용 확인이 가능합니다. 이미 다른 누군가가 질문을 한 이력 이 있을 수 있습니다. 질문 게시판을 한 번 확인 부탁드립니다. 학교의 과제나 타 강사의 코드 등 외부 수업 자료에 대해서는 답변하지 않습니다. 제가 다루는 커리큘럼 외의 이론이나, 너무 디테일한 컴퓨터 이론에 대해서는 답변 드리지 않습니다. 시험에 안 나오는 경우가 많고, 나와 봤자 1문제 나오는데 외워야 할 부분이 많은 것 등 (예시: 서브넷 마스크 계산) 질문을 올릴 때 이 글은 모두 지우고 내용을 입력해주세요. 코드 문제에서 완전수를 구하기 위해 6부터 30까지 확인하는 방법은 일일히 확인하는 방법 밖에 없나요?
안녕하세요 강사님 좋은 강의 매번 잘 듣고 있습니다. 채팅 프로그램 직접 먼저 구현해보라고 하셔서 코드를 짜봤는데요, 이후 강사님이 짜신 채팅 프로그램 코드를 보며 많이 부족하다는 것을 다시 느꼈습니다. 두 코드를 비교하며 제가 짠 클라이언트 코드 중에 잘 이해가 되지 않는 부분이 있는데요,, 우선 코드는 다음과 같습니다. package network.tcp.chat; //... import static util.MyLogger.log; public class ChatClient { private static final int PORT = 12345; public static void main(String[] args) throws IOException, InterruptedException { try (Socket socket = new Socket("localhost", PORT); DataInputStream input = new DataInputStream(socket.getInputStream()); DataOutputStream output = new DataOutputStream(socket.getOutputStream())) { log("채팅 소켓 연결: " + socket); // 채팅 메시지 송.수신 분리 ReadHandler readHandler = new ReadHandler(input); WriterHandler writerHandler = new WriterHandler(output); Thread clientReadThread = new Thread(readHandler, "clientReadHandler"); Thread clientWriteThread = new Thread(writerHandler, "clientWriteHandler"); clientWriteThread.start(); clientReadThread.start(); clientWriteThread.join(); clientReadThread.join(); } } } package network.tcp.chat; //.. import static util.MyLogger.log; public class ReadHandler implements Runnable { private final DataInputStream input; public ReadHandler(DataInputStream input) { this.input = input; } @Override public void run() { while(true) { // 서버로부터 문자 받기 String received = null; try { received = input.readUTF(); } catch (IOException e) { throw new RuntimeException(e); } log("server -> client: " + received); } } } package network.tcp.chat; //.. import static util.MyLogger.log; public class WriterHandler implements Runnable { private final DataOutputStream output; public WriterHandler(DataOutputStream output) { this.output = output; } @Override public void run() { Scanner scanner = new Scanner(System.in); while(true) { System.out.print("전송 문자: "); // 서버에 문자 보내기 String toSend = scanner.nextLine(); try { output.writeUTF(toSend); } catch (IOException e) { throw new RuntimeException(e); } log("client -> server: " + toSend); if (toSend.equals("exit")) { break; } } } } 물론 제 코드를 작동시켜보면 1) EOFException도 발생하고 2) 자원 정리 코드도 따로 없습니다 다만 궁금한 것은 main 에 다음의 두 코드를 넣어야 채팅 프로그램이 동작한다는 것입니다. clientWriteThread.join(); clientReadThread.join(); 앞서 보여주신 간단한 server-client 예제, 강사님이 짜신 채팅 프로그램 코드 모두 Thread.join() 메소드를 전혀 사용하지 않았는데 왜 제 코드에서는 두 코드를 넣어야 채팅 프로그램이 끊기지 않고 동작하는 것인지 자문을 구해도 될까요?ㅠ 감사합니다..!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요 네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네 [질문 내용] 강의 내용대로 쿼리 결과보려고하는데 회원1,2 가져오고 회원3인 teamB를 영속성에 올리는 쿼리가 따로 안돌아요. 연속으로 회원1,2,3가져오는데 새 버전이라 그런건지 제가 설정을 잘못했는지 궁금합니다
(기출) 2023년 2회 코드해석 문제 - Java 연산자의 활용 (영상) 23분 30초대 Java 연산자로 문자열을 비교할 때 ==과 equals를 다뤄주셨는 데 혹시 추가로 compareTo()로 비교 하면 어떤 결과가 나오나요? 예를들어 이 문제의 코드에서 System.out.println(str1.compareTo(str2)); System.out.println(str2.compareTo(str3)); 이렇게 추가한다고 하면 첫 번째 str1과 str2 비교의 경우 0이 반환되는 건 알겠는데 str2와 str3 비교의 경우 어떻게 반환되는 지 궁금합니다! (* 최근 NCS 전공시험을 치고왔는데, 해당 문제가 나와서 생각나서 여쭤봅니다..ㅎㅎ)
정답이 ab{3}ca{3}이 아니라 ab3 ca3이 되는이유가 뭔가요? 질문은 동영상 강의에 들어가서 오른쪽에 커뮤니티 버튼을 통해 해주세요. 그래야 어떤 강좌에서 질문하셨는지 알 수 있습니다. 영상에서 몇 분 몇 초 대를 알려주셔야 제가 한 번에 질문 내용 확인이 가능합니다. 이미 다른 누군가가 질문을 한 이력 이 있을 수 있습니다. 질문 게시판을 한 번 확인 부탁드립니다. 학교의 과제나 타 강사의 코드 등 외부 수업 자료에 대해서는 답변하지 않습니다. 제가 다루는 커리큘럼 외의 이론이나, 너무 디테일한 컴퓨터 이론에 대해서는 답변 드리지 않습니다. 시험에 안 나오는 경우가 많고, 나와 봤자 1문제 나오는데 외워야 할 부분이 많은 것 등 (예시: 서브넷 마스크 계산) 질문을 올릴 때 이 글은 모두 지우고 내용을 입력해주세요.
강의를 들어본 후, 다른 질문들도 참고를 해보았는데요. 프록시 초기화(프록시객체의 초기화) : 프록시 객체의 target필드에 실제 엔티티 객체의 참조를 설정하는것. 1. <프록시 초기화 과정> em.getReference()를 하게되면, 프록시 객체가 영속성컨텍스트(1차캐시)에 저장된다. 프록시는 내부에 Member target;이라는 멤버변수(필드)를 가지고 있다. member.getName()을 호출한다. 프록시가 아직 초기화되지않은 상태이므로, JPA는 영속성 컨텍스트에 초기화 요청을 한다. 영속성컨텍스트가 db조회를 해서 실제 엔티티객체를 생성하고 프록시 객체 내부의 target필드에 실제 엔티티객체의 참조를 설정한다. 초기화된 필드를 통해 실제 객체의 메서드를 호출한다. --------------------------------------------------------------------- 2. em.getReference()를 하게되면, 프록시 객체가 영속성컨텍스트(1차캐시)에 저장된다. 초기화를 해도 실제 객체는 1차캐시에 저장되지않는다. 프록시 객체가 실제 객체의 참조를 가지고있기 때문에 프록시 객체를 통해 실제 객체를 사용할 수 있다. 즉 실제 객체가 1차캐시에 등록되는건 아니고 프록시 객체가 실제 객체의 참조를 가지고 있기 때문에 실제 객체가 1차 캐시에 등록되어 있는 것처럼 사용할 수 있다. ==> 프록시 객체만 영속성컨텍스트에 저장되고 실제 엔티티객체는 영속성컨텍스트에 저장되지않는다. --------------------------------------------------------------------- 3. JPA는 동일한 트랜잭션안에서 동일한 PK에 대해 처음에 em.getReference()를 사용하면 프록시 객체를 반환하고, em.find()를 사용해도 프록시 객체를 반환한다. 이때 프록시 객체가 영속성컨텍스트(1차캐시)에 저장된다. 이후 em.find()를 사용해도 이미 1차캐시에 프록시가 존재하므로 프록시가 반환된다. 반대의 경우 동일한 트랜잭션안에서 처음에 em.find()를 사용하면 실제 엔티티가 반환되고, em.getReference()를 사용해도 실제 엔티티를 반환한다. 이때 실제 엔티티가 영속성컨텍스트(1차캐시)에 저장된다. 이후 em.getReference()를 사용해도 이미 1차캐시에 실제 엔티티가 존재하므로 실제 엔티티가 반환된다. 위와 같이 이해하는게 맞을까요..?
링크 위 링크 속 질문에 대한 답변을 아래와 같이 이해하였습니다. em.remove(member)를 하는 순간에 member가 1차 캐시에서 제거되고 동시에 delete 쿼리가 쓰기 지연 SQL 저장소에 저장 commit()을 만나면 내부적으로 flush()를 호출하고 쓰기 지연 SQL 저장소에 있는 쿼리가 나간다고 이해했습니다. 그리고 아래와 같은 테스트를 했을 때 의문이 생겼습니다 Member member1 = em.find(Member.class, 101L); em.remove(member1); Member member2 = em.find(Member.class, 101L); System.out.print(member2); // null tx.commit(); 위 테스트의 결과는 처음 member1을 찾을 때 select 문 1번 remove()로 인한 delete 문 1번 이처럼 총 2번 발생했습니다 하지만 제 생각은 remove()를 하면서 1차 캐시에서 지웠기 때문에 두 번째 find() 시에는 쿼리를 날려야 되는거 아닌가요? 그리고 또 이해가 안되는 부분은 member2를 찍어보면 null 이 나옵니다. commit()을 하기 전, 즉 flush()를 통해 remove()에 의해 만들어진 쓰기 지연 SQL 저장소에 저장된 delete 문이 나가기 전인데 왜 null 이 찍히는 걸까요? 정리하자면 두번째 find()는 왜 안 날라가는지 member2는 왜 null 인지 별도로 궁금한 점 쓰기 지연 SQL 저장소에 있는 쿼리들은 들어온 순서대로 나가나요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 강사님께서 설명해주신 것처럼 다른 예외가 발생시 disconnect(); 의 호출이 불가피하게 되었을때 finally 라는 문구를 사용하여 해결방법이 있겠지만 catch 의 예외타입을 Exception (= 실질적인 최상위 예외)로 지정하면 다른 에러가 발생하여도 해결할수 있을것 같은데 통합적으로 Exception 으로 잡지 않는 이유가 궁금합니다!
안녕하세요. 오타 제보입니다. 자바 고급1편 11.동시성 컬렉션 pdf 4페이지 add(): 컬렉션에 데이터를 추가한다 sleep(100): 잠시 기대한다 . 자바 고급1편 10. CAS-동기화와 원자적 연산 pdf 7페이지 6번째 줄 이 문제는 연산 자체가 나누어져 있기 때문에 발생한다. volatile 은 연산 차제 를 원자적으로 묶어주는 기능이 아니 다. 강의 감사히 듣고 있습니다!! 감사합니다.
안녕하세요. 강의 내용 15분쯤에 프록시 객체의 초기화 부분에서 설명해주신 부분이 잘 이해가 되지않아서 찾아보고 아래와 같이 정리해보았는데요. 이렇게 이해하는게 맞을까요? 프록시 초기화(프록시객체의 초기화) : 프록시 객체의 target필드에 실제 엔티티 객체의 참조를 설정하는것. em.getReference()를 하게되면, 프록시 객체가 영속성컨텍스트(1차캐시)에 저장된다. 프록시는 내부에 Member target;이라는 멤버변수(필드)를 가지고 있다. member.getName()을 호출해서 초기화 요청을 한다. JPA는 영속성 컨텍스트(1차캐시)에 실제 엔티티객체가 있는지 확인한다. 4-1. 있으면, JPA는 프록시 객체 내부의 target필드에 1차캐시에 있는 실제 엔티티객체의 참조를 설정한다. 4-2 없으면, JPA는 db조회를 해서 실제 엔티티객체를 생성하고 프록시 객체 내부의 target필드에 실제 엔티티객체의 참조를 설정한다. 초기화된 필드를 통해 실제 객체의 메서드를 호출한다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 정보] 질문 내용의 위치: 3. 함수형 인터페이스.pdf _ 문제와 풀이 _ 문제1 - FilterExampleEx2 제가 작성한 소스코드: https://inf.run/GQrVP 질문 요약: 1) Predicate 말고도 추가적으로 filter() 메서드도 BiFunction 함수형 인터페이스로 대체했는데, 이 정도까지 (메서드까지) 대체하는 것은 너무 과한 행동인지 궁금합니다. 2) BiFunction.apply() 를 호출하여 필터링 하는 방식은 filter() 메서드로 필터링하는 방식보다 직관성이 떨어지기 때문에 권장되지 않는지 또는 그냥 사용해도 되는지 궁금합니다. [질문 내용] 안녕하세요. 기존 FilterExampleEx2 의 모든 부분을 자바가 제공하는 함수형 인터페이스로 대체하는 문제로 잘못 이해해서 filter(리스트, Predicate) 메서드까지 BiFunction<리스트, Predicate, 리스트> 함수형 인터페이스로 대체를 했습니다. 이때 제가 생각했을 때는 크게 두 가지 부분이 문제가 될 수도 있겠다고 생각을 했는데, 실제로도 문제가 될 위험이 있는지 궁금해서 질문드립니다. (필터링 결과는 동일합니다.) (제가 추측한) 문제 상황1. 너무 과한 대체 메서드까지 함수형 인터페이스로 대체하는 것은 너무 과하다. (제가 추측한) 문제 상황2. 직관성의 저하 (영한님 답안의 경우) filter() 메서드를 호출하는 방식의 경우 메서드명이 filter 로 직관적이다. (제 답안의 경우) BiFunction.apply() 를 호출하는 방식의 경우 apply() 라는 메서드명만 보고는 "필터링한다"라는 느낌을 받을 수 없어 직관적이지 못하다. 제가 작성한 소스코드는 [질문 정보] 부분에 구글 드라이브 링크를 첨부했으나, 혹시 몰라 질문글에도 작성해봅니다. package lambda.ex3; import java.util.ArrayList; import java.util.function.BiFunction; import java.util.function.Predicate; import java.util.List; // 내 풀이 public class FilterExample { public static void main(String[] args) { List<Integer> numbers = List.of(-3, -2, -1, 1, 2, 3, 5); System.out.println("원본 리스트: " + numbers); // predicate까지 parameter로 받으면 더 유연하다. BiFunction<List<Integer>, Predicate<Integer>, List<Integer>> listFilter = (numberList, predicate) -> { ArrayList<Integer> filteredList = new ArrayList<>(); for (Integer number : numberList) { if (predicate.test(number)) filteredList.add(number); } return filteredList; }; // 조건 1. 음수(negative)만 골라내기 Predicate<Integer> isNegative = n -> n < 0; List<Integer> negatives = listFilter.apply(numbers, isNegative); System.out.println("음수만: " + negatives); // 조건 2. 짝수(even)만 골라내기 Predicate<Integer> isEven = n -> n % 2 == 0; List<Integer> evens = listFilter.apply(numbers, isEven); System.out.println("짝수만: " + evens); } }
안녕하세요, 비전공자 수강생입니다. 공부하다 헷갈려서 질문드립니다. 17강 함수와 재귀함수 (v2) 59분58초 질문을 드립니다. maxVal(arr,1)은 size==1 조건에 만족하기에, maxVal(arr,1)라는 식 전체를 a[0]으로 호출받는다는 해석이 맞을까요? maxVal(arr,1) 내의 arr를 뭐 따로 어떻게 해석하고 말고 필요없이, 그냥 maxVal(arr,1) 전체가 arr[0]이 되었으니, 이제 arr[1]>arr[0]과 비교해 각기 값을 호출받아 5>1 비교가 되었고, 참이 되었으니 삼항연산자의 참값인 arr[1]을 호출받고서는 maxVal(arr,2)=arr[1] 이 되고선 그 이후 계속해서 같은 방식으로 계산을 하니깐 %d에 들어갈 maxVal 최종값이 9가 나오기는 하던데 이게 맞는 해석법인지 궁금합니다. 특히, "maxVal(arr,1) 내의 arr를 뭐 따로 어떻게 해석하고 말고 필요없이" 이부분이 제가 맞게 해석을 했는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 콘솔창이 가로로 나와야 할 게 세로로 나와요.. 예를 들면 123 이렇게 나와야 되는데 1 2 3 이렇게 나와요.