[C#] DataTable 생성

NET의 DataTable은 개발자들에 데이터를 주고 받기 위한 인터페이스로써의 표준으로 생각해도 별 무리가 없을듯 합니다. 아직은 .NET 초년생이라 잘 모르겠습니다만… 어떤 형식을 가지고 있는 데이터를 개발자 사이에서 주고 받을때 데이터 덩어리만 툭… 던져주기 보다는 이 데이터 덩어리를 읽을 수 있는 인인터페이스까지 제공해 주면 더욱 좋을텐데요. 바로 이 인터페이스가 되는 녀석으로 DataTable을 사용하면 참 좋을것 같습니다.

DataTable은 이 클래스의 이름에서도 나와 있듯 데이터베이스에서 테이블에 해당하는 녀석입니다. 테이블은 필드들로 구성되어 있고.. 이 필드들에 대한 레코드들로 구성됩니다. 필드는 컬럼(Column)이라고도 하며 레코드는 로우(Row)라고도 합니다.

데이터에 대해서 개발자 서로간에 인정할 수 있는 방법으로써 DataTable을 사용해야 할 필요가 생겨 DataTable을 생성하는 방법에 대해 정리해 봅니다.

사용자 삽입 이미지
위의 도식도를 보면 DataTable은 DataColumn과 DataRow 클래스에 대한 다수의 인스턴스를 가지고 있다는 것을 알 수 있습니다. DataColumn은 필드의 정의이며 DataRow은 레코드에 대한 정의입니다. .NET을 개발한 MS 개발자들 덕에 참…. 쉽죠잉? -_-;

먼저 DataTable을 생성하는 코드는 아래와 같습니다.

DataTable dt = new DataTable("TableName");

생성자의 인자는 테이블의 이름입니다. 참고로 다수의 DataTable은 DataSet에 포함될 수 있는데 이 DataSet에서의 식별자가 바로 이 테이블의 이름입니다. 식별자이므로 당연히 중복되는 큰~ 일 나는 겁니다.

다음은 이렇게 생성한 테이블에 필드를 정의하는 코드입니다. 식별자로써 ID와 이름으로써 Name, 나이값으로써 Age 필드를 정의하는 코드입니다.

DataColumn col1 = new DataColumn();
col1.DataType = System.Type.GetType("System.Int32");
col1.ColumnName = "ID";
col1.AutoIncrement = true;
dt.Columns.Add(col1);

DataColumn col2 = new DataColumn();
col2.DataType = System.Type.GetType("System.String");
col2.ColumnName = "Name";
col2.DefaultValue = "No Name";
dt.Columns.Add(col2);

DataColumn col3 = new DataColumn();
col3.DataType = System.Type.GetType("System.Int32");
col3.ColumnName = "Age";
col3.DefaultValue = 0;
dt.Columns.Add(col3);

각 필드(컬럼)에 대한 데이터 타입은 .NET의 Type의 그것을 그대로…. 사용할 수 있도록 되어 있습니다. 그리고 아래는 이제 이렇게 정의된 필드에 대해 레코드를 추가하는 코드입니다.

DataRow dr1 = dt.NewRow();
dr1["Name"] = "개똥이";
dr1["Age"] = 10;
dt.Rows.Add(dr1);

DataRow dr2 = dt.NewRow();
dr2["Name"] = "소똥이";
dr2["Age"] = 13;
dt.Rows.Add(dr2);

DataRow dr3 = dt.NewRow();
dr3["Name"] = "말똥이";
dr3["Age"] = 15;
dt.Rows.Add(dr3);

레코드에 해당되는 DataRow는 DataTable의 NewRow 매서드를 통해 생성된다는 점에 주의해야 합니다.

끝으로 테이블을 정의할때 Primary Key 등과 같은 정의를 빼놓을 수 없습니다. 아래는 간단히 앞서 정의한 ID 필드값으로 Primary Key를 정의하는 코드입니다.

DataColumn[] key = new DataColumn[1];
key[0] = col1;
dt.PrimaryKey = key;

이상으로 기본적으로 DataTable을 생성하고 컬럼과 레코드를 추가하는 것에 대해 정리해 보았습니다.

국내 첫 안드로이드폰, “모토로이”

국내에서 처음으로 정식 출시되는 안드로이드폰의 소식이 들어왔습니다. 개인적으로 매우 반갑습니다. 모토롤라에서 제작하고 SK에서 올해 2월초부터 판매한다고 합니다. 전반적인 사양을 정리하면 다음과 같습니다. 비단 SK 뿐만 아니라 애플폰을 판매하고 있는 KT에서도 안드로이드 폰을 판매한다고 합니다. 올해에 약 20가지 종류의 안드로이드 폰이 출시된다고 하니… 사용자 입장에서 무엇을 골라야하나 머리가 좀 아플것같네요..

사용자 삽입 이미지

  • 지상파 DMB 지원
  • 3.7인치 WVGA 480×854
  • 안드로이드 OS 2.0 지원
  • 풀 터치 화면 그리고 UI
  • 800만 화소 카메라
  • 720p HD 캠코더 기능
  • MP3 플레이어
  • 구글맵, G-Mail 등과 같은 구글 서비스와 강력한 연계
  • 외부 메모리로써 8기가 바이트 제공(32GB 까지 확장 가능)
  • HDMI를 지원하는 출력 지원(모니터 또는 빔프로젝터, TV)
  • 멀티 테스킹 지원
  • WiFi를 통한 무선인터넷 그리고 웹브라우징
  • 근접 센서 기능(스크린에 가까이 접근하면 발생하는 이벤트)
  • 마이크로소프트 오피스 및 PDF 뷰어
  • 광학 문자 인식 기능

[C#] 바이너리 파일 쓰기/읽기

C#에서 바이너리 파일을 만드는 코드가 필요해 찾은 코드. 건망증으로 인하여.. 정리 차원에서 올려봅니다. 먼저 쓰는 것에 대한 코드를 정리해 보면…

FileStream fs = 
    new FileStream("D:/data.bin", FileMode.CreateNew, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);

int i = 100;
float f = 123.34f;
double d = 456789.1234;
string str = "cafe.naver.com/gisdev";

bw.Write(i);
bw.Write(f);
bw.Write(d);
bw.Write(str);

bw.Close();
fs.Close();

개인적으로 쓰는 데이터 타입에 대해 단 하나(Write) 매서드로 제공하지 말고.. 타입에 따라 제공해 줬다면 이해하기 쉬운 코드를 작성할 수 있지 않을까 생각됩니다. 예를 들어서 int 데이터 쓰기는 WriteInt, float 데이터 쓰기는 WriteSingle, double 데이터 쓰기는 WriteDouble, 문자열 쓰기는 WriteString로 말입니다.

그리고 아래는 위에서 만든 바이너리 파일에 대한 읽기에 대한 코드입니다.

FileStream fs = new FileStream("D:/data.bin", FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);

int i = br.ReadInt32();
float f = br.ReadSingle();
double d = br.ReadDouble();
string str = br.ReadString();

MessageBox.Show(i + " " + f + " " + d + " " + str);

br.Close();
fs.Close();

읽기에 대해서는 각 타입에 대해 읽기 매서드를 제공하고 있네요. 쓰기에 대한 방식과 읽기에 대한 방식을 이렇게 다르게 만든 이유가 뭘까요? 끝으로 String에 대한 저장은 문자열의 길이값을 저장하고 실제 문자열 데이터를 저장하는 형태입니다. 참고로 문자열의 길이가 256자 이내라면 문자열 길이값을 저장하기 위한 바이트 수는 1바이트만을 사용하고 그렇지 않으면 2바이트 이상(2바이트까지는 확인했고 3바이트 이상을 사용하는지는 확인해 보지 못했습니다)을 사용합니다. 참 똑똑한 놈지 않나…… 싶습니다.

구글의 안드로이드 폰, “넥서스 폰”

애플폰이 나오기 전에.. 애플폰이 출시만 되면 사려고 했지만.. 구글의 안드로이드폰의 국내 출시가 올해 초나 중반기에 나온다는 소식에 애플폰을 지르지 않았습니다. 아직까지는 국내의 출시 소식은 아니지만.. 어제인가.. 오늘 새벽인가.. 해외에서 넥서스 폰이 출시가 되었습니다. 하루 빨리 국내에서도 출시가 될 날만을 기다리는 사람으로써 이 넥서스 폰의 특징 몇가지를 뽑아 봅니다.

사용자 삽입 이미지

  • 최신 안드로이드 2.1 탑재
  • 폰의 가격면에서 매우 저렴(애플폰과 T옴니아에 비교할때)
  • 두께 11.5mm, 무게 130g 매우 가벼움
  • CPU 1GHz
  • AMOLED 3.7 인치, 해상도 480×800
  • 멀티 태스킹 지원(당연한 항목이지만 애플폰의 경우 않된다기에…)
  • 어플리케이션 시장으로 안드로이드 마켓이 존재(애플폰의 경우 애플 앱스토어가 있음)
  • 카메라 기능
  • 음성인식기능
  • GPS 기능
  • 후면의 두개의 마이크를 이용한 외부소음 차단
  • 구글맵과 구글어스 실행
  • 멀티 터치 기능 지원 하지 않음
  • 내장 메모리가 512MB로 애플폰과 T옴니아에 비교해 매우 작음