프로그래밍공부/C#기초

C# 프로그램 기초 - 10

Roslyn 2024. 1. 11. 16:32
반응형

지난 수업에 우리는 for문과 함께 초기화에 대해서 공부해 보았습니다.

for문은 여러 프로그램의 반복문에 있어서 가장 원시적인 형태를 가진 명령문으로, 현재까지도 종종 사용되지만, 근래에는 다양한 기능들이 등장하며 for문의 역할을 대신하고 있기도 합니다.

 

C#에서 가장 대표적인 대체 명령어는 바로 foreach 입니다.

foreach란 배열의 구성 요소 만큼 배열이 반복되는 형태입니다.

 

만약 여러분이 for문을 돌리는데, 조건을 잘못 쓰거나, 그 안에 요소가 지정한 크기만큼 존재하지 않게 되면, 프로그램은 오류를 출력하게 됩니다.

 

 

위 그림은 먼저 숫자배열 arr을 선언하고, 거기에 10과 20 이란 값을 넣어서 배열을 초기화 하고 있습니다.

배열의 초기화 방법은 다양한데 가장 기본적인 개념이 바로 위 그림에서 보는 방법과 같습니다.

 

그 다음 for문으로 i를 0부터 3보다 작을 때까지 반복하게 되고, 배열의 개별 요소에는 arr[i]와 같이 대괄호를 이용해 읽을 수 있습니다.

 

arr[0] 에는 10 이란 값이 들어가고, arr[1] 에는 20이란 값이 들어가 있습니다.

이미 배열을 초기화할때 넣었기 때문입니다.

 

여기서 중요한 개념.  프로그램에서 모든 순번은 실제 현실세계와 달리 0부터 시작합니다.
배열은 갯수가 있고, 해당 갯수마다 숫자가 부여되는데, 이를 인덱스(index)라고 부르며, 인덱스는 0부터 시작하므로, arr 이란 배열이 있을 때, arr[0] 부터 시작하게 됩니다.
그러므로, 배열의 갯수는 항상 인덱스보다 1이 크게 됩니다.
배열이 1개 라면, 인덱스는 0부터 시작하니까 arr[0] 이 되고, 1개라는 갯수가 존재하게 되는 것이죠.
2개라면, arr[0]과 arr[1]이 존재하는 것이고, 3개라면 arr[0], arr[1], arr[2] 와 같이, 인덱스에 가장 큰수는 전체 배열 갯수에 1개보다 적게 됩니다.

 

그런데 for문의 조건을 보면 i < 3, 즉 i가 3보다 작다면 조건을 반복하다록 하고 있습니다.

그러니 i 에는 2도 대입이 되는 것이죠.

그리고 arr[2]는 존재하지 않으므로, 존재하지 않는 인덱스에 접근하려고 하자 C# 컴파일러가 오류를 출력하게 되는 겁니다.

이런 종류의 오류를 익셉션(Exception)이라고 부르며, 익셉션은 다양한 종류가 있습니다.

 

인덱스아웃오브레인지익셉션(IndexOutOfRangeException), 즉 인덱스가 범위(Range)에서 벗어났다(Out)는 의미입니다.

이는 프로그램 세계에서 종종 볼 수 있는 오류중 하나입니다.

 

이러한 오류 가능성을 배제하기 위해, foreach문과 같은 명령어가 등장했다고 볼 수 있습니다.

 

int[] arr = new int[] { 10, 20 };

foreach(int i in arr)
{
	Console.WriteLine(arr[i]);
}

 

위와 같이 foreach 문으로 수정하게 되면, int i in arr 이라는 조건절이 보일 겁니다.

arr에 있는 배열의 요소가 순서대로 하나씩 int i 에 담겨지는 겁니다.

이건 arr이라는 배열의 크기만큼만 자동으로 반복되므로, IndexOutOfRangeException 같은 오류를 걱정할 필요가 없게 됩니다.

 

foreach문은 언어마다 조금씩 다른 모습으로, 다양하게 활용되고 있는 개념입니다.

때로는 each문으로, 조금 다르게는 map 과 같은 형태를 가지기도 하지만, 궁극적인 개념은 해당 요소의 배열 크기만큼 자동으로 반복한다는 겁니다.

 

우리는 이를 통해 보다 안정적으로 반복문을 사용할 수 있게 됩니다.

 

오늘 배운 내용에 핵심은 다음과 같습니다.

(1) foreach 문을 이용한 안전한 반복문 수행

(2) Exception 이라는 시스템 오류에 대한 인지

(3) 프로그램 세계에서 숫자는 0부터 시작한다.

반응형