C#문법

[C#문법] Part6 배열

BlackWolfDev 2023. 1. 30. 23:03

[ 개념 ]

지금까지 자료형으로 변수를 선언하는 것을 알아보았다.

이렇게 선언한 변수는 하나의 데이터만을 저장할 수 있다.

그런데 저장하려는 데이터가 많으면 일일히 변수를 선언해야하는 번거로움이 있다.

그렇다면 하나의 변수에 여러 데이터를 저장할 수 있는 방법이 있을까?

바로 배열이 있다.

배열은 여러 데이터를 저장할 수 있는 자료형이다.

 

           자료형[] 변수명 = new 자료형[크기];

 

일반 변수와 같이 선언하는데 자료형 뒤에 []을 붙여줘야한다.

변수명 뒤에 [] 안에는 숫자를 삽입할 수 있는데 이를 인덱스라고한다.

인덱스는 배열의 공간을 의미한다.

 

new는 인스턴스를 생성하는 명령어로써 메모리에 할당하게 된다.

new 명령어는 나중에 설명하도록 하겠다.

그리고 해당 자료형으로 원하는 크기만큼 선언해주면된다.

 

           int[] a=new a[10];

 

위의 코드는 “10크기의 int형 배열을 선언한다라는 의미이다.

 

물론 많은 데이터를 담을 수 있다고해서 무조건 배열로 선언하는건 좋지 않다.

배열은 꽤 많은 메모리를 할당하기 때문에 메모리 공간을 많이 잡아먹을 수 있다.

 

           int[] a=new a[10];

 

위의 코드가 할당하는 메모리의 크기는 4byte(int형의 크기) * 10 = 40byte이다.

그래서 자신이 얼마나 사용할건지 알고 배열을 선언하는 것이 중요하다.


[ 배열의 값 배정 ]

배열에 값을 배정하는 방법에는 여러가지가 있다.

 

1. 원하는 값을 원하는 공간에 저장하는 방법

int[] a=new a[3];

a[0]=1;

a[1]=2;

a[2]=3;

[]안에 넣을 수 있는 숫자인 인덱스로 배열의 공간에 접근할 수 있다.

여기서 배열을 사용할 때 주의할 점은 인덱스는 0부터 시작한다.

a[0]=1;“a라는 배열의 첫번째 공간에 1이라는 숫자를 대입한다를 의미한다.

다음 코드들도 이와같다.

 

2. 일련의 데이터를 한 번에 저장하는 방법

int[] a1=new a1[3] {1,2,3};

string[] a2 = new a2[3] {“hi”, “hello”, “world”};

위의 코드와 같이 변수선언후 중괄호{}안에 입력하고자하는 여러개의 데이터를 넣는 방법이 있다.


[ 배열 값 출력 ]

static void Main(string[] args)
{
    int[] arr1 = new int[2] { 1, 2 };
    double[] arr2 = new double[2] { 1.1, 2.2 };
    string[] str = new string[2] { "hello", "world" };

    Console.WriteLine("arr1[0]: " + arr1[0]);
    Console.WriteLine("arr1[1]: " + arr1[1]);
    Console.WriteLine("arr2[0]: " + arr2[0]);
    Console.WriteLine("arr2[1]: " + arr2[1]);
    Console.WriteLine("str[0]: " + str[0]);
    Console.WriteLine("str[1]: " + str[1]);
}

출력도 값을 배정하는 방식과 동일하게 원하는공간을 출력해주면된다.

나중에 반복문을 배우면 편리하게 출력하는 방법도 소개하겠다.

콘솔결과값


[ 다차원 배열 ]

우리가 지금까지 써온 배열은 1차원 배열로써 한 줄의 순차적인 데이터로 저장해왔다고 생각하면 편할 것이다.

그러나 배열은 2차원, 3차원 등 다차원 배열이 있다.

실질적으로는 한 줄의 데이터지만 사람이 보기 편하게 위의 사진과 같이 표현하였다.


2차원 배열의 경우 아래와 같이 사용하면 된다.

     자료형[ , ] 변수명[세로길이(행), 가로길이(열)]

     ex) int[,] arr = new int[3,4];

2차원 배열 선언과 구조

static void Main(string[] args)
{
    int[,] arr = new int[3, 4] { 
        { 1, 2, 3, 4 }, 
        { 5, 6, 7, 8, }, 
        { 9, 10, 11, 12 } 
    };
}

위와 같이 중괄호{}을 통해 구분하여 선언하면 된다.세로길이(행)이 3이므로 3개의 중괄호가 들어가며,가로길이(열)이 4이므로 하나의 중괄호에 4개의 요소가 들어간다.

int[,] arr1 = new int[,] {
    { 1, 2, 3, 4 },
    { 5, 6, 7, 8, },
    { 9, 10, 11, 12 }
};

배열의 크기를 지정해주지 않아도 요소만 넣어서 배열의 크기를 정해줄 수 있다.


배열의 접근방식은 아래의 사진을 참고하면된다.

2차원 배열 접근

static void Main(string[] args)
{
    int[,] arr = new int[3, 4] { 
        { 1, 2, 3, 4 }, 
        { 5, 6, 7, 8, }, 
        { 9, 10, 11, 12 } 
    };

    Console.WriteLine("arr[0,0]: " + arr[0, 0]); //1행 1열
    Console.WriteLine("arr[1,1]: " + arr[1, 1]); //2행 2열
    Console.WriteLine("arr[2,1]: " + arr[2, 1]); //3행 2열
    Console.WriteLine("arr[2,3]: " + arr[2, 3]); //3행 4열(배열의 마지막)
}

콘솔출력값

(참고로 배열의 시작 인덱스는 0이므로 선언할때의 숫자와 출력할때의 숫자와 헷갈리지 말자!)


3차원 배열부터는 사용을 잘 안하지만 사용법에 대해서만 간단히 설명하겠다.

static void Main(string[] args)
{
    int[,,] arr2 = new int[2, 2, 2] {
        {
            { 1, 2 },
            { 1, 2 }
        },
        {
            { 1, 2 },
            { 1, 2 }
        }
    };
    Console.WriteLine("arr[0,0,0]: " + arr[0, 0 ,0]);
    Console.WriteLine("arr[1,1,1]: " + arr[1, 1 ,1]);
}

초기화와 접근방식은 2차원 배열과 동일하다.


[ 참고 ]

https://hcr3066.tistory.com/151

728x90
반응형