C#

C# for문, foreach 문

Wally's 2023. 5. 28. 16:54

for문 : 

for 문은 초기화식, 조건식, 반복식으로 구성되며, 일반적으로 숫자 범위를 반복하거나 배열의 요소에 접근하는 데 사용된다.

  • 초기화식 : 반복을 시작하기 전에 한 번만 실행되는 초기화 코드이다. 변수를 초기화하거나 반복 제어 변수를 설정하는데 사용.
  • 조건식 : 반복이 실행될 조건을 나타내는 부울 표현식이다. 조건이 'true'인 동안 반복이 계속된다.
  • 반복식 : 반복이 한 번 실행된 후에 반복 전에 실행되는 코드이다. 보통 반복 제어 변수를 갱신하거나 반복 동작을 업데이트하는데 사용된다.

foreach 문 : 

foreach문은 배열, 컬렉션, 열거형 등의 요소를 순회하는데 사용된다.

foreach문은 반복 변수가 컬렉션의 요소를 차례대로 순회하며, 각 요소에 대해 반복 실행된다.

  • 변수 선언 : 현재 순회 중인 요소를 저장할 변수를 선언한다. 요소의 형식에 맞게 변수를 선언해야 한다.
  • 컬렉션 : 순회할 배열, 컬렉션, 열거형 등의 데이터 구조이다.

차이점 :

1. 컬렉션 순회 방식 :

  • for 문 : 반복 제어 변수를 사용하여 숫자 범위를 반복하거나 배열의 인덱스에 접근하여 반복한다. 예시) 'int i  = 0; i < arry.Length; i ++'와 같은 방식으로 배열의 인덱스를 직접 조작한다. 
  • foreach 문 : 컬렉션의 요소를 차례로 순회하여 반복 실행한다. 배열이나 컬렉션의 크기와 상관없이 자동으로 요소에 접근한다.

2. 요소 접근 방식 :

  • for 문 : 배열의 인덱스를 사용하여 요소에 접근하거나 컬렉션의 메서드를 호출하여 요소에 접근하여 요소를 읽거나 수정할 수 있다.
  • foreach 문 : 반복 변수를 사용하여 현재 순회 중인 요소에 직접 접근하여 요소는 읽기 전용이며 수정할 수 없다.

3. 구문의 간결함 :

  • foreach 문 : 반복 제어 변수를 별도로 선언하거나 업데이트할 필요가 없기 때문에 'for'문에 비해 구문이 간결하다. 컬렉션을 순회하면서 각 요소에 대해 자동으로 반복한다.

'foreach' 문은 컬렉션의 요소를 순회하고 읽기만 할 때 적합한 편이다.

'for'문은 조건에 따라 숫자 범위를 반복하거나 배열을 수정해야 할 때 유용 하다.

 

실행 비용 : 

for문 :

반복을 위해 반복 변수의 초기화, 조건식의 평가 및 반복식의 실행을 포함하는 추가적인 연산을 수행한다.

또한 배열의 인덱스에 접근하여 요소에 액세스해야 할 수도 있다. 

따라서 'for'문은 추가적인 연산과 인덱스 접근으로 인해 약간의 성능 비용이 발생할 수 있다.

 

foreach문 :

컬렉션의 요소를 차례로 순회하는 간편한 방법을 제공한다.

내부적으로 foreach 문은 'IEnumerator' 또는 'IEnumerable' 인터페이스를 구현하는 컬렉션의 'MoveNext' 및 'Current'메서드를 사용하여 요소에 접근한다.

반복 동안 컬렉션의 상태를 변경하지 않으므로 추가적인 연산이 필요하지 않아, 간단하고 효율적인 순회를 제공한다.

 

비용 차이 :

일반적으로 'foreach'문은 'for'문에 비해 성능 상이 이점을 가지고 있다.

foreach문은 컬렉션의 크기와 관계없이 순화할 수 있으며, 반복 변수의 초기화, 조건식 평가 및 인덱스 접근과 같은 추가 연산이 필요하지 않는다.

 

하지만, 컬렉션의 요소를 수정해야 하는 경우에는 'for'문이 더 적합할 수 있다.

 

for 문 반복식 i++ 과 ++i : 

i++/ ++i 은 반복식에 사용되는 연산자로, 변수 i의 값을 증가시킨다. 

 

i ++ (후위 증가 연산자) : 값을 증가 시키기 전에 현재 값을 반환, 반복식 내에서 증가 이전의 값을 사용하는 경우에 주로 사용된다.

++ i (전위 증가 연산자) : 값을 증가시키고 난 후에 증가된 값을 반환, 반복식 내에서 증가시키고 증가된 값을 사용하는 경우.

 

실행 비용의 차이 :

실행 비용 측면에서 'i ++' 과 '++ i' 사이에는 일반적으로 큰 차이가 없다.

컴파일러 및 최적화 수준에 따라 실행 시에는 두 연산이 동일한 성능을 보일 수 있다. 

 

다만, 주의 할 점은 'i ++'의 경우 증가 이전의 값을 사용하기 때문에 해당 값을 다른 변수에 할당하거나 사용할 때 유의해야 한다.

'++ i '은 증가된 값을 사용하므로 이러한 부분에서 발생 할 수 있는 오류를 방지할 수 있다.

 

사용자의 선호도와 코드의 의도에 따라 달라진다.