class Program
{
static void Main()
{
//1차원 배열(Array)
int[] arr = { 1, 2, 3 }; //C#의 배열 문법 구성, C#은 무조건 동적할당을 해야하기 때문에 기본 자료형 [ ]안에 크기 안들어감. ex)[2],[3] 오류
int[] arrAlloc = new int[3]; //이처럼 동적할당을 자료형에서 미리 하면 가능. 3의 크기 //공간만 만들기 버전
arr[0] = 10; //arr의 0번째 요소 10
Console.WriteLine("int Size: " + sizeof(int)+ " byte"); //일반 자료형은 sizeof가 가능
//Console.WriteLine("arr Size: " + sizeof(arr) + " byte"); //프로그래머가 직접 만든 배열, 클래스는 sizeof가 안됨
for (int i = 0; i < arr.Length; ++i)
Console.Write($"[ {arr[i]} ] - "); //[10] - [2] - [3] - 출력
Console.WriteLine($"( {arr.Length} ) ");//(3) 출력
// 범위기반 반복문(Range Based Loop)
foreach (int data in arr) //위의 for문과 같은 기능으로 int data in arr는 arr안에 들어있는 data를 의미함.
{
Console.Write(string.Format("[ {0} ] - ", data)); //[10] - [2] - [3] -
}
Console.WriteLine(string.Format("( {0} )", arr.Length));//(3) 출력
//////////////////////////////////////////////////////////////////////////////////
Console.WriteLine();
//2차원 배열(2linked-Array)
int[,] arr2d =
{
{ 11, 12, 13 },
{ 21, 22, 23 } //C언어는 초기값 안넣으면 0이었지만 C#은 무조건 값을 넣어줘야함. ex) { 21 }, { 21, 22 } 다 오류걸림
}; //똑같이 동적배열이 강제되기 때문에 [ , ]안에 크기값 못 넣음.
int[,] arr2dAlloc = new int[2, 3]; //공간만 우선 만들어주는 버전 x = 2, y = 3 크기, 위와 크기는 같음, 이건 0으로 초기화됨.
Console.WriteLine("arr2d[0][0]: " + arr2d[0, 0]);
Console.WriteLine("arr2dAlloc[0][0]: " + arr2dAlloc[0, 0]);
Console.WriteLine("arr2dAlloc Length: {0}", arr2dAlloc.Length); //6 출력
//////////////////////////////////////////////////////////////////////////////////
Console.WriteLine();
//Jagged Array jagged array는 각 줄마다 x값을 바꿀 수 있음.
int[][] jaggedArr = new int[2][];
int[][] jaggedArrAlloc = new int[2][]
{
new int[3], //[][][]
new int[4] //[][][][] 즉, jaggedArrAlloc은 7의 크기를 가진 배열이 됨.
};
foreach (int[] jarr in jaggedArrAlloc)
foreach (int data in jarr)
Console.Write("[ {0} ] - ", data); //[0] - [0] - [0] - [0] - [0] - [0] - [0] -
Console.WriteLine("( {0} )", jaggedArrAlloc.Length); // (2)
int[,,,,] multi; //다차원배열 옆은 5차원배열
}
}
<배열> (Array)
C언어에서 많이 다뤘던 배열이 C#에서는 어떤 식으로 문법이 바뀌는지 알아보겠습니다. 주석으로 방식 별로 설명했지만, 추가로 적어보겠습니다.
1차원 배열(Array)
int[] arr = { 1, 2, 3 }; //C#의 배열 문법 구성, C#은 무조건 동적할당을 해야하기 때문에
//기본 자료형 [ ]안에 크기 안들어감. ex)[2],[3] 오류
int[] arrAlloc = new int[3]; //이처럼 동적할당을 자료형에서 미리 하면 가능. 3의 크기 //공간만 만들기 버전
arr[0] = 10; //arr의 0번째 요소 10
Console.WriteLine("int Size: " + sizeof(int)+ " byte"); //일반 자료형은 sizeof가 가능
//Console.WriteLine("arr Size: " + sizeof(arr) + " byte"); //프로그래머가 직접 만든 배열, 클래스는 sizeof가 안됨
for (int i = 0; i < arr.Length; ++i)
Console.Write($"[ {arr[i]} ] - "); //[10] - [2] - [3] - 출력
Console.WriteLine($"( {arr.Length} ) ");//(3) 출력
범위기반 반복문(Range Based Loop)
foreach (int data in arr) //위의 for문과 같은 기능으로 int data in arr는 arr안에 들어있는 data를 의미함.
{
Console.Write(string.Format("[ {0} ] - ", data)); //[10] - [2] - [3] -
}
Console.WriteLine(string.Format("( {0} )", arr.Length));//(3) 출력
<1차원 배열>
- C#에서 배열은 동적할당이 패시브로 들어갑니다. 그래서 배열 선언 때 [ ] 안에 크기를 지정할 수 없습니다.
- int[ ] arr = { 1, 2, 3 }; : 1, 2, 3 구성요소를 가진 3 크기의 arr 배열을 만들어준 형태입니다.
- int[ ] arrAlloc = new int[3]; : Alloc(ate)는 공간을 만들어준 케이스입니다. 동적 할당으로 공간을 우선 선언하는 것은 가능합니다. new를 붙이고 3의 크기를 가진 arrAlloc 배열을 만들어준 형태입니다.
- arr[0] = 10; : arr 배열의 첫 번째 요소에 10을 대입해줍니다.
출력문
- for문 출력: [10] - [2] - [3] - (3) // (Console.Write는 다음 줄 이동 Line이 없음. \n = Line)
- foreach문 출력: [10] - [2] - [3] - (3)
- // foreach문은 데이터 기반 반복문으로 특정 매개 변수의 데이터를 다루는 반복문입니다.
- // (String.Format 메서드는 문자열을 특정 형식으로 포맷팅하는데 사용, arr.Length 값을 문자열로 변환 후, 이를 ( 값 ) 형식으로 출력.
int[,] arr2d =
{
{ 11, 12, 13 }, //C언어는 초기값 안넣으면 0이었지만 C#은 무조건 값을 넣어줘야함.
{ 21, 22, 23 } //ex) { 21 }, { 21, 22 } 다 오류걸림
}; //똑같이 동적배열이 강제되기 때문에 [ , ]안에 크기값 못 넣음.
int[,] arr2dAlloc = new int[2, 3]; //공간만 우선 만들어주는 버전 x = 2, y = 3 크기, 위와 크기는 같음, 이건 0으로 초기화됨.
Console.WriteLine("arr2d[0][0]: " + arr2d[0, 0]);
Console.WriteLine("arr2dAlloc[0][0]: " + arr2dAlloc[0, 0]);
Console.WriteLine("arr2dAlloc Length: {0}", arr2dAlloc.Length); //6 출력
<다차원 배열> (2차원)
- 1차원과 마찬가지로 배열 생성 단계에서 [ ] 안에 크기를 대입할 수 없습니다.
- [ , ] 대괄호 안에 , 쉼표의 갯수에 따라 다차원 배열이 됩니다. ( [ , ] 2차원, [ , , ] 3차원 )
- C언어는 배열에서 초기값을 설정하지않으면 그 요소들을 0으로 초기화했지만, C#은 그렇지 않다. 때문에 주석에 언급한대로 모든 요소에 초기화를 진행해줘야합니다.
- new를 통한 배열 생성은 공간을 우선으로 만들어주는 방식입니다. arr2dAlloc 배열은 [2, 3]의 6 크기의 배열입니다.
- 위의 방식대로면 C언어처럼 초기화하지않은 요소들을 모두 0으로 초기화해줍니다.
출력문
- "arr2d[0][0]: " + arr2d[0, 0] : 11 // C언어 Ver: printf("arr2d[0][0]: %d\n", arr2d[0][0]); 이 됩니다.) + 대신 , 기능
- "arr2dAlloc[0][0]: " + arr2dAlloc[0, 0]: 0 // arr2dAlloc배열은 new를 통해 공간만 우선 만들어줬기 때문에 0 출력)
- "arr2dAlloc Length: {0}", arr2dAlloc.Length: 6 // [2, 3]의 Length값으로 6 출력)
끝
//Jagged Array jagged array는 각 줄마다 column값을 바꿀 수 있음.
int[][] jaggedArr = new int[2][];
int[][] jaggedArrAlloc = new int[2][]
{
new int[3], //[][][] 첫 번째 배열은 길이 3
new int[4] //[][][][] 두 번째 배열은 길이 4
};
foreach (int[] jarr in jaggedArrAlloc)
foreach (int data in jarr)
Console.Write("[ {0} ] - ", data); //[0] - [0] - [0] - [0] - [0] - [0] - [0] -
Console.WriteLine("( {0} )", jaggedArrAlloc.Length); // (2)
<Jagged Array> (특이한 배열 방식)
- Jagged Array는 각 줄마다 Column 값을 바꿀 수 있습니다. ( int[row][column] )
- 위도 공간을 우선으로 생성하는 배열이기 때문에 모두 0으로 초기화됩니다.
- Jagged Array는 column값을 마음대로 바꿀 수 있기 때문에 최상위 배열의 길이를 반환합니다. (new int[2][ ]) 여기선 2
출력문
- "[ {0} ] - ", data : [0] - [0] - [0] - [0] - [0] - [0] - [0] - // 모두 0으로 초기화되어있기 때문에 7개 요소 모두 0으로 출력
- "( {0} ) - ", jaggedArrAlloc.Length : (2) // Jagged Array는 최상위 배열만 Length로 반환하기 때문에 2가 출력
끝
'프로그래밍 C#언어' 카테고리의 다른 글
상속 (Inheritance) (0) | 2024.08.30 |
---|---|
String (문자열) (0) | 2024.08.30 |
구조체 (Structure) (1) | 2024.08.29 |
DataType(데이터 타입) (3) | 2024.08.28 |
C#의 시작, class와 DataTypes (0) | 2024.08.28 |