강의를 보면 UPROPERTY 를 사용할 수 없는 일반 C++ 객체 내부의 UObject 를 상속받은 객체의 경우 C++ 객체에 FGCObject 를 상속받고 AddReferencedObjects 함수를 통해 가비지에 UObject 에 상속받은 객체를 선언하는 식으로 하여 가비지의 개입을 막는 것으로 보이는데요. 다만 이때 이럴 경우가 없겠지만 C++ 클래스 생성자에서 UObject 를 상속받은 객체를 생성 후 C++ 클래스 소멸자에서 UObject 를 상속받은 객체를 삭제하고 싶다면 저는 소멸자에서 무언가를 할 필요는 없는지요? C++ 객체 가 삭제되면 가비지는 알아서 그 안에 있는 UObject 들을 모두 알아서 메모리를 회수 하는지 궁금합니다. 더불어서 C++ 클래스 내에서 n 개의 UObject 를 상속받는 객체를 관리한다면, 모두 AddReferencedObjects 에 등록하면 되는지도 궁금합니다. 마지막으로 예를 들면 UMyGameInstance 에서 UPROPERTY() 를 선언한 UObject 를 상속받은 객체 A 가 있다면 이를 FStudentManager 에 포인터로 넘겨서 FStudentManager 내에서 A 에 대한 무언가 관리를 한다면 A 는 이미 외부(UMyGameInstance ) 에서 UPROPERTY() 를 선언하였으니 FStudentManager ->AddReferencedObjects 를 통해서 등록할 필요는 없는지 궁금합니다.
인벤토리는 정렬을 지원합니다. 데이터의 삽입과 삭제, 수정이 빈번할 수 있습니다. 이럴 때는 TArray / TSet 중 무엇이 올바를까요? TArray/TSet 을 Unity C#의 ArrayList( 혹은 List) / LinkedList 의 관계가 아닌가 생각했는데요. 강의를 듣고 보니, TSet 는 순서가 중요되지 않고, 빈 메모리가 들어 있다는 점에서 어떤지 궁금합니다.
한 번에 끝내는 AI 에이전트 개발 올인원 (w. LangGraph, Google ADK, CrewAI)
uv sync 후 uv run main.py 실행 시 Traceback (most recent call last): File "/Users/kade/kade/ai-agent-playground/5_english_tutor/main.py", line 9, in <module> from tutor_crew import EnglishTutorCrew, add_to_conversation File "/Users/kade/kade/ai-agent-playground/5_english_tutor/tutor_crew.py", line 5, in <module> from tools import rag_tool File "/Users/kade/kade/ai-agent-playground/5_english_tutor/tools.py", line 22, in <module> from langchain.text_splitter import RecursiveCharacterTextSplitter ModuleNotFoundError: No module named 'langchain' 과 같이 text splitter에서 lanchain import 에러 발생합니다. 마찬가지로 RetrievalQA도 동일한 에러 발생합니다. 공식 문서를 찾아보면 두 메서드(클래스)는 deprecated 되었습니다. pyproject.toml의 의존성이 >= {version} 을 사용하다 보니 최신 버전이 패치되면서 더 이상 호환되지 않는 것 같습니다. 버전을 고정하거나 강의를 수정해야 할 것 같습니다.
안녕하세요! 먼저 좋은강의 감사드립니다. 세션15. 64 CircumferenceMarkerWidget 강의에서 코드 흐름 의도가 자체가 UCircumferenceMarkerWidget 클래스의 bReticleCornerOutsideSpreadRadius 값을 가지고 SCircumferenceMarkerWidget 클래스의 똑같은 bReticleCornerOutsideSpreadRadius 값을 초기화 해주는 형식으로 구현하는것으로 이해 했습니다. 근데 강의 코드도 그렇고 실제 Lyra 코드에서도 보니까 SCircumferenceMarkerWidget::bReticleCornerOutsideSpreadRadius 값을 초기화 해주는 코드가 따로 안보여서요 결론적으로 bReticleCornerOutsideSpreadRadius 값에 쓰레기값이 들어가서 게임을 실행할떄마다 MarkerWidget이 랜덤으로 Spread 반경 밖으로 벌어지거나 안벌어지거나 문제가 생기는거 아닌가요? 이게 실제 Lyra샘플 코드에서도 초기화 하는 코드가 안보이길래 이게 의도된것 일지 아니면 일종의 버그라고 보면되는것인지 궁금합니다!
안녕하세요. 주말과 평일 저녁 시간을 활용해 강의를 듣고 있는 직장인입니다. 현재 강의를 들으며 열심히 학습 중입니다만, 강의 수강 기간이 11월 13일에 종료되어 시험일인 11월 29일까지는 다소 시간이 부족할 것 같아 문의드립니다. 혹시 강의 수강 기간을 시험일인 11월 29일까지 연장해주실 수 있을까요? 메일주소 gusdk1541@hanmail.net 입니다. 확인 부탁드리며, 도움 주시면 감사하겠습니다. 감사합니다.
포인터 조작과 출제 패턴 (2. 포인터 증가/감소, 이중 포인터) 9:35 printf("%c\n", *(ptr_a+1)); 여기서 ptr은 str[] 배열이기 때문에 H값이 온다는 것은 이해를 했는데 printf할 때 배열 단위로 오면 printf("%c\n", *(ptr_a+1)) 오는 것 같고 배열에서 특정 위치를 표현하는 printf("%c\n", ptr_a[1])가 오는 것 같은데 같은 배열을 이용하는 건데 * 사용 대해서 차이가 위 설명이 맞을까요?
포인터 조작과 출제 패턴 (2. 포인터 증가/감소, 이중 포인터) 3:36 배열의 경우는 메모리 주소와 같은 개념이라고 이해했는데 char *ptr_a=a; 경우 a는 배열 내 첫번째 요소를 의미하는 것으로 "H"로 지정된다는 것을 이해를 했습니다. 다만, printf("%c/n", * ptr_a);에서 변수 앞에 출력하고자하는 변수 앞에 *가 있으면 해당 메모리 주소의 값으로 출력이 된다고 하였는데 배열일 경우, printf("%c/n", *ptr_a) 값과 printf("%c/n", ptr_a) 값은 같은건가요? 일반적으로 *가 없으면 메모리 주소를 출력하는 것으로 알고 있습니다.