티스토리 뷰

게임 내 데이터를 효율적으로 관리하려면 추가 파일 데이터를 갖고 있는 것이 바람직하다. 그런데 데이터 파일을 Plain Text로 갖고 있다면 사람이 파일을 봤을 때 무엇을 의미하는지 알기 쉽지 않을 것이다. 따라서 사람에게 가까운 형식으로 만들어진 파일인 XML이나 JSON을 주로 사용하게 되는데, 여기서 또 XML과 JSON 중 어떤 것을 선택해야 하는 것인가에 대한 고민을 하게 된다.


결론부터 말하자면 JSON을 사용하는 것을 권장한다. 개인적으로 꺽쇠 괄호가 남발되는 XML을 선호하지 않기도 하지만, 무엇보다도 데이터 용량의 차이와 파서 라이브러리가 잘 되어있는 것이 JSON이기 때문이다. 


JSON의 경우 Indentation을 예쁘게 했을 경우 용량이 다소 커보인다. 하지만 Indentation을 제거하고 나면 군더더기가 사라져 파일 용량이 상당히 작아지게 된다. 몇 KB의 차이이긴 하지만 많은 데이터를 사용하는 게임에서는 그 차이가 점점 커질 것은 당연할 것이다.


사실 용량만 두고 봤을 때는 굳이 JSON을 선택해야 하나 싶을 수 있다. 하지만 XML 파싱 라이브러리를 생각하면 JSON 쪽으로 더욱 마음이 기울어지게 된다. XML의 경우 Tinyxml2를 이용했었는데 JSON은 사실 마땅히 괜찮은 JSON 파서 라이브러리가 Cocos2d-x-2.2 버전 전까지는 없었다. 즉, 이 말은 2.2 버전부터는 괜찮은 라이브러리가 등장했다는 뜻이다. CSJsonDictionary라는 클래스가 등장했는데 잘 보면 이 클래스를 사용하는 곳이 SceneReader임을 알 수 있다. (CocoStudio Scene Editor에서 만들어진 씬 데이터를 읽어들여 Node를 만들어주는 클래스이다. extensions\CocoStudio\Json\CSContentJsonDictionary.h,cpp 파일에 있다.) 이 말은 공식적으로 외부 데이터를 JSON으로 관리하겠다는 것으로 볼 수 있다. 


CSJsonDictionary 클래스


그렇지 않다고 하더라도 CSJsonDictionary는 꽤 훌륭하게 만들어진 클래스이다. 이전에 JsonReader과 같은 것으로 사용하던 것에 비해 훨씬 객체지향적인 느낌이 물씬 풍기는 클래스이다. 특히 fstream 같은 함수를 쓰지 않고, 또 요란하게 헤더파일을 추가하지 않고 사용할 수 있는 클래스라는 점이 매력적이다. 간단히 cocos-ext.h와 namespace, 그리고 cs라는 namespace만 써주면 되니까 말이다. (이전에는 폴더를 거슬러 거슬러 올라가서 헤더 파일을 추가했어야 했다.) 자세한 용례는 [Cocos2d-x] JSON을 활용한 스프라이트 애니메이션 클래스 제작이라는 내 글을 참고하시라.


또한 요즘은 서버와 통신할 때 JSON 포맷을 이용하는 추세이다. 이왕이면 데이터 포맷은 하나로 통일하는 것이 정신건강에 이롭다는 것은 다들 알 것이다. 사용하기도 쉽고, 정신건강에도 도움이 되는데 안 쓸 이유가 없지 않을까?

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday