가급적이면 lombok라이브러리를 쓰지 마라고 하셨는데, @ToString(exclude = "members") 처럼 특정 필드를 제외하는 exclude 써서 무한 순환을 막을 수 있다는 것을 봤는데 이 방법을 실무에서 잘 안쓰나요? 그렇다고 롬복을 안쓰는건 더더욱 비효율적으로 보입니다 예시: @Entity @ToString(exclude = "members") public class Team { ... @OneToMany(mappedBy = "team") private List<MemberTest> members = new ArrayList<>(); ... }
MonsterController 에서 질문 있습니다. protected virtual void UpdateDead() { OnDead(); } public override void OnDamaged(BaseController attacker, int damage) { if (Hp <= 0) return; Hp -= damage; if (Hp <= 0) { Hp = 0; // 왜 ? 스테이트로 했을때는 버그가 있는거지? _creatureState = Define.CreatureState.Dead; // OnDead(); } } 위와 같이 MonsterController 에서 OnDead() 대신에 State 로 작성을 하면 데미지를 입지 않은 몬스터도 죽어버립니다. 왜 그렇게 되는지 잘 모르겠는데 설명 부탁 드립니다.
제가 확실히 이해한 것이 맞는지 체크하고 싶어 질문 드려요. NetworkObject는 생성시 Instantiate함수만으로도 양쪽에 동기화 되어 생성된다. (생성만 되는 것인지 이동시 위치까지 동기화 되는건이지 궁금합니다.) ServerRpc함수 : 이 함수는 client의 작업은 client에서 하는 것이 아니라 host가 대리처리해 주어야 하기 때문에 client만 주로 호출할 일이 많다. ClientRpc함수 : host가 작동시킨 것들을 clinet에게 전달하거나 ServerRpc함수에 작업한 것을 다시 양쪽에 동기화해서 전송해주는 역할을 한다. 이 함수는 host와 client컴퓨터 양쪽에서 모두 실행된다. 위에 두 함
import java.util.*; public class Main { public static void main(String[] args){ Scanner in=new Scanner(System.in); String s = in.nextLine(); String s2 = in.nextLine(); System.out.println(Solution.solution(s, s2)); } } class Solution{ public static int solution(String s , String s2){ int ans = 0; HashMap<Character, Integer> map = new HashMap<>(); HashMap<Character, Integer> map2 = new HashMap<>(); for(char c : s2.toCharArray()){ map2.put(c, map2.getOrDefault(c, 0) + 1); } for(int i = 0; i<s2.length(); i++){ map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1); } if(map.equals(map2)){ ans++; } for(int i = s2.length(); i < s.length(); i++){ map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0)+1); if(map.get(s.charAt(i- s2.length())) == 1){ map.remove(s.charAt(i- s2.length())); }else{ map.put(s.charAt(i-s2.length()), map.get(s.charAt(i-s2.length())) - 1); } if(map.equals(map2)){ ans++; } } return ans; } } 전 강의에서는 항상 기존 b의 길이만큼 먼저 계산을 해주고 비교를 한후에 하나를 추가해주고 기존꺼를 제거하는 방식으로 저는 이해해를 해서 그런식으로 풀고 있었는데 강사님 코드 결론은 마지막에 b길이를 채워 주고나서 비교하고 나서 이전껄 빼고 새로운걸 추가시키고 비교하는 방식으로 하시는거 같은데 방식이 달라 어떤걸 더 봐야할지 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 인텔리제이에서 scanner로 입력받는거에서, 영어는 즉각즉각 빨리 쳐지고 잘 쳐지는데, 한글만 유독 다음글자를 입력해야 전의 입력한 글자가 그제서야 입력되는데 이거 어떻게 고치나요? 너무 답답해서 미칠 것 같은데, 한컴 입력기도 삭제했는데도 이러는데.. ㅠㅠㅠㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 단순히 한번 입력 받는 게 아닌 do-while문을 사용하신 이유가 궁금합니다!
안녕하세요! 강의를 보며 멀티플레이 게임 제작을 공부 중인 학생입니다. 현재까지 나온 강의를 모두 듣고 클론 코딩을 하였는데 종종 클라이언트에서 에러가 발생합니다. 깃허브 코드와 강의를 다시 봐도 해결이 힘들어 질문을 작성하게 되었습니다. client 화면에서 hero 들이 모두 화면 중앙에 배치되는 현상 host는 문제 없이 host와 client영역으로 나뉘어져 있습니다. 이 경우 client에서 host보다 먼저 herospawn을 하면 null에러가 뜹니다. NullReferenceException: Object reference not set to an instance of an object Spawner.HeroSpawn (System.UInt64 clientId, System.String rarity) Spawner 스크립트의 HeroSpawn(ulong clientId, string rarity) 함수의 var existingHolder = GetExistingHolder(temp, data.Name); 이 부분이 문제라고 뜹니다. host에서 herospawn을 먼저 하고 client에서 herospawn을 하면 null 에러 없이 랜덤하게 두 가지 경우가 나옵니다.. 위 사진처럼 client 화면의 중앙에 모든 hero가 배치되는 경우 host, client모두 정상적으로 배치되는 경우 그러나 위 두 가지 경우 모두 client는 host가 마지막으로 생성한 영웅만 생성됩니다. ex) host가 warrior 소환 시 client는 warrior 만 소환, host가 summon 버튼을 눌러 archer 소환 시, client는 그 후로 archer만 소환 client 에서 영웅 클릭 시, NullReferenceException 발생 CameraRay 스크립트의 MouseButtonDown() 함수의 else if (value == 1) Canget = holder.Holder_Part_Name.Contains("CLIENT"); 부분에서 발생합니다. 위 두 문제의 해결법을 알고 싶습니다 ㅠㅠ 게임을 실행하며 찾은 버그들 입니다. 내 진영에서 상대 진영으로 hero 이동 가능 hero 없는 빈 홀더 클릭 및 이동 가능 (ui도 뜸) 빈 홀더 클릭 후, sell 버튼 클릭 시 Sell() 함수 내의 UI_Main.instance.GetNavigation 부분 인덱스 범위 에러 발생 몬스터 클릭 시 CameraRay 스크립트 MouseButtonDown()가 호출되어 heroholder가 null이 되어 에러 발생 버그들은 각 관련된 처리를 하지 않아 발생한 것 같지만, 위의 클라이언트 문제는 해결법을 모르겠습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. @GetMapping("/members") public Page<?> list(@PageableDefault(size = 5, sort = "id", direction = Sort.Direction.DESC) Pageable pageable) { return repository.findAll(pageable).map(MemberResponse::new); } 해당 코드에서 API를 호출했는데 Serializing PageImpl instances as-is is not supported, meaning that there is no guarantee about the stability of the resulting JSON structure! For a stable JSON structure, please use Spring Data's PagedModel (globally via @EnableSpringDataWebSupport(pageSerializationMode = VIA_DTO)) or Spring HATEOAS and Spring Data's PagedResourcesAssembler as documented in https://docs.spring.io/spring-data/commons/reference/repositories/core-extensions.html#core. 이러한WARN 문구가 출력되었습니다. 이는 PageImpl의 객체가 그대로 JSON으로 직렬화되어 구조적인 문제가 발생할 수 있다는 경고 메세지 인데 이를 해결하기 위해서는 HATEOAS 의존성을 주입받아서 PagedModel을 반환하는 방법이 있고 spring.data .web.pageable.serialization-mode=via-dto 해당 코드를 yml 파일에 추가해서 글로벌 설정으로 가져가는 방법이 있고 @EnableSpringDataWebSupport(pageSerializationMode = VIA_DTO)) 방법이 있다고 합니다. 강사님 영상에는 해당WARN 문구가 보이지 않는데 그 이유는 버전의 문제때문에 강사님 영상에는 해당 WARN 문구가 보이지 않는게 싶습니다. 제가 가장 궁금한 것은 물론 프로젝트의 비즈니스에 따라 다르겠지만 위의 방법들중 어떤 방법이 가장 보편적으로 쓰이나 궁금합니다
조금 동 떨어진 질문일 수 있지만, 궁금증이 해소가 되지 않아 질문드립니다. 자바 애플리케이션에서 Thread를 생성해서 실행을 하게될 때, 총 3개의 스택영역을 거쳐야 된다고 생각을 하는데 맞을까요? 우선 런타임 데이터 영역 유저스레드의 스택영역 JVM 내부 스레드의 스택 영역 운영체제 커널 스레드의 스택 영역 각각을 이렇게 정리해봤습니다. 1. 유저 스레드의 스택 영역 - 자바에서 Thread객체를 생성하고 실행하면, JVM은 해당 스레드마다 스택 영역을 생성한다. - 이 스택영역은 바이트코드에서 메서드 호출하고 실행할 때 필요한 데이터를 관리한다. - 유저 스레드이고, 애플리케이션의 비지니스 로직을 수행하는 스레드이다. 2. JVM 내부 스레드의 스택 영역 - 클래스로더, GC, JIT와 같은 JVM내부 작업을 수행하는 스레드는 JVM 내에서 관리되는 스레드이다. - 이 스택 영역은 JVM코드에서 메서드 호출하고 실행할 때 필요한 데이터를 관리한다. - 유저 스레드이고, JVM의 핵심 작업을 수행하는 스레드이다. 3. 운영체제 커널 스레드의 스택 영역 - 커널 스레드는 실제 CPU에서 실행되는 스레드이다. - 유저 스레드의 실행을 처리하기 위해 유저 모드에서 작업을 처리하다가, 시스템 호출이 필요할 때 커널 모드로 전환되어 커널 스레드가 실제로 시스템 자원에 접근하고 작업을 처리한다. - 커널에서는 커널 스레드의 TCB를 관리하여 각 스레드의 실행 상태를 추적한다. - 이 스택 영역은 커널에서 수행하는 메서드에 필요한 데이터를 관리한다.
[질문 내용] Book 외에 Album, Moive도 구현하려고 합니다. 예제의 itemList.html에는 추상 클래스 Item에 정의된 속성들만 표시되도록 되어있는데요. Item이 Book인 경우에는 author, isbn이 Album인 경우에는 artist, etc 등이 같이 표시되도록 하려면 어떻게 구현하는 것이 가장 좋은 방법일까요? 타임리프에서 Item의 클래스를 체크한 후(instance of 와 유사) 다운캐스팅해서 각각의 타입에만 해당하는 내용을 출력하는 방식으로 구현하고, href도 "items/{id}/edit"을 수정해서 "items/{id}/book-edit", "items/{id}/album-edit"과 같은 식으로 하는게 맞는 방법인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요. 실무를 하는데 궁금한게 있어 질문 남깁니다. repository 인터페이스에 생성된 메소드를 실행하는데 string으로 파라미터 값을 보내주는 예제를 보여주셨는데, 혹시 vo를 바로 보내줄수도 있을까요? 가능하다면 어떤 형식으로 가능할지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니요 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요, 스프링 입문 강의 수강 중 문의드리고 싶어 글을 남깁니다. 강사님 말씀대로 hellospringapplication을 실행하니 붉은 색 글씨로 아래 문구처럼 출력됩니다. Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build what is described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#0.3 WARNING: A Java agent has been loaded dynamically (/Users/user/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.15.11/a38b16385e867f59a641330f0362ebe742788ed8/byte-buddy-agent-1.15.11.jar) WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information WARNING: Dynamic loading of agents will be disallowed by default in a future release OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 자바는 openjdk oracle 23.0.1을 사용 중이고, gradle jvm도 oracle openjdk 23 버전을 사용 중입니다. 제공해주신 다른 답변들을 확인하여 자바 버전을 17로 다운그레이드 하려 했는데 project structure에서 17 버전을 선택하니 amazon corretto가 선택되었습니다. 오라클 17 버전은 따로 뜨지가 않더라고요.. 오라클 버전 외 다른 17 버전을 선택하고 gradle jvm도 조정하면 해결될까요, 아니면 다른 방법이 있을까요 ? 양질의 컨텐츠 제공해주셔서 항상 감사드립니다.
강의를 듣고 제가 느낀 매니저들을 관리하는 방식은 최상위 Managers를 통해 각각의 매니저를 접근하도록 만든 방식인거 같더라고요(저의 해석이 틀렸다면 지적부탁드립니다.) 제가 여기서 궁금한 점은 다른 방식으로 각각의 매니저들을 싱글톤으로 만들어서 하는 방식이 존재하는데, 강의가 만약 게임의 규모가 커진다면을 생각해서 코드를 확장하기시기때문에 저도 좀 더 생각해보아서 후자의 방식이 더 좋은방식이지않을까?라는 생각이 들었습니다. 이 주장의 근거는 1.매니저들이 점점커지면 Managers에게 초기화 부담도 커질것이다. 2.Managers에 문제가생기면 모든 개별 Manager가 작동하지 않는다. 3.각 매니저는 전부 Managers에서 초기화 되기때문에 한 매니저에 의존성이 있는 매니저가 있을때 초기화 순서를 잘 해놓지않으면 오류가 발생한다. 다시 강조하자면 "게임의 규모가 커진다면 개별적으로 매니저들을 관리하는게 더 관리하기 좋은 방식이지 않을까?"에 대한 루키스님에 의견을 듣고싶어 질문을 올립니다.