디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

XML에 관해 간단히 정리해봤음.. 언젠가는 쓰니까 궁금하면 보기

McHello갤로그로 이동합니다. 2011.11.29 13:32:26
조회 161 추천 2 댓글 4


XML...eXtensible MarkUp Language

일단 용어는 각설하고 본론으로 들어간다.

테이블이 지원되지 않는다는 가정하에 생각을 해보자..

가령 게임 주인공이 한마리 있다

기본 속성으로는

이름: name = "MCHELLO"
공격력 attackPower = 10.5
체력 maxHealth = 200
레벨 level = 1;

정도가 있다고 가정해보자.

사용자는 게임을 하다가 Save하기를 원한다. 게임을 재 가동했을때 자기 캐릭터의 능력치가 초기화 되어있는 x같은 상황은 꿈도 꾸기 싫다.

가장 원초적인 방법은 다음과 같은 속성들을 통 스트링으로 묶는것이다

string saveData = "MCHELLO#10.5#200#1"

그리고나서 완성된 이 통 스트링을 바이너리 형태로 저장한다. 

"저장완료"

로드시에서는 이렇게 될것이다.

/*주석
통 string의 구조 0번째 이름, 1번째 공격력, 2번째 체력, 3번째 레벨
*/

1. 바이너리 데이터를 불러와서 다시 string형태로 바꾼다.

2. 통스트링을 구분자( # )기준으로 배열에 담는다.

ex) arr[ 0 ] = MCHELLO, arr[ 1 ] = 10.5, arr[ 2 ] = 200, arr[ 3 ] = 1;

3. 다시 이 값을 속성에 적용해준다

name = arr[ 0 ];
attackPower = arr[ 1 ];
.
.
.


이게 가장 원초적인 방법이다. 간단한 게임에서는 이와 같은 방법이 매우 효율적이다. 하지만 데이터의 종류가 늘어날 수록 파싱하기가 x같아진다..

그럴때 사용하는것이 바로 Dictionary다

Dictionary는 key, value형태로 데이터를 물고 있다, 인덱스가 중요하지 않다.

saveDic.insert( "name", "MCHELLO" );
saveDic.insert( "attackPower", 10.5 );
.
.
.
가져올때도 매우 직관적이다

name = valueForKey( "name", saveDic );
attackPower = valueForKey( "attackPower", saveDic );


하지만 저장되는 캐릭터가 추가된다면 어떨까?? 

"name", "attackPower"로 사용하던 key값을 한 Dictionary에 때려박기 위해서는 다음과 같이 해야할 것이다.

"mchelloName", "mchelloAttackPower", "tomName", "tomAttackPower"

매우 작업이 비 효율적으로 진행된다.


로컬만 예로 들어도 이런데 Web으로 접근하면 머리 아파진다.

그래서 우리는 DB를 사용한다

DB에 대한 설명은 생략한다.



하지만 개발자들은 꼭 DB에 접근하지 않아도 보기좋게 정리된 파일 포맷을 주고 받기를 원한다.

그래서 나온게 XML이다.

위의 데이터를 XML형태로 바꾸면 다음과 같다

<main>
        <character>
                <name>MCHELLO</name>
                <attackPower>10.5</attackPower>
        </character>
</main>

캐릭터가 한명 더 추가되어도 문제없다

<main>
        <character>
                <name>MCHELLO</name>
                <attackPower>10.5</attackPower>
        </character>
        <character>
                <name>TOM</name>
                <attackPower>20.2</attackPower>
        </character>
</main>

매우 직관적이다. 어떻게 파싱하고 어떻게 쓰는지 몰라도 일단 눈에 딱 들어온다. 최고다!!

하지만 XML 역시 문서파일이기 때문에 글자 수에 따라서 파일용량에 차이가 난다.

다음과 같은 형식으로 쓰는 사람도 많다

<main>
        <character name="MCHELLO" attackPower="10.5"/>
        <character name="TOM" attackPower="20.2"/>
</main>


이렇게 작성한 파일은 .xml의 확장자를 가지고 저장되며 왠만한 언어는 모두 기본적인 xmlParser를 제공한다.

Parser의 종류는 크게 DOM방식과 SAX방식으로 갈리는데

DOM은 XML데이터를 parser가 통짜로 긁어와서 트리화 시킨다. 개발자는 그 트리에 접근해서 XML을 사용하면 된다.

ex) xml = new XML( "saveData" );

xml.character[ 0 ].name[ 0 ]                // output :: "MCHELLO"
xml.character[ 1 ].name[ 0 ]                // output :: "TOM"

SAX방식은 XML파일의 전체 노드를 긁으면서 이벤트를 발생시킨다. 그 때 그때 상황에 맞게 개발자가 data를 정리하면된다.

ex)

xml.parse( "saveData" );

void StartElement( string _nodeName, string _value )
{
        if( _nodeName == "attackPower" )
        {
                myList.push( _value ) // output :: 10.5
        }        
}

확실히 DOM방식보다 SAX방식은 개발자에게 손이 많이간다.

적당한 크기의 XML이라면 DOM방식이 쓰기 훨씬 수월할 수 있으나 XML의 용량이 크다면, SAX방식의 처리가 훨씬 빠르다.



iOS 에서는 plist형태의 문서파일도 매우 선호한다. 이 역시 뜯어보면 XML이다.

JSon도 많이 쓰는 추세다.



모두가 각각의 장단점을 갖고 있으며 개발자 입맛대로 쓰면 되겠다.

끝.


P.S euc-kr 좀 쓰지마 ㅅㅂ








추천 비추천

2

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 뛰어난 운동 신경으로 남자와 싸워도 이길 것 같은 여자 스타는? 운영자 25/11/24 - -
AD 따뜻한 겨울나기! 방한용품 SALE 운영자 25/11/27 - -
292579 MSSQL에서 2중GROUP BY 가능한가요? [2] ??(175.208) 11.12.05 75 0
292578 디아블로3 빨리 나왔음 좋겠다. Gromit갤로그로 이동합니다. 11.12.05 39 0
292575 프로그래머의 햄보칸 점심시간^_^ [1] 므해?갤로그로 이동합니다. 11.12.05 104 0
292572 출근해서 멍때리고있네.. 진지.. [23] 줫밥(122.49) 11.12.05 185 0
292571 너님들은 남방 보통 얼마만에 세탁기 돌리냐? [4] 분당살람갤로그로 이동합니다. 11.12.05 107 0
292560 형님..자바스크립트 질문좀 할게요... 하늘아래첫동네갤로그로 이동합니다. 11.12.05 42 0
292558 알고리즘 [2] stdlib.h갤로그로 이동합니다. 11.12.05 110 0
292557 야 여기 MDM보안 풀수있는사람 도와ㅑ주세요(182.214) 11.12.05 84 0
292556 자바가 프로그래밍 언어 1위 [2] 사과갤로그로 이동합니다. 11.12.05 208 0
292555 저ㅣ...ㅠㅠ여기다가 이런글올려도되는지 모르겟는데 [1] 도와ㅑ주세요(182.214) 11.12.05 43 0
292554 혹시 엑셀 VBA 잘쓰시는분 있나요?? 전선을간다(222.235) 11.12.05 69 0
292553 횽들 c언어 이제 시작하는 꼬꼬만데 c,c++,objective c [1] ㅇㅇ(118.176) 11.12.05 85 0
292552 자바 고수님...부탁이있음요..사례할게.ㅠㅠ [1] 1111(210.205) 11.12.05 55 0
292548 자바가 왜 프로그래밍언어 1위임? [4] 박구갤로그로 이동합니다. 11.12.05 206 0
292547 님들 외장하드 비번거는프로그램좀 추천점;; 조공있음 [2] 1231231(207.253) 11.12.05 97 0
292546 형들 아이폰 개발하려면 SDK랑 Xcode랑 Object c 이렇게 [3] ㅇㅇ(118.176) 11.12.05 82 0
292545 공상 적인 이야기지만.. [2] 솔라리스와리눅스갤로그로 이동합니다. 11.12.05 51 0
292544 유입이 염치불구하고 질문드립니당;;; 도와주세요;; 끵끵(220.119) 11.12.05 57 0
292543 도와줘요 횽들 [3] 중궈(121.152) 11.12.05 55 0
292542 면접때 나왔던 문제 중 하나 [10] 주석없음갤로그로 이동합니다. 11.12.05 204 0
292541 boost::lexical_cast 써본사람있음? [2] 사과갤로그로 이동합니다. 11.12.05 59 0
292540 잠온다. 자고 싶은데... 외계달팽갤로그로 이동합니다. 11.12.05 55 0
292539 씨언어 소스좀 알려주세요 형님들 ㅜㅜ [2] ㅇㄴㅁㅇㅁㄴ(124.49) 11.12.05 72 0
292537 c++ 배열관련해서 엄청쉬운거 질문하나만 받아주실분? [4] ㅁㅇㄴㄹ(121.170) 11.12.05 72 0
292536 char* str, char *str [3] 페티쉬맨(218.152) 11.12.05 72 0
292534 웹페이지만들때 질문좀 [1] 三didas갤로그로 이동합니다. 11.12.04 64 0
292533 프로그래머에게 월요병이란..없다.. 므해?갤로그로 이동합니다. 11.12.04 70 0
292532 TCP에서 전송된 데이터가 합쳐질수도 있나요? [3] (118.38) 11.12.04 70 0
292531 C++ Catch 뭔가 하는건데..첨하는거라 모르겠어요!! [7] 없쥐갤로그로 이동합니다. 11.12.04 61 0
292530 전문대 현장실습 가라로 하는법좀 ㅠㅠㅠ [3] 정보통신공학(125.135) 11.12.04 405 0
292529 형님들 중에 온톨로지 하시는분 있나용? Lumberjack갤로그로 이동합니다. 11.12.04 45 0
292528 [AWT] 자바로 과녁 맞추기 게임 만드는 중인데 조언좀.. [2] Partyup갤로그로 이동합니다. 11.12.04 525 0
292524 횽들 c++ 질문좀.. 이코드 왜 뻑날까??? [4] 왠뻑?(221.146) 11.12.04 97 0
292523 엑셀 수식 좀 알려주삼 에이스400갤로그로 이동합니다. 11.12.04 45 0
292522 내일 월요일 나우 로딩갤로그로 이동합니다. 11.12.04 35 0
292520 자바스크립트 질문요...(알고리즘) [1] 123(218.236) 11.12.04 62 0
292519 형들 CSS 설명 잘나온곳없어? [1] 三didas갤로그로 이동합니다. 11.12.04 62 0
292518 함수호출 어떻게하는거예염 [2] 독담갤로그로 이동합니다. 11.12.04 76 0
292517 메모리를 read 할 수 없습니다. [1] 메모리(210.107) 11.12.04 54 0
292516 형들 c언어 이거좀 봐줘염 밑에거랑 위에거랑 .. [11] 독담갤로그로 이동합니다. 11.12.04 266 0
292515 형들아 rand함수에서 자꾸 같은수만 나오는데? ㅠ [1] 곰세마리가갤로그로 이동합니다. 11.12.04 71 0
292514 텀프로젝트 발표하다 황당한일.. ID(121.173) 11.12.04 108 0
292513 VB 비주얼베이직 질문좀 해봅니다 굽신(182.211) 11.12.04 97 0
292508 아직도 최고의 응용프로그램개발언어는 박구갤로그로 이동합니다. 11.12.04 117 0
292507 자바에서 버튼 초기화 하라는게 먼말임 대체?? [3] ㅇㅇ(121.173) 11.12.04 84 0
292505 API 공부중인데 공부좀 해본 횽들 나좀 도와주엉(과제x) [3] 촞뉴빙(125.176) 11.12.04 88 0
292503 횽들아 진짜 잉여같은 질문 하나만 ... Re-FEEL갤로그로 이동합니다. 11.12.04 42 0
292502 아! 내가 해냈다! 김 딜러(211.211) 11.12.04 66 0
292501 늅늅이의 자바질문욬 [1] ㅇㅇ(121.173) 11.12.04 37 0
292499 자바도 일반pc에 상용화될순없을까 [1] 박구갤로그로 이동합니다. 11.12.04 114 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2