강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

dain님의 프로필 이미지
dain

작성한 질문수

유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지

데이터 테이블 관리 시스템 (DataTableManager, CSVReader)

데이터 로드 관련 질문

작성

·

19

0

안녕하세요! 강의 잘 듣고 있습니다.
13. 데이터 테이블 관리 시스템 부분을 듣다가 몇 가지 의문점이 있어 질문 드립니다.

 

  1. CSV Reader가 List<Dictionary<string, object>>를 반환하고 있고, 이를 로드 함수에서 실제 데이터로 형변환해 사용하고 있습니다. 그런데 object 타입을 값 타입으로 변환하면 언박싱이 발생해서성능에 좋지 않다고 알고 있습니다. 통일성을 위해서 object 타입으로 쓰신 건지, 로드 과정이 Awake에서 한 번에 일어나기 때문에 괜찮은지 궁금합니다. 그리고 object 대신 string을 반환하는건 어떤지도 여쭤보고 싶습니다.

     

  2. 챕터 데이터를 검색할 때 리스트에서 순회를 하는데 딕셔너리 같은 별도의 자료 구조에 저장하지 않은 이유가 궁금합니다.

 

감사합니다.

답변 2

0

BurningCarrot님의 프로필 이미지
BurningCarrot
지식공유자

안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다.

  1. CSV Reader에서 object 타입을 쓰는 이유

     

    object 타입을 쓰는 이유는 데이터 테이블에 저장된 데이터가 문자, 숫자(정수, 실수) 등 다양하기 때문입니다. object 타입이면 다양한 데이터 타입을 저장할 수 있는데 굳이 모두 string으로 바꾸는 불필요한 행위를 할 필요는 없습니다. 언박싱으로 인한 성능저하를 걱정하시는데 중소 규모의 게임에서의 성능 저하는 짧은 시간 단위로 반복으로 실행하는 Update 함수 같은 곳에서 그 특정 행위를 하는지 여부만 보시면 됩니다. CSVReader로 데이터를 읽어오는 행위는 게임 시작 시 단 한번만 실행할 뿐더러 Update 함수 같은 곳에서는 사용하지 않기 때문에 성능 저하는 우려하지 않으셔도 됩니다.

     

  2. 리스트 순회를 통한 데이터 검색

     

    저장된 데이터가 많고 데이터 검색이 자주 일어난 다면 딕셔너리에 저장하셔도 됩니다. 저는 데이터의 양이 많지 않고 검색 또한 자주 일어나지 않아 리스트로 처리했습니다. ItemData와 같은 경우는 딕셔너리에 저장하는 것이 더 나은 선택일 것 같습니다. 검색이 자주 일어난다는 기준 또한 상대적입니다만 Update 함수에서 계속적으로 호출하는 것은 당연히 자주 일어나는 기준에 부합하는 것이고, 그 외에도 1초 단위 정도로 계속적으로 호출될 수 있는 것도 자주 일어나는 기준에 부합한다고 말씀 드릴 수 있겠습니다.

0

안녕하세요, 인프런 AI 인턴입니다. dain님.

데이터 테이블 관리 시스템에서 CSV Reader를 사용하여 데이터를 로드하는 과정에 대한 질문을 주셨네요. CSV 데이터를 읽을 때 List<Dictionary<string, object>> 형식을 사용하는 이유와 성능적 고려 사항, 그리고 데이터 검색 방식에 대한 궁금증을 해결해 드리겠습니다.

  1. List<Dictionary<string, object>>의 사용 이유:
    object 유형을 사용하는 것은 유연성을 높여 주기 때문에, 다양한 데이터 타입을 쉽게 처리할 수 있습니다. 물론 언박싱으로 인해 성능이 저하될 수 있지만, 데이터 로드가 Awake에서 한 번만 일어난다면 큰 문제가 되지는 않습니다. 그러나 성능이 중요한 경우, 각 필드를 명시적으로 타입 변환하지 않고 바로 사용할 수 있는 string이나 다른 적절한 타입을 반환하는 방식을 고려할 수 있습니다. 이는 데이터 형식을 확실히 알고 있을 때 유리합니다.

  2. 리스트 순회를 통한 데이터 검색:
    검색 성능이 특히 중요하다면, 딕셔너리와 같이 접근 시간이 빠른 자료구조로 사용하는 것이 유리합니다. 데이터의 빈번한 검색이 예상된다면, 이를 고려해 데이터를 초기 로드 시 리스트 대신 딕셔너리 형태로 변환하여 보관하는 방법이 성능 향상에 도움이 될 수 있습니다.

관련해서 데이터를 효율적으로 관리하기 위한 다양한 접근 방법이 설명된 기존 질문과 답변을 찾아보는 것도 좋습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dain님의 프로필 이미지
dain

작성한 질문수

질문하기