연습 - 암시적 데이터 변환을 사용하여 더하기 수행
숫자 데이터에 대해 수학 연산을 수행하려는 경우가 많습니다. C# 컴파일러가 코드를 구문 분석하고 해석하는 방식과 관련해서 알아 두어야 할 중요한 내용이 있으므로, 이 단원에서는 더하기로 시작하고 다음 단원에서 다른 연산으로 확장하겠습니다.
두 개의 숫자 값 더하기
두 숫자를 더하려면 더하기 기호 +
인 더하기 연산자를 사용합니다. 문자열 연결에 사용한 것과 동일한 더하기 기호 +
가 더하기 연산에도 사용됩니다. 하나의 기호를 여러 용도로 재사용하는 기술을 “연산자 오버로드”라고도 하며, C#에서는 자주 사용됩니다.
이 인스턴스에서는 C# 컴파일러가 수행하려는 작업을 파악합니다. 컴파일러는 코드를 구문 분석하고 +
(연산자)의 양쪽에 모두 숫자 값(피연산자)이 있는지 확인합니다. 변수의 데이터 형식(둘 다 int
임)이 제공되면 이 두 값을 더하려고 했는지 파악합니다.
.NET 편집기에 다음 코드를 추가합니다.
int firstNumber = 12; int secondNumber = 7; Console.WriteLine(firstNumber + secondNumber);
코드를 실행하면 출력 콘솔에 다음 결과가 표시됩니다.
19
여러 데이터 형식을 함께 사용하여 암시적 형식 변환을 강제로 적용
string
및 int
값과 함께 +
기호를 사용하려고 하면 어떻게 될까요?
작성한 코드를 다음 코드와 일치하도록 수정합니다.
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
코드를 실행하면 출력 콘솔에 다음 결과가 표시됩니다.
Bob sold 7 widgets.
이 경우 C# 컴파일러는 +
기호를 사용하여 두 개의 피연산자를 연결하려 한다고 인식합니다. +
기호의 양쪽에 string
및 int
데이터 형식의 피연산자가 있으므로 이렇게 추론한 것입니다. 따라서 문자열의 나머지 부분에 연결할 수 있도록, 일시적으로 int
변수 widgetsSold
를 string
으로 암시적으로 변환하려고 합니다. C# 컴파일러는 가능한 경우 사용자에게 도움이 되는 작업을 수행하지만, 의도를 명확히 지정하는 것이 좋습니다.
숫자를 더하고 문자열을 연결하는 고급 사례 시도
작성한 코드를 다음 코드와 일치하도록 수정합니다.
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
코드를 실행하면 출력 콘솔에 다음 결과가 표시됩니다.
Bob sold 77 widgets.
int
변수 widgetsSold
를 int
7
에 더하는 대신, 컴파일러는 모든 항목을 문자열로 처리하고 모두 연결합니다.
컴파일러에 의도를 명확히 설명하기 위해 괄호 추가
작성한 코드를 다음 코드와 일치하도록 수정합니다.
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
코드를 실행하면 출력 콘솔에 다음 결과가 표시됩니다.
Bob sold 14 widgets.
괄호 기호 ()
는 다른 오버로드된 연산자가 됩니다. 이 예제에서는 여는 괄호와 닫는 괄호가 수식에서 사용되는 것처럼 ‘연산 순서’ 연산자를 구성합니다. 가장 안쪽 괄호를 첫 번째로 확인하여 int
값 widgetsSold
와 값 7
을 더하도록 표시합니다. 이 계산이 확인되고 나면, 메시지의 나머지 부분에 연결될 수 있도록 그 결과를 문자열로 암시적으로 변환합니다.
참고
한 줄의 코드에서 계산과 연결을 모두 수행하지 않는 것이 좋습니다. 여기서는 컴파일러와 동일한 방식으로 연산자와 피연산자를 보는 방법을 이해하는 것이 중요합니다.
요약
지금까지 C#의 수학 연산에 대해 알아본 내용은 다음과 같습니다.
- 숫자에 대해 더하기 연산 등의 수학 연산을 수행할 수 있습니다.
- 문자열 연결과 더하기 연산은 모두 더하기
+
기호를 사용합니다. 이를 ‘연산자 오버로드’라고 하며, 컴파일러는 작업하는 데이터 형식을 기준으로 적절한 사용을 유추합니다. - 가능한 경우, 개발자가 프레젠테이션 목적으로 숫자의 문자열 표현을 연결하려는 것이 명백하면 C# 컴파일러에서
int
를string
으로 암시적으로 변환합니다. - 괄호를 사용하여 특정 연산을 다른 연산보다 먼저 수행하도록 컴파일러에 명시적으로 지시하는 연산 순서를 정의합니다.