본문 바로가기

교육 노트/C# 강의

[C# 때려잡기] C# 강의 8. 배열 foreach

 여러 개의 변수를 한번에 선언하고 싶거나 연관성있는 여러개의 변수를 하나로 사용하고 싶을때 배열을 사용한다.

만약 학생30명을 관리하는 프로그램을 만들기위하여 변수를 선언한다면


int stuID1;

int stuID2;

...


int stuID30;


이런식으로 변수 30개를 만들수는 없으므로


사용하는것이 배열이다


1. 배열의 선언과 사용

배열은 같은 타입의 연속된 공간이다.

예시를 보는것이 쉬을듯하다


using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int[] stuID = {2018235151,2018235156,2018235169 };

for (int i = 0; i < 3; i++)
{
Console.WriteLine(stuID[i]);
}
}
}
}

다음과 같이

학생학번 3개짜리를 가지는 길이 3짜리의 int 배열을 만들었으며 동시에 3가지 값을 할당하였다.


만약에 30개짜리 배열을 만들고 싶다면


int[] stuID = new int[30];

다음과 같이

new 키워드를 사용한다.

new키워드는 개체를 만들어라! 라는 소리이며. 동적할당과 같은 내용은 우선 생략 하도록 하겠다.


new로 만들어진 개체는 해당 개체의 기본값을 가지게 된다.

int a = 0;
int b = new int();

두개가 같은 의미이다.


아무튼 한번에 30개짜리를 전부 초기화 해줄수는 없으나

30개짜리 배열이 필요하다면

int[] stuID = new int[30];

30개짜리 배열 을 new로 만들어 주면 된다.


2. 배열의 메모리

배열은 특정 자료형 여러개를 한번에 관리하는것이다

그래서 4바이트 int를 5개 만들면 20바이트를 사용하고

이 5개의 int는 메모리상에서 연속되어있다.


기본적으로 메모리는 1바이트 단위로 관리되며

1바이트 단위로 위치정보 (주소값)을 가지고있다. 이는 컴퓨터에서 관리하여

처음 요소가 메모리의 주소 1000번에 저장되었다면 그다음 값음 1004번에 저장되는것이다. (4바이트 이므로)



3. 다중배열

배열의 배열이다.

다중배열은 이름부터 알다시피 배열의 배열이다

다중배열은 같은 타입의 배열들을 한 데 묶어둔 것!

이를 사용하는 이유는 좌표계의 경우 x,y의 쌍으로 이루어져있다

0,0 부터 100,100 까지의 좌표계가 있다면


int x1, x2, x3, … x100;
int y1, y2, y3, … y100;
-> int[,] coordinate;
이런식으로 관련있는 배열들끼리 묶으면
선언하기도 사용하기도 관리하기도 편하다!

사용할때 coordinate[5,10] 이런식으로 사용할수 있는것이다.


using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int[,] co = { {0,0 },{0,1},
{1,0 },{1,1} };

int[,] co2 = new int[2,2];
}
}
}


사용법은 위와같다

co가 초기화와 함께 이중 배열을 만든것이고, co2 가 초기화 하지않고 만든것이다.


중요한점은 다중배열에서 x,y값이 고정되있어 4x2배열이면 반드시 2개짜리가 4개 있어야한다.

이를 맞춰주지 않으면

다음과 같은 오류를 뿜뿜한다.


요런 구조를 띄게 된다.


4. 가변배열

위와같은 다중배열은 각 x,y가 고정이라면

이런식으로 각 열들이 다른 사이즈를 가지는 배열을 Jagged 배열이라고 한다.


using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int[][] arr = new int[3][]; //1차 배열 크기 명시
arr[0] = new int[1];
arr[0] = new int[2];
arr[0] = new int[3];
}
}
}




5. 배열의 정보

C#의 자료형들은 죄다 객체 취급을 받는다 배열도 역시 객체취급을 받는데 (객체 자체는 객체지향 넘어가서 자세히 배울것.)

암튼 배열로 만들어진놈에 점을 찍으면 여러 함수나 변수가 나오는데


using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int[] arr = { 45, 12, 6234, 74212, 4123235, 5634 };
int[,] arr2 = new int[4, 5];
Console.WriteLine(arr.Length);
Console.WriteLine(arr.Rank);
Console.WriteLine(arr2.Rank);
}
}
}

그중 Length를 사용하면 배열의 길이를 알수가있다.

rank를 사용하면 몇차원 배열인지 알수있다.



6. foreach

배열의 모든 요소를 처음부터 끝까지 확인하고싶은경우

for문과 length를 사용하여 돌수있다.

이 과정을 보다 손쉽게 제공해주는 구문이 foreach문이다


using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int[] arr = { 45, 12, 6234, 74212, 4123235, 5634 };


Console.WriteLine("for문 순회");
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine("{0}", arr[i]);
}

Console.WriteLine("foreach문 순회");
foreach (int item in arr)
{
Console.WriteLine("{0}",item);
}


}
}
}


foreach구문을 살펴보면

foreach (int item in arr)
{
Console.WriteLine("{0}",item);
}

<타입> 변수 in <배열>

인데

변수에 배열의 처음부터 끝까지 순서대로 들어가게된다.



foreach 구문에는 배열뿐만아니라 순회가능한(이터레이터블) 한 시퀀스들은 전부 사용가능하다


using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string s = "abcdefg";
Console.WriteLine("foreach문 순회");
foreach (char item in s)
{
Console.WriteLine("{0}", item);
}


}
}
}

string도 일종의 문자들의 시퀀스 이므로

처음부터끝까지 foreach문으로 순회가 가능하다.

728x90