'객체'에 해당되는 글 1건

  1. 2007/03/21 글뻥 C#의 배열과 구조체에 대해

좀 늦은 감이 없지 않아 많지만 객체를 이야기하기전에 배열과 구조체를 지나침으로써 객체를 정확히 이해하는데 어려움을 주고 말았다.
따라서 뒤늦게나마 배열/구조체를 이야기해보도록 하자.

배열이란 여러개의 변수를 포함하는 데이터 구조이다.

1차원, 다차원, 가변 배열등 3가지의 인간이 생각할 수 있는 배열이 있는데 다시말하자면 아파트라고 생각하면 이해가 좀 쉬울려나?

이런 상상을 좀 해보자. 1층짜리 아파트가 있다고 가정하고 (하긴 누가 이렇게 짖겠냐만은...) 101호~105호까지 5개의 방이 있고 여기에는 각각 "김씨","박씨","이씨","최씨","민씨" 이렇게 5가구가 살고있다고 치자.

이제 "김씨"가 사는집을 어떻게 표현할 수 있을까?
1. 101호
2. 첫번째집
3. 김씨네집

이렇게 표현할 수 있을것이다. 이것을 데이터로 그대로 옮기면 다음과 같은 형태가 된다.

using System;

class Test {   public static void Main() {     string[] a = new string[]{"kim","park","lee","choi","min" };     //다음은 모두 같은 뜻이다.     //string[] a = {"kim","park","lee","choi","min"};     //string[] a; a= new string[]{"kim","park","lee","choi","min"};     //string[] a = new string[5];  a=new string[]{"kim","park","lee","choi","min"};         // 이렇게는 에러난다.     //string[] a = new string[5];  a={"kim","park","lee","choi","min"};     Console.WriteLine (a[0]);   } }


위의 예제를 실행해보면 알겠지만 이런식으로 배열에 넣고 한묶음씩 데이터를 처리할때는 편하게 할 수 있다.
단, 변수를 초기화하고나서 데이터를 나중에 넣을경우는 반드시 "new"를 써주도록 하자.

이제 다차원 배열을 생각해보자. 다차원 배열은 1차원배열이 여러게 있다는 것이다.
다시말해 아파트가 2층, 3층으로 올라 갔다고 생각하자.
1층에는 "김","박","이","최","민"이 살고 2층에는 "류","원","홍","왕","고"씨가 산다고하면 이것을 두개의 변수에 나눠서 하면 당연히 1차원 배열에서와 같이 2번 써주면 되지만 이거 영~ 불편하다. 따라서, 한변수에 때려넣고 1층 1호, 2층 3호와 같은 식으로 "지칭"하면 더 간단하게 코딩할 수 있을것이다.
다음의 예제를 보자
using System;

class Test {   public static void Main() {     string[,] a = {{"kim","park","lee","choi","min" },{"ru","won","hong","wang","ko"}};     Console.WriteLine (a[1,1]);   } }


"won"씨 아저씨가 "네!!"라고 응답하는가? ^^?

이제 가변배열이다. 가변배열은 위와 같이 2층에 5개의 아파트를 만든게 아니라 한층에는 평수를 좀 크게해서 1층에는 5개인데 2층에는 2개와 같이 각층의 아파트 갯수가 다를때 사용하는 방법 되겠다.
왜? 이렇게 사용하나? 그냥 크게 잡아서 2*5로 10개의 방을 만들어 놓으면 알아서 넣고 가져가면 되는데 말이다. 내 생각에는 아마도 "초기 컴퓨터의 용량문제와 깊은 관계가 있지 않을까 생각된다."
아무튼 한번 해보자. 물론 이것도 1차 배열의 응용일 뿐이다.

using System;

class Test {   public static void Main() {     string[][] a = {      new string[]{"kim","park","lee","choi","min" },      new string[]{"ru","won","hong"}     };     Console.WriteLine (a[0][3]);   } }


실행 해본다고 다는 아니고 이게 이해가 안되면 구조체를 이야기 할 수 없으니 이해가 안되면 1차원 배열부터 차근차근 다시 해보면서 오도록 하자.

이제 구조체다. 구조체는 배열보다 상위의 개념이다. 그리고 객체로 가는 중간단계이다. 왜?
배열에서 시작된 데이터의 집합을 좀더 직관적으로 명세화 하면서 만들어졌고 구조체에 "행위"다시말해 기능을 정의해놓은것이 객체이기 때문이다.

* 객체 = 스팩정의서(제원) + 기능정의서
* 구조체 = 스팩정의서(제원)
* 배열 = 데이터 집합

이제 예를 들어보면 다음과 같은 정보가 있다고 치자.

- 위치 : 동경 37.1, 북경 23.1

뭐 이런 데이터시트에 입력하고 빼고하는등의 일을 한다고 하면 어떻게 하겠는가? 배열로해결할 수 도 있겠지만 좀더 효율적인 방법을 사용할 필요가 있다. 그래서 대두된 것이 구조체(Struct)이다.
using System;

class Test {   public struct a{     public int x,y;     public a(int p, int q){       x = p;       y = q;     }   }   public static void Main(){         a A = new a(10,10);     Console.WriteLine ("X:{0},Y:{1}",A.x,A.y);         /*     //이렇게해도 마찬가지 결과     a A;     A.x = 10;     A.y = 20;     Console.WriteLine ("X:{0},Y:{1}",A.x,A.y);     */   } }



여기까지해서 객체의 전단계인 배열, 구조체까지 알아보았다.
여기에 하나더 보너스! 배열에 들어간 데이터를 모두 뽑아야 한다면 얼마나 노가다인가?
이럴때 쓰라고 있는 신의 선물이 있으니 바로 foreach문이다.

using System;

class Test {   public static void Main() {     string[,] a = new string[2,2]{{"kim","park"},{"ru","won",}};     foreach (string i in a){         Console.WriteLine (i);     }   } }


2007/03/21 17:59 2007/03/21 17:59