티스토리 뷰

반응형

프로그래밍을 하다보면

데이터를 특정 변수에 담아 사용할 일들이 자주 생기는데

변수를 여러개 생성해서 관리할 수도 있지만

"배열"을 생성해서 좀 더 효율적으로 관리하는 방법도 있다.

오늘은 배열이 무엇인지 아주 간단하게 이해할 수 있게

그리고 C#에서 어떻게 코드로 구현할 수 있는지에 대해서 간단히 포스팅해 보고자 한다.

----------

1. 배열의 뜻

배열을 말로 설명하는 방법은 여러가지가 있지만

나는 주로 엑셀을 가지고 설명을 하곤한다.

◎ 1차원 배열

아주 간단하다.

위와같은 형태가 1차원 배열이다.

1행 5열의 형태를 가지고 있다.


◎ 2차원 배열

2차원 배열 역시 아주 간단하다.

2행 5열의 형태의 2차원 배열이다.

3차원 이상의 배열은 그림으로 설명하긴 좀 그렇고... 이론상으로 설명할 수 있으나

실제로는 그렇게 많이 사용되지 않으니 3차원 이상의 다차원 배열에 대해서는 패스하도록 하겠다.


2. C#에서 배열

일단 배열도 마찬가지로

데이터형[] 배열변수명;

과 같이 일반적인 형태로 선언이 가능하다.

하지만 알아둬야 할 점이 있는데

C#에서 배열은 참조형이라는 것이다.

변수는 값형태와 참조형으로 나뉠 수 있는데

값형태는 실제 메모리에 데이터가 저장되는 것이고(Stack 메모리)

참조형은 데이터가 저장되어 있는 공간의 주소를 가지고 있는 형태(Heap 메모리)이다.

이게 무슨말이냐 하면 간단히 말해서 new키워드를 사용해서 선언하고 초기화 해야 한다는 것이다.

그러나 배열변수 선언과 동시에 값을 초기화 한다면 new키워드를 사용하지 않아도 된다.

대괄호([]) 안에 배열의 크기를 지정해 줄 수도 있지만

생략한다면 초기화 할때의 값의 갯수로 배열의 크기가 정해지며

배열의 index는 0부터 시작하게된다.

이것을 참고로 1차원 배열을 코드로 나타내 본다면 다음과 같다.

1차원 배열을 만들기 위해서 아래의 코드중 어느것을 사용해도 결과는 같다.

// 배열변수를 선언하고 나중에 값을 초기화 할 경우에는 반드시 new키워드를 사용해야 한다.
int[] arr;
arr = new int[] {1, 2, 3, 4, 5};

int[] arr_1;
arr_1 = new int[5] { 1, 2, 3, 4, 5 };

int[] arr_2 = new int[] {1, 2, 3, 4, 5};

int[] arr_3 = new int[5] { 1, 2, 3, 4, 5 };

// 예외적으로 변수선언과 초기화를 같이할 경우에는 new키워드를 사용하지 않아도 된다.
int[] arr_4 = {1, 2, 3, 4, 5};

// string형태의 배열도 가능하다.
string[] strArr;
strArr = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

그리고 배열의 값을 출력하기 위해서는 일반적으로 반복문을 사용하는데(값이 하나 이상이기 때문에)

for문 또는 foreach문을 사용해서 출력하는데

이 둘의 차이점이 뭐냐하면

for문은 배열의 개발자가 인자값등을 사용해서 배열의 부분값을 가져올수도 있지만

foreach문은 무조건 처음부터 끝까지 배열의 값을 전부 가져오도록 되어 있다는 점이다.

구현하는 코드는 foreach가 더 간단하지만

배열의 크기가 크다면 효율이 떨어질 수도 있으니 잘 판단해서 써먹으면 될 것이다.

코드는 다음과 같다.

// 배열의 값을 출력하기 위해서는 반복문을 사용한다.
for(int i=0; i < arr_1.Length; i++)
{
    Console.WriteLine("배열 arr_1의 {0}번째 값 [{1}]", i, arr_1[i]);
}
    Console.WriteLine();

foreach (string strVal in strArr)
{
    Console.Write(strVal + " ");
}
    Console.WriteLine();

------------------------------------------------------------
결과

배열 arr_1의 0번째 값 [1]
배열 arr_1의 1번째 값 [2]
배열 arr_1의 2번째 값 [3]
배열 arr_1의 3번째 값 [4]
배열 arr_1의 4번째 값 [5]

Sun Mon Tue Wed Thu Fri Sat
계속하려면 아무 키나 누르십시오 . . .


2차원 및 다차원 배열의 경우는 기본적으로 다음과 같은 형태로 선언이 가능하다.

데이터형[ , ] 배열변수명; // 2차원 배열

데이터형[ , , ] 배열변수명; // 3차원 배열

콤마로 구분하여 콤마의 갯수에 따라 차원이 늘어나게 되는데

행, 열, 면의 순서를 가지게 되며

초기화 할때는 2차원 배열의 경우는 열이 속한 행을 하나의 그룹으로

3차원 배열의 경우는 2차원 배열의 행 그룹을 다시 면으로 그룹을 만든다고 생각하면 된다.

다차원 배열을 선언하고 초기화 하는 방법은 다음과 같다.(이번에는 결과까지 같이...)

// 2차원 배열 선언 및 초기화
int[,] _2array = new int[2,2] { { 1, 2 }, { 3, 4 } }; // 2행 2열의 2차원 배열
int[,] _2array_1 = { {1, 2}, {3, 4} }; // 선언과 초기화를 같이 하면 new키워드를 사용하지 않아도 된다.

for (int j=0; j<_2array.GetLength(0); j++) // 첫 번째 행의 길이만큼 반복
    {
    for (int k = 0; k < _2array.GetLength(1); k++) // 두 번째 행의 길이만큼 반복
        {
        Console.WriteLine("2차원 배열 [{0}, {1}] : {2}", j, k, _2array[j, k]);
        }
    }

------------------------------------------------------------
결과

2차원 배열 [0, 0] : 1
2차원 배열 [0, 1] : 2
2차원 배열 [1, 0] : 3
2차원 배열 [1, 1] : 4
계속하려면 아무 키나 누르십시오 . . .

3차원 배열의 경우는 개념은 설명했으나

앞서 말했던 것처럼 많이 쓰이지 않으니 굳이 코딩까지 할필요는 없을거 같지만

혹시라도 궁금한 사람들은 직접 해보길 바란다.

혹시라도 오해가 있을까봐

3차원 배열만 코딩을 해보라는 말이 아니다.

눈으로만 보면 그 때는 아는거 같지만

돌아서면 까먹는다.

무조건 직접 코딩을 해보는 것을 추천한다.


반응형
댓글
반응형
05-19 00:16
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함