연습 - 암시적 데이터 변환을 사용하여 더하기 수행

완료됨

숫자 데이터에 대해 수학 연산을 수행하려는 경우가 많습니다. C# 컴파일러가 코드를 구문 분석하고 해석하는 방식과 관련해서 알아 두어야 할 중요한 내용이 있으므로, 이 단원에서는 더하기로 시작하고 다음 단원에서 다른 연산으로 확장하겠습니다.

두 개의 숫자 값 더하기

두 숫자를 더하려면 더하기 기호 +인 더하기 연산자를 사용합니다. 문자열 연결에 사용한 것과 동일한 더하기 기호 +가 더하기 연산에도 사용됩니다. 하나의 기호를 여러 용도로 재사용하는 기술을 “연산자 오버로드”라고도 하며, C#에서는 자주 사용됩니다.

이 인스턴스에서는 C# 컴파일러가 수행하려는 작업을 파악합니다. 컴파일러는 코드를 구문 분석하고 +(연산자)의 양쪽에 모두 숫자 값(피연산자)이 있는지 확인합니다. 변수의 데이터 형식(둘 다 int임)이 제공되면 이 두 값을 더하려고 했는지 파악합니다.

  1. .NET 편집기에 다음 코드를 추가합니다.

    int firstNumber = 12;
    int secondNumber = 7;
    Console.WriteLine(firstNumber + secondNumber);
    
  2. 코드를 실행하면 출력 콘솔에 다음 결과가 표시됩니다.

    19
    

여러 데이터 형식을 함께 사용하여 암시적 형식 변환을 강제로 적용

stringint 값과 함께 + 기호를 사용하려고 하면 어떻게 될까요?

  1. 작성한 코드를 다음 코드와 일치하도록 수정합니다.

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
    
  2. 코드를 실행하면 출력 콘솔에 다음 결과가 표시됩니다.

    Bob sold 7 widgets.
    

이 경우 C# 컴파일러는 + 기호를 사용하여 두 개의 피연산자를 연결하려 한다고 인식합니다. + 기호의 양쪽에 stringint 데이터 형식의 피연산자가 있으므로 이렇게 추론한 것입니다. 따라서 문자열의 나머지 부분에 연결할 수 있도록, 일시적으로 int 변수 widgetsSoldstring으로 암시적으로 변환하려고 합니다. C# 컴파일러는 가능한 경우 사용자에게 도움이 되는 작업을 수행하지만, 의도를 명확히 지정하는 것이 좋습니다.

숫자를 더하고 문자열을 연결하는 고급 사례 시도

  1. 작성한 코드를 다음 코드와 일치하도록 수정합니다.

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
    
  2. 코드를 실행하면 출력 콘솔에 다음 결과가 표시됩니다.

    Bob sold 77 widgets.
    

int 변수 widgetsSoldint 7에 더하는 대신, 컴파일러는 모든 항목을 문자열로 처리하고 모두 연결합니다.

컴파일러에 의도를 명확히 설명하기 위해 괄호 추가

  1. 작성한 코드를 다음 코드와 일치하도록 수정합니다.

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
    
  2. 코드를 실행하면 출력 콘솔에 다음 결과가 표시됩니다.

    Bob sold 14 widgets.
    

괄호 기호 ()는 다른 오버로드된 연산자가 됩니다. 이 예제에서는 여는 괄호와 닫는 괄호가 수식에서 사용되는 것처럼 ‘연산 순서’ 연산자를 구성합니다. 가장 안쪽 괄호를 첫 번째로 확인하여 intwidgetsSold와 값 7을 더하도록 표시합니다. 이 계산이 확인되고 나면, 메시지의 나머지 부분에 연결될 수 있도록 그 결과를 문자열로 암시적으로 변환합니다.

참고

한 줄의 코드에서 계산과 연결을 모두 수행하지 않는 것이 좋습니다. 여기서는 컴파일러와 동일한 방식으로 연산자와 피연산자를 보는 방법을 이해하는 것이 중요합니다.

요약

지금까지 C#의 수학 연산에 대해 알아본 내용은 다음과 같습니다.

  • 숫자에 대해 더하기 연산 등의 수학 연산을 수행할 수 있습니다.
  • 문자열 연결과 더하기 연산은 모두 더하기 + 기호를 사용합니다. 이를 ‘연산자 오버로드’라고 하며, 컴파일러는 작업하는 데이터 형식을 기준으로 적절한 사용을 유추합니다.
  • 가능한 경우, 개발자가 프레젠테이션 목적으로 숫자의 문자열 표현을 연결하려는 것이 명백하면 C# 컴파일러에서 intstring으로 암시적으로 변환합니다.
  • 괄호를 사용하여 특정 연산을 다른 연산보다 먼저 수행하도록 컴파일러에 명시적으로 지시하는 연산 순서를 정의합니다.