C# 숫자 승격(Numeric Promotion)이란?
숫자 승격(Numeric Promotion)은 short와 같은 작은 데이터 타입이 int처럼 더 큰 데이터 타입으로 자동 변환되는 것을 의미합니다. C# 컴파일러는 연산이나 표현식을 평가하는 과정에서 서로 다른 크기의 숫자 타입이 섞여 있을 경우, 손실 없이 값을 담을 수 있도록 작은 타입을 더 큰 타입으로 자동 승격시킵니다.
흥미로운 점은 이러한 숫자 승격이 조건식(Conditional Expression, 삼항 연산자)에서도 동일하게 적용된다는 것입니다. 아래 예제를 통해 조건식에서 일어나는 숫자 승격을 직접 확인해 보겠습니다.
예제 코드
using System;
class Program {
static void Main() {
short val1 = 99;
int val2;
val2 = (val1 == 1) ? 100 : 30;
Console.WriteLine(val2);
}
}출력 결과
30
코드 설명
위 코드에서 사용된 조건식은 다음과 같습니다.
val2 = (val1 == 1) ? 100 : 30;
여기서 val2는 int 타입이고, val1은 short 타입입니다. 조건식은 val1의 값이 1인지 비교한 후, 참이면 100을 거짓이면 30을 반환합니다. 이 예제에서 val1은 99이므로 조건이 거짓이 되어 최종적으로 30이 출력됩니다.
핵심은 조건식의 결과 값들이 자동으로 int 타입으로 승격되어 평가된다는 점입니다. 즉, 개발자가 명시적으로 형변환 코드를 작성하지 않아도 C# 컴파일러가 암묵적으로 숫자 승격을 수행하기 때문에, short 타입 변수를 포함한 조건식도 별도의 캐스팅 없이 int 타입 변수에 안전하게 대입할 수 있습니다.