10.15 - TIL

김혁·2025년 10월 15일

TIL

목록 보기
35/84

오늘의 코드카타

오늘의 공부

팀 프로젝트 진행 내용

  • 발표자료 생성
    • 프로젝트 개요
    • 게임 플로우 그래프
    • 기술적 세부사항
  • 게임 테스트 오류 발견 (일부의 사람만 발생)
    • 게임을 종료해도 EOS Overlay Renderer가 좀비 프로세스로 남음
    • 웹 브라우저가 정상적으로 동작하지 않음
      -> 증권사/은행 보안 프로그램과 충돌이 발생해서 게임 프로세스가 바이러스로 취급받아서 오류가 발생함
      -> 일반적인 게임 개발을 할 때, 보안프로그램 제작 업체에게 상호 배제 또는 호환성 패치를 요청해야 함

오늘의 CS

TMap vs std::map 차이점

  • std::map

    • 균형 이진 탐색 트리(Red-black Tree) 자료구조 기반
    • 키 순서로 자동 정렬됨
    • 탐색/삽입/삭제 시간 복잡도 : O(logN)
    • 노드마다 동적으로 메모리를 할당하므로 캐시 지역성이 낮아서 성능이 안 좋음
  • TMap

    • 해시 테이블 자료구조 기반 -> 내부적으로 TSet 활용 (Key와 Value를 구조체로 관리)
    • 키 기준으로 정렬되지 않음
    • 탐색/삽입/삭제 시간 복잡도 : O(1) -> TSet과 동일
    • 내부적으로 배열을 사용하기 때문에 캐시 지역성이 높아서 성능이 좋음 -> TSparseArray
    • KeyFuncs을 통해 해싱 및 비교 방식을 커스터마이징할 수 있음
  • TMap은 언리얼 엔진의 핵심 컨테이너 클래스이기 때문에, UE 고유의 기능을 지원함

    • 직렬화 : 자동으로 저장 및 로드가 가능함
    • 언리얼 리플렉션 시스템 : UPROPERTY()를 사용하여 블루프린트나 디테일 패널에서 접근 및 수정이 가능함
    • UE 메모리 관리 : 엔진 환경에 최적화된 메모리 관리를 수행함


TSet

  • 언리얼 엔진에서 해시 테이블을 구현한 기본 컨테이너
  • 삽입/삭제/탐색의 평균 시간 복잡도 : O(1)
  • 내부적으로 해시 테이블의 버킷 역할로 TSparseArray를 사용하고 있음

TSparseArray를 사용하는 이유

  • 배열의 장점 유지 (캐시 효율성)
    • 연속적인 메모리 블록에 데이터를 저장함
    • 노드 별로 분산된 메모리 할당을 하는 트리 기반 구조보다 캐시 지역성이 높음
  • 희소성의 도입
    • 일반 배열의 경우, 요소를 제거하면 뒤쪽의 모든 요소를 앞으로 당기는 과정이 필요 (O(N))
    • TSparseArray의 경우 제거하면 빈 슬롯으로 남겨두고, 새로운 요소가 삽입되면 빈 슬롯을 재활용하게 됨 -> 삽입/제거 시에 평균 시간 복잡도를 O(1) 유지해줌
profile
게임 개발자를 향해..

0개의 댓글