안녕하세요 "투명 나비" 입니다.
저번 시간에서는 데이터 타입에 따라 정보를 저장하는 것을 배웠습니다.
만약 우리가 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# 기초 03.2 - 스택(Stack)과 힙(Heap) (0) | 2020.01.01 |
---|---|
C# 기초 03.1 - 박싱(Boxing)과 언박싱(UnBoxing) (0) | 2019.12.17 |
C# 기초 04 - 일반화 컬렉션(Generalization Collection) (0) | 2019.12.07 |
C# 기초 03 - 컬렉션(Collection) (0) | 2019.11.30 |
C# 기초 01 - 자료형(Data Type) (0) | 2019.11.22 |