디시인사이드 갤러리

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

갤러리 본문 영역

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

McHello갤로그로 이동합니다. 2011.11.29 13:32:26
조회 159 추천 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 - -
이슈 [디시人터뷰] 충무로가 주목하는 신예, '세계의 주인' 서수빈 운영자 25/11/24 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
291573 프로그래머가 퇴근 후 하는 일 [7] 므해?갤로그로 이동합니다. 11.11.29 218 0
291572 자바 고수님들 파일전송프로그램인디 접속이안됩니다 ㅠ 한번봐주세요 ㅠ [2] 김치호빵갤로그로 이동합니다. 11.11.29 68 0
291571 음 훌륭한 병신력이다 [3] 분당살람갤로그로 이동합니다. 11.11.29 61 0
291570 이 소스의 문제점이 뭐냐 [3] ㅁㅌ(211.235) 11.11.29 61 0
291568 프갤에 질문하기전에 읽으세여 [1] 갤청소부갤로그로 이동합니다. 11.11.29 99 1
291567 형님들, sql server 랑 자바랑 연동이 되나요? [4] 콕찍(180.134) 11.11.29 76 0
291566 c언어로 그래프를 나타내는게 가능함 ? [3] 금전찾기(59.5) 11.11.29 147 0
291565 프갤횽들 청소하다 궁금한게 생겼는데 [3] 갤청소부갤로그로 이동합니다. 11.11.29 68 0
291563 아까 글올렸었는데... [8] c언어?(112.146) 11.11.29 81 0
291562 안드로이드 무료교육 vs 회사 일주일 더 다니기 [4] ㄱㄱ(112.214) 11.11.29 89 0
291561 분명히 뱃속에 똥이 있는거 같긴 한데 [3] Lover♥갤로그로 이동합니다. 11.11.29 80 0
291559 프갤을 관리하시는 전하 님은 보시옵소서. [3] 좋은아버지갤로그로 이동합니다. 11.11.29 68 0
291558 아 ㅠㅠ 왜 segmentation fault가 나는거야 ㅠㅠ [5] 잉여잉간 (110.76) 11.11.29 96 0
291554 게임카테고리 풀려서 무료겜 몇개 다운받아서 해봤는뎅 시불라미갤로그로 이동합니다. 11.11.29 64 0
291553 형들 플러그인 에러가 나는데... 문어(121.169) 11.11.29 29 0
291552 프로그래밍갤횽들... [25] c언어?(112.146) 11.11.29 188 0
291551 자바하던 중 궁금한거 매우 쉬움! 도와주세융 [28] ㅎㅎ(58.127) 11.11.29 130 0
291549 zzz는 봅니다. 솔직히 보안 쉽자나.? [4] 좋은아버지갤로그로 이동합니다. 11.11.29 135 0
291548 형들 오픈소스로 프로그래밍 공부 할수있음? [8] HaCh갤로그로 이동합니다. 11.11.29 86 0
291547 형들 .lib 파일 보는법좀 알려주세요 ㅇㅇㄹ(125.149) 11.11.29 28 0
291546 형들 이게 도대체 학부생 수준의 매트랩 난이도 맞아?? [1] 또하자(222.107) 11.11.29 578 0
291545 오오 금연 하루째~~ 잘 버텼다~~!! [1] 쿄스케갤로그로 이동합니다. 11.11.29 37 0
291543 홍콩행 코딩바 [3] 김후로게이갤로그로 이동합니다. 11.11.29 90 0
291542 MAMA보는사람없음? [1] 三didas갤로그로 이동합니다. 11.11.29 38 0
291540 opengl... 미천한 뉴비에게 가르침을 주십시오ㅠㅠㅠ [2] ㅁㄴ(220.66) 11.11.29 76 0
291539 나만 그러는건가? [2] 나리링갤로그로 이동합니다. 11.11.29 66 0
291537 하아 [21] 정수정•‿•갤로그로 이동합니다. 11.11.29 211 0
291534 나 1월달에 구만둔다.. 므해?갤로그로 이동합니다. 11.11.29 88 0
291533 ㅇㅇ(14.53.202.176) <- 누구?? [2] 쿄스케갤로그로 이동합니다. 11.11.29 93 0
291530 유니코드 인코딩말인데 localhost갤로그로 이동합니다. 11.11.29 52 0
291528 자살에 용기가 왜 필요 하냐? 1(121.146) 11.11.29 107 0
291527 횽들 큰일났어 안드로이드. [14] 뇌지랄갤로그로 이동합니다. 11.11.29 171 0
291525 혼자 연구하는 c 에서 도우미 헤더파일 터보c 어떻게 깔음? 1(121.146) 11.11.29 44 0
291523 IP 추적기 같은거 만들어 본사람?? [4] 주소가 뭐니?(61.73) 11.11.29 148 0
291522 노가다21C 형님 찬양 [4] 이명박보영(61.80) 11.11.29 69 0
291521 형들 안녕 ? ㅋ [1] 좋은아버지갤로그로 이동합니다. 11.11.29 54 0
291519 머리로는 이해가되고 그게 행동으로 되지않아요 [5] 조선최고의짐꾼갤로그로 이동합니다. 11.11.29 97 0
291518 왜 회사가 파산하면 그 직원들이 피해받는거야? [3] Stan(220.244) 11.11.29 129 0
291516 외국계 회사 구직중인데 이메지네이션(211.187) 11.11.29 63 0
291515 난 칼퇴한다..야근하는 프로그래머는 보세요.. [2] 므해?갤로그로 이동합니다. 11.11.29 147 0
291513 질문하나 해도될까요 헬프미 [1] 도와주세요(211.110) 11.11.29 41 0
291511 아스횽의 입술과 고간을 훔치고 싶다. [1] Lover♥갤로그로 이동합니다. 11.11.29 48 0
291510 형들 프로그램 쌩초짜도되니까 봐주세여 [3] 잦빙핱갤로그로 이동합니다. 11.11.29 81 0
291507 짜증난다... [3] Stan(220.244) 11.11.29 70 0
291506 학원홍보류중최강봄 이건산전갤로그로 이동합니다. 11.11.29 79 0
291504 막히던 부분에서 새로운 해결점을 찾을 때 Dawnwalkre갤로그로 이동합니다. 11.11.29 46 0
291503 아스 관찰결과 [2] 싴보이갤로그로 이동합니다. 11.11.29 45 0
291502 STL컨테이너 클래스에서 사용시 질문! [6] 남대생.갤로그로 이동합니다. 11.11.29 69 0
291501 횽님들 alexa.com 여기 결과 병신임??? 시불라미갤로그로 이동합니다. 11.11.29 46 0
291499 21C노가다형님 그거 보내주시거나 링크좀 걸어주십쇼 [1] 이명박보영(61.80) 11.11.29 28 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2