위 그림에서는 카드배경Sprite1개와 10 글자(Letter)2개 그리고 12개의 Spade문장(pip+decorator)의 배치가 XML파일에서 정의되어 있다.
XML파일의 정보를 불러오기 위해서 처음에 C#파일 3개를 만듭니다.
Card, Deck, Prospector를 만드는데 각각의 역할을 살펴보자면
Card : 덱에 있는 각각의 카드 정보를 담고 있습니다 CardDefinition(Sprite의 위치와 무슨종류의 카드인지) 클래스를 포함하며 Decorator (각각의 모양, 문자의 위치정보)클래스 포함
Deck : DeckXML의 정보를 불러옵니다 그리고 그안에 있는 카드의 정보를 불러옵니다.
Prospector : 전체적인 게임관리와 메세지 전달을 맡는다
이걸 플레이 해보면
xml[0] decorator[0] type=letter x=-1.05 y=1.42 scale=1.25
콘솔창에 이 문장이 뜨게된다. ReadDeck()의 XML에서 가져온 정보를 보여준다.
여기서 나온 직렬화(Serialize), XML에 관해서 살펴보면
먼저 객체의 직렬화는 객체의 내용을 바이트 단위로 변환하여 파일 또는 네트워크를 통해서 스트림(송수신)이 가능하게 하는것을 의미한다.
객체 전송의 단계
1) 직렬화된 객체를 바이트 단위로 분해한다. (marshalling)
2) 직렬화 되어 분해된 데이터를 순서에 따라 전송한다.
3) 전송 받은 데이터를 원래대로 복구한다. (unmarshalling)
직렬화가 가능한 객체의 조건
1) 기본형 타입(boolean, char, byte, short, int, long, float, double)은 직렬화가 가능
2) Serializable 인터페이스를 구현한 객체여야 한다.
3) 해당 객체의 멤버들 중에 Serializable 인터페이스가 구현되지 않은게 존재하면 안된다.
XML에 대해서 살펴보면
각각의 데이터를 종류별로 태그하고 계층적으로 분류한다 라고 써있는게 제일 쉬운말인거같은데 그냥 다른 여러 언어나 형식으로 이루어진 것들을 하나의 언어로 분류를 해서 서로서로 소통을 도와주는 언어라고 생각하는게 맞는거같다.