Language/C# [C#] 배열(Array)
  • 728x90
    반응형

     

     

     

    배열(Array)


     

     

     

    목차

       

       

      배열(Array)

      배열이란, 동일한 타입의 변수를 모아놓은 데이터 집합이라고 할 수 있다.

      아래는 배열의 선언 방법이다.

       

      자료형[] 배열명 = new 자료형[크기]

       

      크기 6을 가진 int 형식의 배열 student를 선언하려면 아래와 같이 선언하면 된다.

       

      int[] stucdent = new int[6];
      
      student[0] = 4;
      student[1] = 9;
      student[2] = 1;
      ...

       

      위와 같이 선언하면 아래와 같이 6개의 공간을 가진 int형 배열 구조를 형성한다.

       

       

      🔔 예제)

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace ConsoleApp
      {
          class Program
          {
              static void Main(string[] args)
              {
                  int[] reading = new int[6] { 4, 9, 1, 0, 21, 12 };
      
                  for (int i = 0; i < reading.Length; i++)
                      Console.WriteLine("reading[" + i + "] = {0}", reading[i]);
              }
          }
      }

       

      결과)

      reading[0] = 4
      reading[1] = 9
      reading[2] = 1
      reading[3] = 0
      reading[4] = 21
      reading[5] = 12
      계속하려면 아무 키나 누르십시오 . . .

       

      reading 이라는 int형 배열이 선언되었고 6개의 공간을 차지한다. 그리고 그 공간마다 각각 4, 9, 1, 0, 21, 12란 값으로 초기화되었다. for 문으로 reading의 길이, 즉 크기만큼 반복하여 코드를 실행한다.

       

      배열의 선언과 동시에 초기화를 하고 있는데 이방법 말고도, 배열을 선언하는 방법은 여러가지가 있다. 배열을 선언하고 그와 동시에 초기화를 한다면 아래와 같은 방법도 가능하다.

       

      int[] reading = {4, 9, 1, 0, 21, 12};

       

      이렇게 코드를 저어도 에러가 나지 않는 이유는, 초기화 시에 배열 요소의 수로 길이가 지정되기 때문이다. 그렇게에 크기를 생략해도 정상적으로 컴파일이 가능하다. 위의 코드는 아래의 코드와 같다.

       

      int[] reading = new int[]{4, 9, 1, 0, 21, 12};

       

       

       

      System.Array

      Array 클래스는 배열에 대한 다양한 기능을 제공한다. 더 자세한 기능은 MSDN을 방문하여 참고.

       

      Array Class (System)

      배열을 만들고, 조작하고, 검색 및 정렬하여 공용 언어 런타임에서 모든 배열의 기본 클래스 역할을 수행하도록 하는 메서드를 제공합니다.Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the base class for all arrays in the common language runtime.

      docs.microsoft.com

       

      분류 이름 기능
      속성 Rank 배열의 차원 수를 가져온다.
      Length 배열의 길이를 가져온다.
      메소드 Clear 배열 형식에 따라 정수 형식일 경우 0, 논리 형식일 경우 false, 참조 형식일 경우 null로 초기화 된다.
      Resize 배열의 요소 수를 지정된 새로운 크기로 변경한다.
      indexOf 지정한 개체를 검색하여 1차원 Array 전체에서 처음 검색된 개체의 인덱스를 반환한다.

       

      위의 표는 주로 사용되는 속성과 메소드를 정리한 것이다.

      아래 예제는 Rank, Length, Clear, ForEach, Resize, indexOf가 사용된 예제이다.

       

      🔔 예제)

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace ConsoleApp
      {
          class Program
          {
              static void Main(string[] args)
              {
                  int[] reading = new int[] { 4, 9, 1, 0, 21, 12 };
                  
                  Console.WriteLine("속성: Rank={0}, Length={1}", reading.Rank, reading.Length);
                  // reading의 차원 수와 길이를 반환함
      
                  Console.Write("Clear 메소드: ");
                  Array.Clear(reading, 0, 5); // 배열 요소를 0부터 시작하여 5개의 요소를 초기화 시킴
                                              // Array.Clear(요소를 지울 배열, 시작 인덱스, 지울 요소수);
                  Array.ForEach<int>(reading, new Action<int>(ShowValue));
                  // 해당 배열의 각 요소를 가지고 동작(ShowValue)를 수행함
                  // Array.ForEach<데이터타입>(동작을 수행할 배열, new Action<데이터타입>(액션));
                  Console.WriteLine();
      
                  Console.Write("Resize 메소드: ");
                  Array.Resize(ref reading, reading.Length + 3);
                  // reading 배열의 길이를 3만큼 늘림, Array.Resize(배열의 주소값, 새 배열의 크기)
                  Array.ForEach<int>(reading, new Action<int>(ShowValue));
                  Console.WriteLine();
      
                  Console.WriteLine("indexOf 메소드: {0}", Array.IndexOf(reading, 12));
                  // 배열에서 12란 값을 가지고 있는 요소의 인덱스를 반환함
                  // Array.IndexOf(배열, 찾고자 하는 값);
              }
      
              static void ShowValue(int value)
              {
                  Console.Write("{0} ", value);
              }
          }
      }

       

      결과)

      속성: Rank=1, Length=6
      Clear 메소드: 0 0 0 0 0 12
      Resize 메소드: 0 0 0 0 0 12 0 0 0
      indexOf 메소드: 5
      계속하려면 아무 키나 누르십시오 . . .

       

       

      다차원 배열(Multidmensional Array)

      📌 여러개의 차원을 다루는 배열이다. 위에서 설명한 배열은 1차원 배열이였다. 2차원 배열은 1차원 배열과는 달리 가로와 세로를 가지는 평면 구조의 사각형으로 이루어져 있다.

       

      만약에 student란 2차원 배열이 있고 열이 6, 행이 3인 배열이 있다고 가정하면 위와 같은 구조를 형성한다. 1차원 배열의 요소에 접근하는 방법과 2차원 배열의 요소에 접근하는 방법은 비슷하다. 3열 2행에 있는 값을 가져오고 싶다면, student[2][1]라고 하면된다. 아래는 2차원 배열을 선언하는 형식이다.

       

      자료형[,] 배열명 = new 자료형[행, 열];

       

      🔔 예제)

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace ConsoleApp
      {
          class Program
          {
              static void Main(string[] args)
              {
                  int[,] reading = new int[3, 6] { { 4, 9, 1, 0, 21, 12 }, { 1, 4, 6, 0, 9, 5 }, { 4, 4, 2, 4, 0, 0 } };
      
                  for(int i = 0; i < reading.GetLength(0); i++)            
                      for (int j = 0; j < reading.GetLength(1); j++)
                          Console.WriteLine("reading[" + i + ", " + j + "] = {0}", reading[i, j]);            
              }
          }
      }

       

      결과)

      reading[0, 0] = 4
      reading[0, 1] = 9
      reading[0, 2] = 1
      ...
      reading[2, 4] = 0
      reading[2, 5] = 0
      계속하려면 아무 키나 누르십시오 . . .

       

      코드를 보면 2차원 배열이 선언과 동시에 초기화를 하고 있고, for문의 조건식에 쓰인 GetLength 라는 메소드는 각 차원의 요소 수를 반환하는 메소드이다. 즉 GetLength(0)은 3이 되고, GetLength(1)은 6이 된다. 0부터 차원이 시작되고 0은 1차원 1은 2차원을 의미한다.

       

      2차원 배열 이외에 3차원, 4차원, 5차원 배열이 있으나 많이 사용되지는 않는다. 만약 3차원 배열을 선언하고 싶다면 아래와 같은 방법으로 선언한다.

       

      자료형[,,] 배열명 = new 자료형[높이, 세로, 가로]

       

       

       

       

      728x90
      반응형
    상단으로