본문 바로가기

공부 하기

C#프로그래밍 강좌 따라가기 | C# 배열 (1)


지금까지 데이터형, 변환, 예외처리 등을 공부 했다. 하루에 공부하는 양이 많지 않은데다가 C#강좌이긴 하지만 C나 C++을 어느정도 알고 있다는 가정하에 강의를 진행하기 때문에 난해한 부분이 있다. 그렇지만 아직 배워야 할 부분이 많이 있으니 차근차근 익혀나가다 보면 대략적인 지식은 쌓일 것이라고 본다.

오늘은 배열에 대한 공부를 하게 될듯한데 3개의 강의로 나눠져 있는걸보니 시간이 꽤 걸릴듯 하다.

목차
  1. 일차원 배열
  2. 이차원 및 다차원 배열
  3. 가변 배열
  4. 배열을 인수로 전달
  5. 배열을 리턴하는 메서드
  6. 배열의 메서드


일차원 배열

#  기본 개념
    같은 데이터형 + 변수명 + 순차적인 메모리 나열
    같은 메모리 크기를 가지는 변수들을 순차적으로 늘여쓴것

# 참조형
    new를 통해 생성함으로서 메모리를 확보하고 객체로서의 역할을 하게 해줌 (배열을 선언해서 사용)

# Array(객체, 클레스)로부터 파생된 참조형(배열명)

# foreach 사용 가능
    foreach 를 통해서 읽는것은 읽기 전용이기 때문에 수정 불가
    화면에 뿌리거나 데이터베이스로 보내거나 할 때 사용

# 기본 형식
    데이터형[] 배열명;
    int[] array_name; //개수를 명시하지 않고 추후 new를 통해서 생성

# 생성과 초기화
   
int[] array; // 선언 > 초기화
      array = new int[] {1,2,3}; // 값(인자)의 개수에 따라 배열 수 결정, 
                                    //실수를 줄이기 위해서 개수를 지정하지 않는 경우가 많음
       array = new int[3]; // 배열안에는 3개의 0이 들어감
      array = new int[3] {1,2,3}; // 선언과 동시에 초기화
   
    선언과 동시에 초기화
       int[] array = new int[3] {1,2,3};
       int[] array = new int[] {1,2,3}; // 이게 가장 많이 쓰는 형태 일 수 있음

    좀더 간결하게 쓸 수 있는 형태
       int[] array = {1,2,3};

# Array.Length 속성(속성은 변수나 마찬가지)
    Array 클레스를 상속 받음

# foreach

          int[] nArray = { 1, 2, 3, 4 }; // new int[] 가 생략된 문법
           for (int i = 0; i < 4; i++)
               Console.Write("{0}", nArray[i]);
           Console.Write('\n');
           for(int i = 0; i < nArray.Length; i++) //Length 는 배열의 크기 즉, 개수
               Console.Write("{0}", nArray[i]);
           Console.Write('\n');
           foreach (int m in nArray)   // 위 3가지 코드는 모두 1,2,3,4 를 출력하는 코드
               Console.Write("{0}",m);
           Console.Write('\n');
           string[] Days = {"Sun","Mon", "Tue", "Wed", "Thu", "Fri" ,"Sat"};
           foreach (string str in Days)
               Console.Write(str + " ");



이차원 배열

#  기본 개념
    - 2차원 배열은 '행과 열' 이라는 개념으로 구분되는 1차원 배열이나 마찬가지
    - 행과 열, 면은 콤마(,)로 구분
    - 2차원 배열에서는 행이 먼저 생성, 행을 통해서 열을 나눔, 행을 세부적으로 나눈것이 열
    (행의 요소)
    - 다차원 배열(3차원 이상)에서 행과 열을 그룹으로 묶은것이 '면'
    - 면 > 행 > 열의 순서

# 선언 형식
    데이터형[행,열] 배열명; // 참조형을 선언 후 new로 생성
    데이터형[,,] 배열명;

# 형식
    int[,] array1 = new int [2,2]; // 2행 2열 생성 // 명시를 안하면
    int[,,] array2 = new int [2,3,2]; //2면 2행 2열
    // new로 생성을 하기 때문에 array1,2에 대한 메모리는 0으로 셋업(몬말인지 모르겠다)

    (1)
    int [,] array1 = new int[,]{{1,2}, {3,4}};   
    // new에서[,]를 명시 안하기 때문에 뒤에 나오는 갯수에 따라 생성
    int [,,] array2 = new int [,,] { {{1,2}, {3,4}}, {{5,6},{7,8}} };
   
   (2)
    int [,] array1 = new int[2,2]{{1,2}, {3,4}}; 
    // 명시를 하지 않는 것이 유동적이고 실수를 줄이기 좋다.
    int [,,] array2 = new int [2,3,2] { { {1,2}, {3,4}, {5,6} }, { {7,8},{9,10}, {11,12} } };    

    (3)
    int [,] array2 = { {1,2}, {3,4}, 5,6} };
    int [,,] array3 = { { {1,2}, {3,4}, {5,6} }, { {7,8}, {9,10}, {11,12} } };


#이차원과 다차원 배열 사용예

    int 형 이차원 배열, 다차원 문자열 배열
   
       static void Main (string[] args)
       {
           int[,] nArray1 = new int[2, 2];
           nArray1[0, 0] = 1;
           nArray1[0, 1] = 2;
           nArray1[1, 0] = 3;
           nArray1[1, 1] = 4;
           for (int i = 0; i < 2; i++)
               for (int j = 0; j < 2; j++)
                   Console.WriteLine(nArray1[i, j] + " ");
           Console.Write('\n');
           // 2차원 배열
           int[,] nArray2 = { { 1, 2 }, { 3, 4 } };
           for (int i = 0; i < 2; i++)
               for (int j = 0; j < 2; j++)
                   Console.WriteLine(nArray1[i, j] + " ");
           Console.Write('\n');
           // 2차원 배열
           string[,,] strArray = { { { "ab", "cd" }, { "ef ", "gh" } }, { { "ij", "kl" }, { "mn", "op" } } };
           for (int i = 0; i < 2; i++)
               for (int j = 0; j < 2; j++)
                   for (int k =0; k<2; k++)
                   Console.WriteLine(strArray [i,j,k] + " ");
           Console.Write('\n');
           // 3차원 배열
       }