본문 바로가기

C# 코딩 기초

C# 기초 02 - 배열(Array)

안녕하세요 "투명 나비" 입니다.

 

저번 시간에서는 데이터 타입에 따라 정보를 저장하는 것을 배웠습니다.

 

만약 우리가 10개의 정보를 저장할려고 하면, 10개의 변수를 만들어야 하고, 또 그것들을 구분할 줄 알아야 합니다.

이런식으로 작업을 하면, 너무 비효율적입니다. 

 

그래서 같은 데이터 타입의 여러개의 정보들을 1개의 변수에 저장하는 방법을 배워보겠습니다.

 

오늘은 C# 기초 : 두번째!! 배열(Array)에 대해서 알아보겠습니다

 


1차원 배열(Array)

배열은 3가지(데이터 타입, 저장위치(index), 값)로 구성되어 있다고 생각하시면 됩니다.

- 데이터 타입 : 정보의 종류

- 저장위치(index) : 값을 가지고 있는 주소

- 값 : 저장된 값

 

다음으로 4가지 방법으로 배열을 만들수 있습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour{

    void Start() {
    
        int[] Array01 = new int[3];
        int[] Array02 = new int[3]{0, 1, 2};
        int[] Array03 = {0, 1, 2};
        int[] Array04 = new int[]{0, 1, 2};
        
    }
    
}

 

위 코드에서는 int 타입의 3가지 정보를 저장하는 배열을 만들었습니다.

 

저장공간을 아래의 그림으로 이해하시면 쉽습니다.

0 1 2

 

 

어떤 방법으로 만들어도 상관이 없습니다. 다만, 차이점은 분명 있습니다

 

차이점

배열 이름 저장공간 설명
Array01 int 3개의 공간을 만듬 값을 넣지 않음
(Default 값인 0이
3개의 공간에 들어감)
사용하고 싶은 값을 나중에 넣어서 사용
Array02 int 3개의 공간을 만듬 값을 넣어줌 공간과 값을 전부 주었기
때문에 바로 사용가능
Array03 배열의 크기를 정하지 않음 값을 넣어줌 컴파일러가 자동으로
값의 수 만큼의 공간을 만듬
Array04 배열의 크기를 정하지 않음 값을 넣어줌

 

접근법

배열을 만들었으니, 이제 배열안에 저장된 정보를 어떻게 하면 접근 할수 있는지 알아보겠습니다.

 

배열은 저장위치( [ ] = index )의 값에 따라, 저장된 값에 접근 할수 있습니다.

저장위치( [ ] = index )의 값은 0에서 부터 시작하고, 배열의 크기 -1 만큼의 값을 가질 수 있습니다. 

예를 들어 Array01의 크기가 3일때 [0], [1], [2] 이렇게만 접근이 가능합니다.

 

Array01[0] = 5;               // Array01의 [0]번 안에 있는 값을 5로 수정한다.

int num = Array01[2];      // num의 값을 Array01의 [2]번 안에 있는 값으로 저장한다.

Array01[3] = 10;             // 배열의 크기가 3이지만,  4번째 저장된 값을 들고오라고 하기 때문에

                                  // "IndexOutOfRangeException 에러"가 나타나고, 접근이 불가능 합니다.

int size = Array01.Length; // 배열의 크기를 size 값으로 저장한다.

 


다차원 배열(Multi-Demenstion Array)

다차원 배열은 배열들의 배열입니다.

(차원분리자인 ", "(콤마)로 차원들을 분리 합니다)

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour{

    void Start() {
    
        int[,] Array01 = new int[,] { 0,1 }, { 2, 3};
        int[,] Array02 = new int[2,3]{ { 0,1 }, { 2, 3}, {4, 5}};
        
    }
    
}

위 코드에서는 int 타입의 총 4개의 정보를 저장하는 2차원 배열을 만들었습니다.

 

저장공간을 아래의 그림으로 이해하시면 쉽습니다.

Array01

0 1
2 3

Array01[0,] 안에 new int[2]{ 0, 1}가 들어있습니다

Array01[1,] 안에 new int[2]{ 2, 3}가 들어있습니다.

 

Array02

0 1
2 3
4 5

Array02[0,] 안에 new int[2]{ 0, 1}가 들어있습니다

Array02[1,] 안에 new int[2]{ 2, 3}가 들어있습니다

Array02[2,] 안에 new int[2]{ 4, 5}가 들어있습니다

 

 

접근법

int n1 = Array01[0,0]  // 값 : 0

int n2 = Array01[0,1]  // 값 : 1

int n3 = Array01[1,0]  // 값 : 2

int n4 = Array01[1,1]  // 값 : 3

 

1차원 배열과 마찬가지로 Length를 쓸수 있지만, 다차원 배열의 총 크기만 알수 있고,

Array01[0,]안에 몇개의 정보가 저장되어 있는지는 알 수 없습니다.

 

 

3차원 배열, 4차원 배열, 5차열 배열 등 만들고 사용할 수있지만, 너무 복잡져서 잘 사용되지 않습니다. 

만약 사용하고 싶다면 " , "를 추가하시면 됩니다.

 

int[ , , ] 3dArray = new int[ , , ];            //3차원 배열

int[ , , , ] 4dArray = new int[ , , , ];         //4차원 배열

int[ , , , , ] 5dArray = new int[ , , , , ];      //5차원 배열

 


가변배열(jaggedArray)

가변배열도 배열들의 배열이지만, 배열들의 크기가 서로 다를 수 있습니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour{

    void Start() {
    
        int[][] Array01 = new int[3][];
        Array01[0] = new int[]{1};
        Array01[1] = new int[]{5, 6};
        Array01[2] = new int[]{10, 11, 12};
        
        int[][] Array02 = new int[][]
        {
            new int[]{1}, 
            new int[]{5, 6}, 
            new int[]{10, 11, 12}
        }
		
        int[][] Array03 = 
        {
            new int[]{1}, 
            new int[]{5, 6}, 
            new int[]{10, 11, 12}
        }
        
        int[][,] Array04 = new int[2][,]
        { 
            new int[,]{ { 1,2 } }, 
            new int[,]{ { 5,6 }, {7,8} }
        }
        
    }
    
}

 

Array01~ Array03은 전부 같은 크기에, 같은 값을 가지고 있습니다.

 

저장공간은 아래의 그림으로 이해하면 쉽습니다.

접근법

int n1 = Array01[0][0]  // 값 : 1

int n2 = Array01[1][0]  // 값 : 5

int n3 = Array01[1][1]  // 값 : 6

int n4 = Array01[2][0]  // 값 : 10

int n5 = Array01[2][1]  // 값 : 11

int n6 = Array01[2][2]  // 값 : 12

 

 

Array04다차원배열과 가변배열을 함께 사용하였습니다.

 

저장공간은 아래의 그림으로 이해하면 쉽습니다.

접근법

int n1 = Array04[0][0,0]  // 값 : 1

int n2 = Array04[0][0,1]  // 값 : 2

int n3 = Array04[1][0,0]  // 값 : 5

int n4 = Array04[1][0,1]  // 값 : 6

int n5 = Array04[1][1,0]  // 값 : 7

int n6 = Array01[1][1,1]  // 값 : 8

 


투명나비의 후기

 

4시간 작업한 걸 날리고, 다시 처음부터 작업했습니다.

 

대학생때 팀프로젝트를 날려버려 이틀을 고생한 것에 비하면 별거 아니었습니다....

(그래도 정신붕괴는 오더군요ㅠㅠ)

 

두번째 작업을 하니 디테일 적인 부분에서 조금 미흡하지만 추가로 업데이트 하겠습니다.

 

인터넷에서 여러 자료를 참고해서 제 입맛 데로 만들었기 때문에, 누락된 부분이나, 간략하게 설명한 부분도 있습니다.

 

만약 틀린 부분이나 추가해야 하는 부분이 있으면 알려주시면

 

 


 

참고 : https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/arrays/

 

 

배열 - C# 프로그래밍 가이드

배열(C# 프로그래밍 가이드)Arrays (C# Programming Guide) 이 문서의 내용 --> 배열 데이터 구조에 형식이 동일한 변수를 여러 개 저장할 수 있습니다.You can store multiple variables of the same type in an array data structure. 요소의 형식을 지정하여 배열을 선언합니다.You declare an array by specifying the type of its elemen

docs.microsoft.com