안녕하세요 Toby! 먼저 좋은 강의 올려주셔서 감사 말씀 드립니다. 열심히 강의를 듣던 와중에 궁금한 점이 있어서 질문드립니다. 회원 애플리케이션 기능 추가 강의에서 보면, MemberModifyService 클래스에서 MemberFinder 빈을 주입받아 사용하도록 구현해주셨습니다. 관련해서 같은 application 계층에서 서로 DI 받는 구조로 구성하게 될 경우, 발생하는 순환 참조와 같은 문제점들에 대해서는 어떻게 관리하는게 좋을까요? 그리고 그런 문제점이 발생하지 않도록 예방하기 위해서는 어떤 방법이 있을까요?
package poly.ex.pay2; public class PayOption { Pay findPay(String option) { //결제 수단 추가시 변경되는 부분. if (option.equals("kakao")) { return new KakaoPay(); } else if (option.equals("naver")) { return new NaverPay(); } else if (option.equals("newPay")) { return new NewPay(); } else { return new DefaultPay(); } } } 마지막 강의 실전 문제 중에서 결제 수단 관련 문제입니다. 위와 같이 코드를 작성하게 되면 결제 수단이 추가될 때마다 클래스 내부 코드가 변경이 되는데, OCP를 위반한 것 같은데, 왜 이렇게 작성한 것인지 궁금해서 여쭤봅니다. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
제가 제대로 이해한 것이 맞는지 헷갈려서 질문 드려요 ㅠ 부모 자식 클래스 관계에서 super()라는 명시적 호출이 생략되어 있는 거고, 상속 관계에서는 무조건 자식 생성자 생성하기 전에 부모 생성자부터 생성하는 건 이해했습니다. 근데 그럼 상속 관계에서 명시적 호출 super()이 아닌, this()라고 선언 해놓았을 경우, 부모 생성자를 생성하지 않고 자식 생성자만 생성하는 건가요? 너무 헷갈리네요 ..
[질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요! 강의 잘 보고 있습니다. 자바 메모리 강의에서 인스턴스의 메소드는 힙 영역이 아닌 메소드 영역에서 공통으로 관리된다고 학습하였습니다. 이후 상속, 다형성 강의에서 상속관계의 인스턴스 메모리 구조가 그림으로 많이 설명되는데 해당 영역은 실제로 메소드 영역인지, 힙 영역인지 궁금합니다. 1) 메소드 영역이라면 클래스당 전역으로 1개가 생성되어 관리되는 구조이기 때문에 자식 인스턴스 생성시 해당 메모리에 부모 인스턴스가 함께 생성되어 메소드를 참조하는 구조가 잘 이해가 되지 않습니다. 2) 그렇다면 힙 영역에서 각자 생성된다는 것인데, 앞서 말씀드렸듯이 인스턴스의 메소드는 메소드 영역에서 전역으로 관리된다고 하여 혼란이 있습니다. 답변 부탁드립니다.!
28분 13초 왼쪽 하단 코드 #include <stdio.h> int main() { for (int i = 0; ; i++) { if (i >= 5) { break; } printf("i의 값 : %d\n", i); } } 주신 자료에 보면 출력값으로 i의 값 : 0 i의 값 : 1 i의 값 : 2 i의 값 : 3 i의 값 : 4 이렇게 나와있습니다. 그런데 i의 값 : 5 까지 나와야 하는 것 아닌지 여쭙고 싶습니다.
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int k = sc.nextInt(); sc.nextLine(); int[] array = new int[N]; for (int i = 0; i < array.length; i++) { array[i] = sc.nextInt(); } sc.nextLine(); Main main = new Main(); int result = main.solution(array, k); System.out.println(result); } private int solution(int[] array, int k) { int lt = 0; int answer = 0; int count = 0; for (int rt = 0; rt < array.length; rt++) { if (array[rt] == 0) count++; while (count > k) { if (array[lt] == 0) { count--; } lt++; } answer = Math.max(answer, rt - lt + 1); } return answer; } }
전반적으로 해설이 혼자 푸는데 이야기하시는 느낌이닌다 다른 글도 그렇던데... 유투브로 쉽다쉽다 샘플영상 올리셔서 돈 냈는데 설명이 두서가 없어요 친절하지도 않고 띄엄띄엄 느낌이고 인쇄물은 성의없고... 죄송합니다 돈낸 사람으로서 느낀점 말씀드립니다. 마지막 포인터 문제 전반적인 해설 간략히 요청드립니다.
안녕하세요 프로젝트 초기 설정을 토비님 강의 진행대로 따라하고 있는 중입니다. 제가 docker 는 잘 몰라서 강의 자료에 있는 Rancher Desktop 을 그냥 설치했구요 서버 구동하기 전에 먼저 켜고 토비님 강의 순서 대로 진행했습니다 compose.yaml 의 내용을 수정하기 전에는 오류없이 잘 되는데 토비님이 작성하신 대로 수정을 해서 서버를 구동하면 계속 오류가 발생하고 있습니다 제 디비에 문제가 있나 싶어서 mysql를 완전 삭제하고 재설치 까지 해서 다시 해봐도 이전과 계속 같은 오류가 발생하는데 ai 를 통해서 해결 해보려고 해도 해결을 못하고 있습니다 혹시 확인해보시고 알려주셨으면 합니다
fetch join을 하는것이 즉시로딩을 하는 개념과 비슷하다고 이해했습니다. 근데 강의에서 지연로딩이든 즉시로딩이든 N+1 문제를 피하기 위해 페치조인을 사용한다고 하셨는데 지연로딩일때는 추가적인 쿼리가 발생하게되어 N+1문제가 생기지만 즉시로딩일때는 모든 데이터를 하나의 쿼리로 가져오기때문에 추가적인 쿼리 없이 N+1문제가 생기지 않는다고 생각했습니다. em.find()등으로 즉시로딩을 할때 N+1문제가 생기지 않는것이고 jpql로 즉시로딩을 하면 N+1문제가 생기는것인가요? 이에따른 이유도 함께 궁금합니다ㅜㅜ
26:31 에서 static int b=0이 정적변수라고 말씀하셨는데요.... 그러면 나중에 출력하는 곳에서 네번째 st.a 출력값은 20인데, 두번째 st.b 출력값은 11이 된다고 하셨는데 class Static란에서 정적변수로 b=0을 선언했으니까 0이 아닐까 하고 헷갈리거든요. 답변 부탁드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 실무에서 강의를 수강하기 이전에 자바에서 제공하는 executor service를 사용하여 병렬로 프로그램을 짠 경험이 있는데요. 저는 spring boot를 사용하여 service 내부에 executors의 고정스레드풀을 사용하여 특정 서비스를 호출할때마다 생성하도록 했습니다. 예를 들면, List<?> methodA(req) { ExecutorService es = Executors.newFixedThreadPool(10); List<CompletableFutures> tasks ... // 비즈니스로직 finally{ // shutdown 로직 } } 공통으로 executor 서비스를 관리하는 클래스를 만들어서 사용해야할까요? 우선 제가 개발한 환경에서는 executor service를 저만 사용했습니다. 만약 위에 제가 작성한대로 methodA를 호출할 때마다 쓰레드 풀이 생성되는거 같은데 맞을까요? 이런 방식보다 더 효율적으로 쓰레드를 관리하고 정리할 수 있는지 궁금합니다.
자식 클래스가 재정의하지 않은 것인지 판단하는 것은 부모 클래스에 show(int x)로 정의된 메서드가 없어서 부모클래스에서 정의되지 않았기에 자식클래스가 재정의되지 않았다고 판단되고 그렇기에 업캐스팅 원칙에 의해 부모 클래스에 없는 것은 호출하지 않기때문에 출력값이 부모클래스에서 나온것일까요?