디시인사이드 갤러리

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

갤러리 본문 영역

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

McHello갤로그로 이동합니다. 2011.11.29 13:32:26
조회 160 추천 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 - -
291885 프갤질도 끊고 일했음 [2] !@#ㅇㅇ갤로그로 이동합니다. 11.12.01 62 0
291884 윤성우 tcp/ip 소켓프로그래밍 보고있는데 존나 못가르친다 [1] 윤성우(61.75) 11.12.01 261 0
291882 정보보안은 조까고 암호학이라면 한번 해보고 싶다 [1] 알탱o갤로그로 이동합니다. 11.12.01 99 0
291881 형들 연산하면 얼마의 부하가 어느정도로 걸리는지 알 수 있는 방법 없는가 [7] 이명박보영(61.80) 11.12.01 85 0
291880 풀어주세요 성님들~ [1] 개허죱(61.81) 11.12.01 37 0
291877 방통위 산하에 sns 심의기구 만든대 [6] 분당살람갤로그로 이동합니다. 11.12.01 85 0
291876 여친 만들기 vs 취업하기 전간디갤로그로 이동합니다. 11.12.01 71 0
291875 덕후새끼들이 대충 쫌만 배워서 취직하겠다고 덤벼들면서 [2] 알탱o갤로그로 이동합니다. 11.12.01 126 0
291874 근데 미국프로그래머랑 한국프로그래머 [7] 싴보이갤로그로 이동합니다. 11.12.01 225 0
291873 날씨도 좋은데 정보보안 호구들이 또 밀려오는구나 [6] 알탱o갤로그로 이동합니다. 11.12.01 165 0
291871 갤투에 망고 올리면 괜찮을까? [3] -ㅂ-(210.90) 11.12.01 60 0
291870 중1 올라가는데 정보보안으로 진로를 정하고 싶습니다 늦지 않았나요? [6] 초딩6(59.13) 11.12.01 142 0
291869 정보 보안쪽으로 일을 하고 싶은데 [14] ㅁㄶㅁㄴㅇ(119.198) 11.12.01 222 0
291867 안드로이드마켓 게임카테고리 오픈 [2] 이문동쮸쮸바갤로그로 이동합니다. 11.12.01 90 0
291866 24시간동안 아무것도 못먹었다 [6] 알탱o갤로그로 이동합니다. 11.12.01 113 0
291865 프로그래머가 그렇게 업무량이 빡세고 암울하고 봉급은 짜고 그럼?? [9] 카자흐스탄(125.135) 11.12.01 198 0
291863 게이 갤이지만 C언어 기본서는 추천해줄수 있다고 생각한다. [8] 다림줄갤로그로 이동합니다. 11.12.01 158 0
291862 형들은 보통 출근하는데 시간 얼마나걸려? [7] 좋은아버지갤로그로 이동합니다. 11.12.01 94 0
291861 근데 진짜 여자 프로그래머없어?? [8] 엄쿤(61.40) 11.12.01 201 0
291859 xml 파싱에서 파싱이 뭔지 간단하게 설명좀 해줘 형들 [2] 핫산(203.237) 11.12.01 77 0
291857 숭실 동국 둘중에 하나 간다는 종자 소환 [10] 나리링갤로그로 이동합니다. 11.12.01 321 0
291856 신촌에 먹을 곳이 없다니 [1] 초딩6(59.13) 11.12.01 60 0
291855 형들은 나이차이 몇살까지 가능함? 연하 [9] 붑이8(61.40) 11.12.01 137 0
291854 방금 입사지원 하라고 연락이 왔어요 [9] 좋은아버지갤로그로 이동합니다. 11.12.01 158 0
291853 아게이가 천재와 바보를 이야기하는데 [1] Adelposs갤로그로 이동합니다. 11.12.01 68 0
291852 신촌에 점심먹을곳 괜찮은곳 없나? [4] Partyup갤로그로 이동합니다. 11.12.01 128 0
291851 동국대 컴공이랑 숭실대 컴학에 붙었다면 어디가는게 더나을까여 [8] ㅁㅁ(125.135) 11.12.01 235 0
291850 아근 SM존나 나쁜덧 [1] Gavi_cp갤로그로 이동합니다. 11.12.01 89 0
291848 점심때가 되었슴다 [10] Gavi_cp갤로그로 이동합니다. 11.12.01 91 0
291846 이런거 프로들이 만들겠지? [1] iljeomobolt갤로그로 이동합니다. 11.12.01 87 0
291845 빈말들으면 당연히 좋기야 하겠지 [1] 개쉛기갤로그로 이동합니다. 11.12.01 83 0
291843 이쁜남자라는건 Adelposs갤로그로 이동합니다. 11.12.01 41 0
291841 여기 컴퓨터과 다니는분들 많나요? 제가 경영학관데 [7] 경영(125.131) 11.12.01 171 0
291840 sns 차단 가능할까? [3] iljeomobolt갤로그로 이동합니다. 11.12.01 73 0
291839 굽신굽신 디갤서 왔슴돠 혹시 데비안쪽 잘 아는 성님 계신가요? 나팔갤로그로 이동합니다. 11.12.01 47 0
291838 임베디드 쪽으로 나가면 미래없냐?? [2] ㄹㄴ(119.149) 11.12.01 181 0
291837 망해따.. [1] 일광면(119.198) 11.12.01 54 0
291834 아래 새끼 참 생각 없구나 [5] -ㅂ-(210.90) 11.12.01 171 0
291833 아근데 왜 짤이 안올라가지지 [1] Gavi_cp갤로그로 이동합니다. 11.12.01 75 0
291831 나는 친구한테 고민을 얘기하지 않는데 [3] Gavi_cp갤로그로 이동합니다. 11.12.01 70 0
291828 넷헬퍼라는 거 감시프로그램이야? 카링(14.54) 11.12.01 47 0
291825 사람들은 자기 칭찬에만 너무 익숙해져 있다.. [7] 쿄스케갤로그로 이동합니다. 11.12.01 117 0
291824 입갤 ) 컴퓨터 조립할려고 하는데요 다림줄갤로그로 이동합니다. 11.12.01 47 0
291823 스타킹 신은 남자가 최고라는거 모르냐 Lover♥갤로그로 이동합니다. 11.12.01 62 0
291822 해외기업에서 동영상 스트리밍 해달라고 파일을 줬는데 비트레이트가 [1] (112.223) 11.12.01 106 0
291820 기말과제로 교수가 어셈블러 만들라는대 너무 막막함 ㅜㅡ 살려줘요!! [6] 라탓타갤로그로 이동합니다. 11.12.01 153 0
291819 아아 여기는 서울 [3] Adelposs갤로그로 이동합니다. 11.12.01 68 0
291817 result = num > 0 ? num : num*(-1); [9] 듣보잡뉴비(59.24) 11.12.01 77 0
291816 ★html에서 버튼을 만들었는데 이상해 [2] 옷가게사장님갤로그로 이동합니다. 11.12.01 72 0
291815 usb에 넣은줄 알고 지웠는데 일광면(119.198) 11.12.01 48 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2