1. 배열 |
Array 라고 불리는 이 배열의 개념은 동일한 자료형의 집합체로 같은 타입의 자료를 연속된 공간에 나열하고 각 자료에 index를 부여한 것이기 때문입니다.
1-2. 배열의 선언 |
이전에 반복문을 할 때 잠시 배열을 언급하며 넘어갔었는데요.(반복문 게시물 2)
이 때 언급한 것이 배열의 형태 였습니다.
타입[] 배열이름 = new 자료형[배열의 길이]
이는 배열의 가장 기본이 되는 형태인데요, 이해를 돕기위해 예제를 사용해보겠습니다.
int[] intArray = new int[5];
이렇게 'int형태의 배열이며 길이가 5인 배열을 선언하겠다' 라는 것을 코드로 적어둔 것 입니다.
사실 배열을 선언하는 방법은 두 가지가 있는데요.
- 첫 번째 : 배열의 길이를 먼저 선언하고 나중에 배열의 인자를 넣어주는 방법
- 두 번째 : 배열의 선언과 동시에 인자를 넣어주는 방법
- 세 번째 : index를 이용하여 인자를 넣어주는 방법 (이는 index 설명과 함께 설명하겠습니다.)
위에 사용한 예시가 바로 첫번째 방법입니다.
내부에 배열의 인자를 작성하려면 아래와 같은 방법으로 하시면 됩니다.
int[] intArray = new int[5];
intArray = new int[] { 1, 2, 3, 4, 5 };
두 번째 방법을 예시로 들자면 위 첫번째 방법을 한번으로 하는
int[] intArray = new int[] { 1, 2, 3, 4, 5 };
과 같은 방법과 조금 약식처럼 쓰는 아래와 같은 방법이 있습니다.
int[] intArray = { 1, 2, 3, 4, 5 };
두 번째 방법들은 배열의 인자들을 넣어주면서 길이를 자동으로 지정해주기 때문에
따로 길이를 설정해줄 필요는 없습니다.
2. index |
배열을 선언하면서 내부에 인자들을 넣었으나 우리는 이 인자에 대한 접근을 몰라 출력을 해줄수가 없습니다.
일반적인 방법으로 출력한다면 결과가 이상하기 때문인데요.
static void Main(string[] args)
{
int[] intArray = new int[5];
intArray = new int[] { 1, 2, 3, 4, 5 };
Console.WriteLine(intArray);
}
이대로 출력하게 된다면
이렇게 이상한 값이 나오게 됩니다.(게시글 마지막 부분 추가설명)
이 때 우리가 필요해진 것이 인덱스(index) 인데요.
위에서 설명했듯이 각 인자들에 index 가 부여되어있기 때문에 접근 할 수 있게 된 것입니다.
- 부여된 인덱스는 0부터 시작합니다.
위처럼 길이가 10인 배열을 선언하면 0~9까지의 인덱스가 부여되어 있는 것을 확인할 수 있습니다.
인덱스를 이용한 인자를 넣는 방법도 있으니
2-1. index를 이용한 배열의 출력 |
우리는 이러한 index를 통해 배열을 출력해볼 것 입니다.
예를 들어보겠습니다.
static void Main(string[] args)
{
String[] subject = new string[5];
subject[0] = "kor";
subject[1] = "eng";
subject[2] = "math";
subject[3] = "social";
subject[4] = "science";
}
subject라는 String 타입의 배열을 선언해준 뒤 길이를 5로 설정해주었습니다.
이후 각 index를 이용하여 내부에 인자를 넣어주었습니다.
이렇게 각 index로 인자에 접근할 수 있는 것을 보니 index를 사용한다면 우리가 출력까지도 해줄 수 있을 것 같으니
시도해보겠습니다.
static void Main(string[] args)
{
String[] subject = new string[5];
subject[0] = "kor";
subject[1] = "eng";
subject[2] = "math";
subject[3] = "social";
subject[4] = "science";
Console.WriteLine(subject[0]);
Console.WriteLine(subject[1]);
Console.WriteLine(subject[2]);
Console.WriteLine(subject[3]);
Console.WriteLine(subject[4]);
}
이렇게 잘 출력되는 것을 볼 수 있는데요.
잘 보니까 이전에 배웠던 것을 활용하여 출력할 수 있을 것 같은데요.
바로 반복문입니다.
2-2. 반복문을 이용한 배열 출력 |
static void Main(string[] args)
{
String[] subject = new string[5];
subject[0] = "kor";
subject[1] = "eng";
subject[2] = "math";
subject[3] = "social";
subject[4] = "science";
for(int i=0; i<subject.Length; i++)
{
Console.WriteLine(subject[i]);
}
}
위와같이 반복문으로 출력했을 때도
같은 결과가 나온 것을 볼 수 있습니다.
그런데 코드를 보니 조금 특이한 부분이 있죠?
바로 for문의 조건문 부분입니다.
subject 배열의 Length(길이) 만큼의 값을 준다는 것 입니다.
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
String[] subject = new string[5];
Console.WriteLine(subject.Length);
}
}
}
이를 출력해보면
이렇게 5라는 값이 나온 것을 볼 수 있습니다.
이러한 length를 통해서 배열의 길이를 확인하거나
따로 배열의 길이를 책정할 필요없이 유동적 사용이 가능한 속성입니다.
유용하니 꼭 알아두시길 바랍니다.
3. 다차원 배열 |
다차원 배열이란 말 그대로 여러가지 차원을 가진 배열입니다.
우리가 지금까지 하나의 선과 같은 1차원 배열을 사용했다면
다차원 배열은 면 또는 상자 처럼 여러가지 차원을 가지고 있다는 이야기 입니다.
먼저 2차원 배열부터 알아보겠습니다.
2차원 배열은
가로, 세로의 평면 구조를 가지고 있습니다.
따라서 이를 코드로 보면
자료형[,] 배열명 = new 자료형[행 수, 열 수];
의 기본형태를 가지고있습니다.
※자료형 뒤에 배열임을 선언할 때 ' , ' 가 있는 것을 볼 수 있는데 이는 본래 자료형의 크기를 넣을 때 행과 열로 나눌 필요가 없었기 때문입니다.
다차원 배열의 경우는 이를 따로 선언해 줄 필요가 있기 때문에 ' , '가 들어간 것 입니다.
그렇다면 이러한 2차원 배열을 예시로 들어보겠습니다.
int[,] multiArr = new int[2, 4] { { 0, 1, 2, 3 }, { 4, 5, 6, 7 } };
이러한 2차원 배열을 도형으로 표시하면
와 같습니다. 이를 출력해보면
static void Main(string[] args)
{
int[,] multiArr = new int[2,4]{ { 0, 1, 2, 3}, { 4, 5, 6, 7} };
Console.WriteLine(multiArr[1,2]); // 6
Console.WriteLine(multiArr[0,3]); // 3
Console.WriteLine(multiArr[1,1]); // 5
}
위치 값에 따라 결과가0 나오는 것을 볼 수 있습니다.
이러한 2차원 배열 말고 3차원 4차원 배열도 있습니다만 코드가 너무 복잡해져 일반적으로는 잘 사용하지 않습니다.
자료형[,,] 배열명 = new 자료형[높이, 세로, 가로];
3차원 배열의 기본형식은 이렇습니다.
이 3차원 배열은 2차원 배열을 인자로 가지고 있는 형식입니다.
조금 복잡하니 이해를 돕기위해 예를 들면
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int[,,] multiArr = new int[3, 2, 3]
{
{{1,1,1}, {1,1,2}},
{{2,1,1}, {2,1,2}},
{{3,1,1}, {3,1,2}}
};
}
}
}
이를 도형으로 만든다면 아래와 같은 모형이 됩니다.
※ 추가설명
사실 배열을 선언할 때 배열의 이름을 설정하면 설정한 이름에 공간이 만들어져 배열의 인자가 설정된 공간으로 들어가는 형식이 아닙니다. (일반적인 변수)
배열의 이름을 설정하면 사실 배열의 실제 공간은 따로 있고 배열의 이름은 이를 직접적으로 참조하여 값을 공간으로 보내는 역할을 하는 '주소값'의 역할을 하고있는 것 입니다.
여기까지 배열이었습니다. 고생하셨습니다.
'C#' 카테고리의 다른 글
[C#_10_(2)] 접근제한자, this (0) | 2021.10.18 |
---|---|
[C#_10_(1)] Class (0) | 2021.10.08 |
[C#_8] 메서드 method (0) | 2021.10.02 |
[C#_7] 반복문 제어 (Break, Continue, goto) (0) | 2021.09.29 |
[C#_6] 반복문(for,foreach,while,do while) (0) | 2021.09.24 |