선생님.... 제가 질문이 좀 많습니다.... main 바로 다음에 A b = new B(); 라고 되어있는데, A b가 왜 class B로 되는거죠?? 대소문자도 구분 해야하는거 아닌가요>>>? B를 b로 지정하거나 뭘 하겠다고 한건 없는거 같은데 이해가 안됩니다. 그냥 A라는 부모가 가진 것을 new B라는 자식이라고 A b로 새롭게 정의해서 new B = b라고 보면 되나요?
섹션 3. 17강. 23:00 질문 있습니다. printf("입력된 문자열: %s\n", str); 이 아니라 printf("입력된 문자열: %c\n", str)라면 어떤식으로 출력이 될까요? myString[]에서 this is string은 알파벳 하나하나 주소를 갖는건가요? 아니면 통째로 주소를 갖는 건가요?ㅜ 갑자기 헷갈려서 남깁니다.
선생님 제가 정말 완전 노베이스에서 하는데, 왜 모든 값들을 출력할 때 출력문 구조가 System.out.println("d1 == d2: " + (d1 == d2)); 이렇게 되어있는데 출력은 +를 뺀 내용만 출력을 하는건가요? d1 == d2: false +의 경우는 " "에 있는 내용도 아니고 단지 두개의 식을 이어주는 역할이라고 생각하면 될까요?
super()가 없어지면 기본 생성자를 호출 해야한다는건 이해 했습니다. ElectricCartesla-new ElectricCar("Tesla",2021,75); 라는 변수가 있기때문에 자식 기본생성자인 부분은 건너뛰고 2번쨰인 ElectricCar로 바로 넘어가는건가요? 이후에 부모기본생성자 출력하고 남은 Capacity를 출력하는 순서... 이렇게 이해하면 되는건가요?
08_chatServerSelector 소스코드의 마지막 부분인 브로드캐스팅하는 함수 sendMessageAll에서 오류를 발견했습니다. 제공하여주신 소스 코드를 작성하고, 여러 클라이언트를 실행시켜보았습니다. 연결은 문제가 없었지만, 쓰기 부분에서 문제가 발생했습니다. private static void sendMessageAll(Selector selector, SocketChannel sender, String msg) throws IOException { ByteBuffer msgBuffer = ByteBuffer.wrap((msg + "\n").getBytes()); for (SelectionKey key : selector.keys()) { Channel channel = key.channel(); if (channel instanceof SocketChannel) { SocketChannel target = (SocketChannel) channel; target.write(msgBuffer); // <- 문제 지점 } } } msgBuffer를 반복문을 통하여 타겟 클라이언트 채널에 쓰기를 할 때에, 첫 클라이언트에게만 메시지가 보내지는 것 을 발견하였습니다. 이유는 write호출시 msgBuffer의 position이 마지막으로 이동이 되어서, 다른 클라이언트 소켓 채널에게는 빈 msgBuffer가 쓰기가 되어서 메시지가 보내지지가 않았습니다. 해결방법) msgBuffer의 값을 할당받는 부분을 반복문 안쪽으로 이동시켜 매 이터레이션 마다 값을 받게 코드를 수정하였습니다. // 브로드캐스팅 함수 private static void sendMessageAll(Selector selector, SocketChannel sender, String msg) throws IOException { for (SelectionKey key : selector.keys()) { Channel channel = key.channel(); if (channel instanceof SocketChannel) { SocketChannel target = (SocketChannel) channel; ByteBuffer msgBuffer = ByteBuffer.wrap((msg + "\n").getBytes()); target.write(msgBuffer); } } }
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 코드의 어떤 로직이 이해가 안 되시나요? 어떤 개념이 헷갈리시나요? 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 현재 작성하신 코드를 공유해주세요 안녕하세요 항상 강의 잘 보고 있습니다 ! 딩코딩코님 혹시, 로컬에서 테스트 한 결과를 이력서에 써도 괜찮을까요? 서비스를 배포를 할 생각이긴한데, 똑같은 환경을 2개 만들어서 배포를 하고 테스트를 하려니 비용이 많이 나올 것 같아서 어떻게 해야될지 고민하고 있습니다 ㅜㅜ 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다!
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 4-8 여기까지 이해하신 내용은 무엇인가요? 외래키 제약조건으로 인해 발생한 데드락 문제를 해결하기 위해 INSERT 하려는 테이블에 외래 키를 제거한다. 2. 어려움을 겪는 부분 외래키를 만약에 제거한다면, 어플리케이션 레벨에서 직접 관리한다고 했는데, 구체적으로 어떻게 관리를 하는 건지 궁금합니다! INSERT 하려는 테이블과 연관된 테이블들을 먼저 조회( findXXX() )를 하고, 만약에 없다면 예외를 발생시켜서 트랜잭션을 롤백시키는 방식으로 처리하나요? 실무에서 주로 어떻게 해결하는지 궁금합니다. 그리고 외래키를 사용하지 않는 첫 번째 방법은 이미 테이블이 생성된 시점( INSERT 하려는 테이블에 외래키가 추가되어 있는 상황)에서도 적용할 수 있는건가요? 예를 들어, 이미 테이블에 데이터가 추가되어 있는 상황에서 첫 번째 방법을 적용하려면, 테이블 구조를 아예 바꿔야 할텐데 이 경우에는 두 번째 방법인 쿼리 순서를 바꾸는 걸 대안으로 사용하는 건가요?
강의에선 되게 단순하게 큰 틀 위주로 알려주시는 것 같아서 개인적으로 더 자세한 의미나 추가적인 개념이 궁금할 때 검색해보는 편인데, DI라는 것이 클래스 간의 결합도를 낮추고 객체의 유연성을 높이기 위해 빈 객체를 만들어 주입하는 것을 의미한다고 정리했습니다. 이게 맞게 정리한건지 궁금합니다. 또 추상 클래스와 인터페이스 간의 차이점은 찾아봐도 이해가 어렵길래 선생님의 친절한 설명이 필요할 것 같아서 추가로 여쭤봅니다!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Array 연습 문제 5번을 제가 스스로 풀어보았을 때 이런 식으로 코드가 나왔고, 실행시켜봤을 때 답은 똑같이 나오는 것 같습니다. 다만 풀이와는 코드가 조금 다른 부분이 있는데 혹시 제가 풀어 본 코드도 맞는 코드인가요? 아니면 틀린 걸까요?
안녕하세요, 토비님. 강의 초반에 말씀해 주신 것처럼, 리팩토링 과정에서 “제가 했다면 어떻게 했을까”를 계속 생각해 보며 토비님의 의사결정 과정을 따라가고 있습니다. MemberService.register() 메소드에서 emailSender.send(...) 를 sendWelcomeEmail() 로 분리하시는 과정을 보며 두 가지 고민이 생겼습니다. 첫째, 환영 이메일의 내용이나 정책이 변경될 때마다 MemberService 의 코드가 함께 변경되어야 한다면, 이는 SRP 위반에 해당하지 않는지에 대한 고민입니다. 이 경우 환영 이메일 전송에 대한 책임을 EmailSender 인터페이스 쪽으로 옮기는 것이 더 적절한지 궁금해졌습니다. 둘째, 만약 EmailSender 인터페이스에 해당 메소드를 추가한다면, 구현체가 늘어날수록 인터페이스가 비대해지거나 향후 구현 복잡도가 증가할 수 있다고 느꼈습니다. 이런 경우 default method 로 제공하는 방식에 대해서는 어떻게 생각하시는지도 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 질문드립니다. 클래스에서 static 메서드엔 static 변수와 메서드만 사용할 수 있고 인스턴스 변수와 메서드를 사용하지 못하는 이유는 '인스턴스는 생성이 되어야 참조값이 생성되기에 아직 생성되지 않은 클래스 내에서는 인스턴스를 사용할 수 없다.'로 이해하고 있습니다. 그러면 해당 클래스의 인스턴스 메서드 에서는 아직 생성되지 않은 클래스인데 인스턴스 변수와 메서드를 사용할 수 있는 이유가 무엇일까요?
다른 분이 질문한 내용을 읽어보고 고민하고 생각해봤는데도 이해가 안되서 질문 합니다. str == ch 는 0 이되는건 알겠는데 그 옆 str+1로 다음 글자 인것도 알겠습니다 근데 그옆에 ch는 무슨뜻이죠?? ch는 그냥 무시하는 건가요? return( *str == ch)여기에서 0이 되는건 이해됩니다. 그런데 charFreq(str + 1, ch)에서 ch는 그냥 무시되어버리는 도저히 이해가 안됩니다 ㅠㅠ 도와주세요 charFreq(str + 1,ch) 여기 값에서는 무슨 짓을 해도 계속 0이 나오는건가요?
학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 좋아요에 대한 정합성을 (article_id, user_id) 유니크 인덱스로 보장하는 것은 DB의 역할이라고 생각합니다. 그렇다면, 다수의 동시 요청이나 사용자의 반복 클릭(예: 좋아요 버튼을 연속으로 누르는 경우) 상황에서 불필요한 DB 부하와 예외 발생을 줄이기 위해 애플리케이션 단에서는 어떤 방식으로 이를 보완하고 처리하는 것이 적절한가요? 좋아요에 대한 정합성을 (article_id, user_id) 유니크 인덱스로 보장하는 것은 DB의 역할이라고 생각합니다. 다만, 다수의 동시 요청이나 사용자의 반복 클릭(예: 좋아요 버튼을 연속으로 누르는 경우) 상황에서는 애플리케이션 단의 단순한 선행 검증만으로는 이를 제어하기 어렵다고 느꼈습니다. 예를 들어, 아래와 같은 코드에서는 다음과 같은 경쟁 상태(race condition)가 발생할 수 있습니다. T1: exists → false T2: exists → false T1: insert T2: insert ❌ (유니크 제약 위반) if (!likeRepository.exists(postId, userId)) { likeRepository.save(...); } 이처럼 애플리케이션 레벨의 exists → insert 패턴이 동시성 문제를 해결하지 못하는 상황에서 DB 예외에만 의존하지 않고 불필요한 중복 요청과 예외 발생을 줄이기 위해 애플리케이션 단에서는 어떤 방식으로 이를 보완하는 것이 바람직하다고 보시는지 궁금합니다.