30강 9:44에서 부모 자식 기본 생성자가 출력되지 않았는데 그 이유가 super에 파라미터가 있어서 그 값을 출력했다 라고 이해했는데 만약super()이런식으로 파라미터의 값을 설정하지 않았다면 부모 자식 기본 생성자가 호출 되는 건가요? Car() 이런 식으로요 10:26에서는 왜 부모 기본 생성자는 출력하는데 자식의 기본 생성자인 ECar()은 출력 하지 않나요? 부모자식 다 출력하는게 아니라 조건이 없을때 부모만 출력하는건가요?
문자열이 비어있는지 판단하는것이 string str = "Hello"; 가 있냐 없냐로 판단하는 것인가요??? 설명란에 Hello라는 문자열이 변수에 들어가 있고 그것이 비었는 지를 물어보는 기능이 참값이 나온다는데 비어있으면 참값이고 그렇지 않으면 거짓값인데 답이 거짓값이 나와서 이해가 조금 부족합니다..ㅠㅠ
강의를 계속 듣고 보니 저는 (리슨)서버 의 경우 필요한 객체만 생성되는 줄 알았으나 마지막 Owner 에 대한 내용도 보니 결국 서버에서 플레이어 캐릭터 액터 도 생성 및 초기화 하고 이를 다시 클라이언트에서 Owner 가 설정되기 전이긴 하나 다시 생성 후 컴포넌트 초기화 , 오너 설정 등이 이루어지는데요. (리슨)서버의 경우 플레이어-접속된 클라이언트의 객체 모두 생성 후 다시 이를 클라이언트에게 전달 , 클라이언트에서는 서버에서 받은 객체 정보를 바탕으로 다시 플레이어 캐릭터 생성 및 오너 설정 즉 서버는 모두 생성한다. 그리고 접속되어 진 클라이언트 플레이어 액터 객체는 모두 서버에 의해 클라에서 생성되며 OnRep_Owner, PostNetInit 등을 통해 서버의 PossessedBy 와 동일한 일을 진행한다 이렇게 이해해도 될까요?
시간대는 9분 25초이구요, 기본 생성자를 거치지 않고 ElectricCar(String model, int year, int batteryCapacity) { super(model, year); this.batteryCapacity = batteryCapacity; System.out.println("ECar(" + batteryCapacity + ")"); } } 해당 코드에서 super(model, year); 을 타고 Car(String model, int year) { this.model = model; this.year = year; System.out.println("Car(" + model + ", " + year + ")"); } } 해당 코드가 실행되어 println 되고, 다음 자식 생성자가 실행되어서 ECar(75) 의 값이 나오는 걸로 보여지는데 Q. new electricCar에서 기본 생성자를 거치지않고 어째서 2번째 자식 생성자로 바로 가버려서 코딩이 되지요?? 이게 명시적 호출인가요?
안녕하세요 쿠케님 강의 잘 보고 있습니다! 강의를 보다가 갑자기 궁금한 점이 생겨서 질문 드립니다. 샤딩의 기준이 현재는 article_id로 되어 있는데, 특정 샤드에 댓글 데이터가 엄청 생성되어서 불균형하게 저장이 되는 경우도 있을까요?? 있다면 샤딩의 기준을 다시 정의하는 일도 있는지 궁금합니다. 항상 잘 보고 있습니다. 감사합니다.
이전까지 업캐스팅에서 부모의 기본생성자를 먼저 출력하고 다음에 자식의 생성자를 실행한다고 배웠는데 여기선 빼고 바로 B의 생성자로 가는 이유가 무엇인가요 앞 문제와 파라미터가 들어간 메인함수는 똑같은데 오버로딩과 무슨 관련이 있나요 B의 기본생성자에서 명시적으로 파라미터가 들어간 부모 생성자를 호출하기에 부모 기본생성자를 생략해도 되는건가요
마지막에 로그를 찍어보니 서버 역활을 하는 객체에는 HandleBeginPlay 로그가 출력되었으나 클라 역활을 하는 객체에는 OnRep_ReplicatedHasBegunPlay 로그가 출력되었습니다. 현재는 리슨서버로 진행되니 서버-클라 모두 HandleBeginPlay 가 호출될 줄 알았지만 클라에서는 출력되지 않습니다. 강의 내용처럼 HandleBeginPlay 는 서버 (로컬)에만 호출되니 클라에서는 호출 될 일이 없으며 클라에서는 OnRep_ReplicatedHasBegunPlay 만 호출되나 이것도 bReplicatedHasBegunPlay 값에 의해 호출 될수도 있고 안될 수도 있다 이렇게 이해해도 되나요? 다만 bReplicatedHasBegunPlay 는 그렇가면 게임이 시작 이후에는 무조건 true 가 될테니 시작 이후에 접속되면 무조건 bReplicatedHasBegunPlay 가 호출 될 것이고 시작 이전에 호출 되면 bReplicatedHasBegunPlay 호출이 안될 것이다 이렇게 이해해도 될까요?
최초 리슨서버 역활을 하는 클라이언트 의 로그가 출력시 스탠드얼론은 없고 전부 서버 로만 나옵니다. 스탠드얼론이 아닌 서버에서 로그인 시작/끝 , 포스트 로그인 시작/끝 이렇게 출력되는데 이건 엔진 업데이트가 되어 버전이 달라서 내부 로직 구조가 변경되어서 그런 것이다 라고 이해해도 될까요? 현재 버전은 5.6 입니다.
29:27 삼항 연산자 한 줄로 되어있는 부분 해석해주실 때, if level % 2 != 0: 위 부분이 이해가 안됩니다. if node else 0 이 부분은 "if 부분이 참이면 return을 하고"라고 해석을 해주셨는데요 왜 if level % 2 != 0: 이 부분 해석해주실 때에는 != 같지 않다라고 해석을 해주시는지 궁금합니다.
안녕하세요! 강의 잘 듣고 있습니다. 좋은 강의 감사합니다. 실습하다가 오류가 생겨 문의 드립니다. void like(Long articleId, Long userId, String lockType) { restClient.post() .uri("/v1/article-likes/articles/{articleId}/users/{userId}/" + lockType, articleId, userId) .retrieve(); } @Test void likePerformanceTest() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(100); // 100개의 스레드 풀 생성 // 각 lock type별로 테스트 likePerformanceTest(executorService, 1111L, "pessimistic-lock-1"); likePerformanceTest(executorService, 2222L, "pessimistic-lock-2"); likePerformanceTest(executorService, 3333L, "optimistic-lock"); } void likePerformanceTest(ExecutorService executorService, Long articleId, String lockType) throws InterruptedException { CountDownLatch latch = new CountDownLatch(3000); System.out.println(lockType = " start"); like(articleId, 1L, lockType); long start = System.nanoTime(); for (int i = 0; i < 3000; i++) { long userId = i + 2; // String finalLockType = lockType; executorService.submit(() -> { like(articleId, userId, lockType); latch.countDown(); }); } latch.await(); long end = System.nanoTime(); System.out.println("lockType = " + lockType + ", time = " + (end - start) / 1_000_000 + " ms"); System.out.println(lockType + " end"); Long count = restClient.get() .uri("/v1/article-likes/articles/{articleId}/count", articleId) .retrieve() .body(Long.class); System.out.println("count = " + count); } 여기서 '람다 식에 사용되는 변수는 final 또는 유사 final이어야 합니다' 라는 오류가 뜨더라고요. // String finalLockType = lockType; 부분 주석 해제하고 람다 내부에 like(articleId, userId, finalLockType); 으로 하면 start lockType = start, time = 914 ms start end count = 0 start lockType = start, time = 589 ms start end count = 0 start lockType = start, time = 567 ms start end count = 0 으로 출력도 잘 안 나옵니다. 애플리케이션 콘솔에는 아래 로고만 찍히고 나머지는 안 나옵니다. Hibernate: select alc1_0.article_id,alc1_ 0.like _count,alc1_0.version from article_like_count alc1_0 where alc1_0.article_id=? Hibernate: select alc1_0.article_id,alc1_ 0.like _count,alc1_0.version from article_like_count alc1_0 where alc1_0.article_id=? Hibernate: select alc1_0.article_id,alc1_ 0.like _count,alc1_0.version from article_like_count alc1_0 where alc1_0.article_id=? 어느 부분이 문제일까요? ArticleLikeController에서 count 경로는 테스트처럼 뒤에 /count 추가했습니다.
arr+1의 값이 22가 나오는 이유가 arr의 배열은 4번까지 진행됐을때 {21, 31, 40, 50, 60}이고, 1번, 3번, 4번까지는 ptr의 포인터 변수의 값을 물어보는 의미이기 때문에 5번의 *arr+1은 arr배열의 초기값인 21에서 1을 더한것을 출력하기 때문에 22가 맞는건가요?
반복문과 range 강의 챕터 4:51 for i in range(3): j=0 while j<3: print("*", end=" ") j+=1 print() 위 구문에 대해서 range 의미를 잘 모르겠습니다. range(3)이니까 0~2까지 해서 3개가 된다는 것은 이해가 됐고, 개행이 2번 되어 행이 3개가 된다는 것은 이해가 됐습니다. 하지만 왜 각 행마다 개수가 range의 어떤 역할 때문에 *이 3개씩 있는지 이해가 되지 않습니다.
안녕하세요. 직전 강의인 구조체 강의에서 구조체 선언 방법에 대해 알려주셨는데, 거기서는 typedef 없이도 구조체 선언, 멤버 선언, 구조체 변수 선언을 한번에 다 할 수 있다고 하셨습니다.(구조체 강의 약 1:20) 예1: struct{ int year; float price; }Bag1; 그런데 이번 강의에서는 typedef 없이 struct만 쓰는 경우에는 타입으로 사용할 수 없다고 설명해 주셨습니다. 이 부분이 잘 이해되지 않는데요. 예2: typedef struct Bag{ int year; float price; }Bag1; 위에 예1과 예2의 차이점이 뭔가요? 예2는 struct Bag 자료형(타입)의 변수인 Bag1을 선언하는 것이라고 확실하게 이해했는데, 예시1번도 동일한가요?