블로그는 귀차니즘

First Sensation
  • 공지
  • 지역로그
  • 태그
  • 방명록

C# Generics - Generics 문법의 사용법

Language 2008/03/21 23:29 귀차니스트
  C++을 다루어보았고, 어느정도 고급쪽의 기술을 알게된다면 Template라는 것을 사용해보셨을 겁니다. 개념상 기존의 프로그래밍과 다른 패러다임을 띄고 있고 데이터표현의 완전성을 지니기 때문에 새로운 것이죠. 그럼 Generics 라는 것은 혹시 들어보셨는지 모르겠습니다. Generics는 Java나 .Net 환경에서 지원하는 새로운 문법입니다. Template보다는 제약이 심하고, 컴파일러 측면에서 지원해주는 그런 문법입니다. 역시 말만 해서는 알아듣기 힘들겠죠??

Generics.cs (Language : csharp)
  1. public class Xml<T>
  2. {
  3. }

  다음과 같이 사용한다면 해당 Xml클래스 내부에서는 T 형을 데이터 타입으로 취하는 개체를 생성하여 사용할 수 있습니다. 바로 Template와 동일하죠. 대신 많은 부분에서 C++ Template와 동일한 기능들을 제공하지는 않습니다. 그리고 template< typename T >와 같은 키워드를 사용하지 않고도 <T>만 붙여줘도 Generics기능이 작동하게 됩니다. 그런데 한 가지 추가적인 기능이 존재하죠. T에 대한 데이터 타입의 제한을 걸어버릴 수 있죠.

Where.cs (Language : csharp)
  1. public class A
  2. {
  3. }
  4.  
  5. public class B
  6. {
  7. }
  8.  
  9. public class Xml<T> : XmlLayer where T : A
  10. {
  11. }

  위와 같은 where T : A 라는 조건을 달아줄 경우 T의 데이터 타입은 A 혹은 A에서 파생된 개체로 제한이 걸리게 됩니다. 만약 다른 타입을 넣으려고 한다면 컴파일러 자체에서 지정할 수 없는 형태라고 에러가 발생하죠. 이 방법을 사용하면 데이터 타입을 제한하고자 할 때는 원하는 목적만큼 코딩을 수행할 수 있게 됩니다. 특히 라이브러리를 개발하는 쪽에서는 그 라이브러리를 사용하는 쪽이 한 가지의 방법 외 다른 방향으로 빠지지 않도록 도와주어야 하는데, 이러한 부분에서 도움을 주게 되는 것이죠. 약간은 부족할 지도, 편리할지도 모르는 문법이지만 어느 것이나 그렇듯이 잘 사용한다면 아주 강력한 무기가 될 수 있겠죠^^
크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Language" 분류의 다른 글

boost::spirit - Parser 라이브러리 (0)2008/04/23
std::ostreambuf_iterator, std::istreambuf_iterator의 이유 (1)2008/04/16
std::auto_ptr - Smart Pointer 이지만?? (1)2008/04/13
C# Application - Main 에서 Try-Catch 오작동 해결하는 방법 (4)2008/04/07
Boost 1.35 - 워크샵 뒤의 포스팅 (2)2008/04/03
2008/03/21 23:29 2008/03/21 23:29
TAG .Net, C#, Generics
받은 트랙백이 없고, 댓글이 없습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/38

댓글을 달아 주세요

Systeml.Xml in C# - C#에서 Xml 사용하는 방법

Programming 2008/03/18 23:59 귀차니스트

  C++ 에서는 MSXML Parser SDK 를 별도로 깔아 사용하고, GDI Plus 를 깔아 사용했던 것과는 달리 C++.Net 을 비롯한 C#, 즉 .Net 환경에서는 기본적인 네임 스페이스로 위 기능들이 지원됩니다. 어떻게 하냐구요. 물론 시중에 나와있는 책 들도 많습니다. 하지만 최근에 일하는 도중 XML을 이용한 Data Serialization, Deserialization을 구현하다 보니 그냥 자료정리겸 남겨봅니다.
  일단 System.Xml 네임스페이스를 프로젝트에 참조로 추가하고 System.Xml. 네임스페이스를 입력하게 되면 VS.net 의 인텔리 센스가 작동하여 코드가 표시되는데 대부분의 접두어가 Xml 입니다. 종류도 많습니다. XmlNode, XmlElement, XmlText 등 그런데 실제로 해당 객체를 생성하고하면 생성이 되지 않습니다. 그럼 어떻게 생성을 하여야 할까요?

Test.cs (Language : csharp)
  1. private void test()
  2. {
  3.     System.Xml.XmlDocument Doc = new System.Xml.XmlDocument();
  4.     System.Xml.XmlElement Elem = Doc.CreateElement("String");
  5.  
  6.     Doc.AppendChild(Elem);
  7.  
  8.     Doc.Save("a.xml");
  9. }

  위와 같은 코드를 사용하시면 됩니다. Document 에서 멤버 메소드로 CreateElement 를 호출하시면 되죠. 이와 비슷하게 CraeteAttribute 같은 함수를 사용하시면 추가적으로 모든 요소를 생성하실 수 있습니다. 그리고 AppendChild 를 호출하게 되면 자기 자신의 자식으로 속성을 추가하게 되죠. 물론 XmlAttribute 이나 XmlText 이냐에 따라서 Save시의 결과물 값이 달라지게 됩니다. 무작정 자식노드로 추가하지는 않는다는 말이죠.
  그럼 반대로 읽어오는 것은 어떻게 하면 될까요??

Load.cs (Language : csharp)
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3.     System.Xml.XmlDocument Doc = new System.Xml.XmlDocument();
  4.     Doc.Load("a.xml");
  5. }

 아주 간단합니다. Load 라는 메소드를 사용하면 해당 Xml 파일에 대해서 내부적인 파싱을 하여 데이터를 가지고 있게 됩니다. 물론 형태는 XML 형태를 준수하여야 겠죠. 그리고 내부 사용은 Doc.ChildNodes 들을 가지고 자식으로 노드를 타고 내려가며 처리를 하면 됩니다.
  한 때 XML이 인기가 많았던 적이 있었는데 지금은 영 말이 아닌것 같습니다. 그래도 꽤 쓸만한 것이다 보니 유용하게 사용할 부분도 많을것 같네요.

크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Programming" 분류의 다른 글

한게임 자동테트리스 Ver 0.6 (22)2008/11/15
한게임 자동테트리스 Ver 0.2 (22)2008/11/03
Read Sector From Floppy (0)2008/07/17
어제 무작정 맹글어봤던 것입니다.. (2)2008/07/16
Com Control에서 Event 제작하기 (0)2008/07/10
2008/03/18 23:59 2008/03/18 23:59
TAG .Net, C#, System.Xml, XML
받은 트랙백이 없고, 댓글이 없습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/36

댓글을 달아 주세요

◀ 이전페이지 1 다음페이지 ▶

블로그 이미지
First Sensation 귀차니스트
rss
  • 관리자
  • 글쓰기

카테고리

  • 전체 (110)
    • Computer (3)
    • Language (14)
    • Reverse Engineering (1)
    • Algorithm (9)
    • TopCoder (3)
    • Library (2)
    • Programming (19)
    • Programming Tip (9)
    • PSP-Programming (10)
    • Program (5)
    • Small Talk (31)
    • Document (4)

최근에 올라온 글

  • Gradient 작성중에 있습.... (3)
  • 게임&인터랙티브 애플리....
  • 한게임 자동테트리스 Ve.... (24)
  • Intel 64 And IA32 Arch.... (2)
  • 한게임 자동테트리스 Ve.... (24)

최근에 달린 댓글

  • 다운어덯게 받아요. difl 2008
  • 멋있네요 ㅎㅎ. 준호씨 2008
  • ^^; 그러셨군요.. 사실 동영.... 귀차니스트 2008
  • ㅋㅋ 속도 튜닝의 무서움 ㅜ.... 귀차니스트 2008
  • 관리자만 볼 수 있는 댓글입.... 비밀방문자 2008

달력

«   2009/01   »
일 월 화 수 목 금 토
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

링크

  • kkamagui 프로그래밍 세상.
  • 류광의 번역 이야기.
  • 서광열의 프로그래밍 언....
  • 준호씨의 블로그.
  • 최익필의 이름없는 블로그.
  • 위키는 귀차니즘.

최근에 받은 트랙백

  • 궁극의 예외처리. 이름없는 블로그 2008
  • Maximum sum. 티스토리 지점 2008

글 보관함

  • 2008/12 (1)
  • 2008/11 (4)
  • 2008/10 (2)
  • 2008/09 (3)
  • 2008/08 (5)

태그목록

  • Builder
  • 참조
  • Textcube
  • Event
  • TTF
  • 파티션
  • ++i
  • 컬러체험단
  • auto_ptr
  • C#
  • 재귀적합성
  • 오보에
  • HTML
  • Iterator
  • 디코딩
  • OpenMP
  • RLE8
  • smart Pointer
  • std::auto_ptr
  • 라이브러리
  • 인코딩
  • Contest
  • i++
  • Xtream Toolkit Pro
  • Timer
  • SSD
  • KDevelop
  • Borland
  • tr1
  • 1.35

지역로그 : 태그 : 방명록 : 관리자 : 글쓰기
귀차니스트’s Blog is powered by Textcube 1.7.5 : Risoluto / Designed by DesignNia.net