반응형
평상시 쓰던 for 반복문
지금까지 너무나도 당연하게 작성하고 있는 for 반복문
하지만 갑자기 의문이 들었다. 왜 for 반복문에서 증감연산자는 후위 증가연산자를 사용하는가?
using System;
public partial class Program
{
static void Main(string[] args)
{
int[] ints = { 8, 10, 24, -1, 98, 47, -101, 39 };
for (int i = 0; i < ints.Length; i++)
{
Console.WriteLine(ints[i]);
}
}
}
for 반복문의 경우 (초기화 ; 조건 검사 ; 증감 연산)과 같이
각각이 별도의 연산으로 증감 연산에서 전위 후위에 관계없이 동일한 결과를 도출한다.
i++, ++i
어느 쪽을 사용하던지 동일한 결과를 도출한다.
후위 증감 연산자를 사용하는 경우 임시 변수가 생성되지만 컴파일러 최적화를 통해서 거의 동일한 성능을 가진다.
과거부터 프로그래머들이 써오던 관습(convention)에 의해 for 반복문의 증감 연산자는 후위 증감 연산자를 사용한다.
for 반복문에서는 이 둘이 동일하지만 다른 예제에서는 어떻게 동작하는지 살펴보자.
전위 증감연산자 vs 후위 증감연산자
아래 예제의 결과를 예상해보도록하자.
using System;
public partial class Program
{
static void Main(string[] args)
{
int num1 = 2;
int num2 = 2;
int num3;
int num4;
num3 = num1++;
num4 = num2--;
Console.WriteLine($"num3: {num3}");
Console.WriteLine($"num4: {num4}");
}
}
어떤가? 답을 맞혔다면 당장 뒤로 가기를 눌러도 괜찮다.
num3 = num1;
num1 = num1 + 1;
num4 = num2;
num2 = num2 - 1;
후위 증가 연산자는 우선 할당을 실행하고 그 이후에 증가를 실행한다. 그 과정은 위와 같다.
using System;
public partial class Program
{
static void Main(string[] args)
{
int num1 = 2;
int num2 = 2;
int num3;
int num4;
num3 = ++num1;
num4 = --num2;
Console.WriteLine($"num3: {num3}");
Console.WriteLine($"num4: {num4}");
}
}
num1 = num1 + 1;
num3 = num1;
num2 = num2 - 1;
num4 = num2;
후위 증가 연산자는 우선 증가 이후에 할당을 실행한다. 그 과정은 위와 같다.
추가 확인 예제
그렇다면 아래의 예제처럼 메서드의 인자로 넘기는 경우 어떻게 적용될지 생각해 보자.
using System;
public partial class Program
{
static void Main(string[] args)
{
int num1 = 2;
TestFunc(num1++);
}
static void TestFunc(int n)
{
Console.WriteLine(n);
}
}
참고 사이트
'프로그래밍 > C#' 카테고리의 다른 글
C# 피보나치 수열 IEnumerable, IEnumerator 상속받아서 구현하기 (0) | 2024.04.04 |
---|---|
C# 꼬리 재귀(tail recursion) (0) | 2024.04.01 |
C# 재귀 호출 동작 방식 (1) | 2024.03.29 |
C# string에서 16진수로 변환하기 (0) | 2024.03.28 |
식 트리와 람다식 (0) | 2024.03.27 |
댓글