Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 메서드에서 값으로 매개변수를 전달하는 방법 완벽 정리

값에 의한 전달(Pass by Value)은 C#에서 메서드에 매개변수를 전달하는 기본 방식입니다. 이 방식에서는 메서드가 호출될 때 각각의 값 매개변수(value parameter)마다 새로운 저장 공간이 생성됩니다.

그런 다음 실제 인자(actual argument)의 값이 이 새로운 저장 공간으로 복사됩니다. 따라서 메서드 내부에서 매개변수의 값을 아무리 변경해도 원본 인자에는 아무런 영향을 주지 않습니다.

값 전달의 핵심 특징

  • 메서드 호출 시 매개변수마다 새로운 메모리 위치가 생성됨
  • 원본 값이 복사되어 전달됨
  • 메서드 내부의 변경 사항이 호출자 측 변수에 반영되지 않음

예제 코드

다음은 두 숫자의 값을 서로 교환(swap)하려는 코드입니다. 값 전달 방식에서는 교환이 원본 변수에 적용되지 않는다는 점에 주목하세요.

using System;
namespace CalculatorApplication {
   class NumberManipulator {
      public void swap(int x, int y) {
         int temp;
         temp = x; /* x의 값을 임시 저장 */
         x = y;    /* y의 값을 x에 대입 */
         y = temp; /* temp의 값을 y에 대입 */
      }
      static void Main(string[] args) {
         NumberManipulator n = new NumberManipulator();
         /* 지역 변수 선언 */
         int a = 100;
         int b = 200;
         Console.WriteLine("Before swap, value of a : {0}", a);
         Console.WriteLine("Before swap, value of b : {0}", b);
         /* 값을 교환하는 함수 호출 */
         n.swap(a, b);
         Console.WriteLine("After swap, value of a : {0}", a);
         Console.WriteLine("After swap, value of b : {0}", b);
         Console.ReadLine();
      }
   }
}

실행 결과

Before swap, value of a : 100
Before swap, value of b : 200
After swap, value of a : 100
After swap, value of b : 200

결과 분석

출력 결과를 보면 swap 메서드가 호출된 후에도 변수 ab의 값이 그대로 100과 200인 것을 확인할 수 있습니다. 그 이유는 ab의 값이 메서드의 매개변수 xy복사되었기 때문입니다.

메서드 내부에서 xy의 값은 실제로 교환되지만, 이는 복사된 값일 뿐이므로 원본 변수에는 영향을 미치지 않습니다.

참고: 원본 값을 변경하려면?

만약 메서드 내부에서 변경한 값이 호출자에게도 반영되기를 원한다면, 참조에 의한 전달(ref 키워드) 또는 출력용 매개변수(out 키워드)를 사용해야 합니다.