🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

LoadXml 함수 질문입니다.

22.12.26 17:21 작성 22.12.26 17:30 수정 조회수 281

0

private Loader LoadXml<Loader, Key, Item>(string name) where Loader : ILoader<Key, Item>, new()

{

XmlSerializer xs = new XmlSerializer(typeof(Loader));

TextAsset textAsset = Resources.Load<TextAsset>("Data/" + name);

using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(textAsset.text)))

return (Loader)xs.Deserialize(stream);

}

제공해주신 코드가 Unity강좌에서 JsonUtility 다루셨을 때 코드와 비슷해서 어느 정도 이해할 수 있었습니다. 하지만 코드에서 궁금한 부분이 존재해서 질문 남깁니다.

1.기존에 배웠던 코드와는 다르게 Loader where 조건 부분 마지막에 new()는 어떤 의미 인가요?

  1. using 부분에 정확한 의미를 모르겠습니다. 대략 리딩해보면 TextAsset을 MemoryStream 형식으로 변형해서 역직렬화하는 것 같은데 MemoryStream이 어떤 것인지 궁금합니다.

항상 좋은 강의 올려주셔서 감사합니다.

답변 1

답변을 작성해보세요.

0

1.
이런 상황에서는 where new() C# 을 구글에 검색하시면 됩니다.
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/new-constraint
Loader라는 애가 기본 생성자로 new()를 할 수 있어야 한다! 는 제약입니다.

2.
1보다는 조금 어려운 상황인데, 구글에 C# using dispose 를 검색하시면 됩니다.
객체 사용이 끝났을 때 자동으로 메모리를 정리하거나 Stream를 정리해주는(?) 기능과 연관이 있습니다.

ji980207님의 프로필

ji980207

질문자

2022.12.27

이해했습니다. 감사합니다. 한 가지 더 질문이 있는데 그렇다면 UTF8로 인코딩 하는 이유는 단순 XML 파일에 있는 텍스트를 읽어올 때 한글이 깨지는 것을 방지하기 위해 사용하는 것일까요 ?

utf8 utf16 등 파일 인코딩을 정해야,
읽는 쪽에서도 동일한 의미로 읽어올 수 있기 때문입니다.

채널톡 아이콘