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

C# 메서드 매개변수 전달 방법: 값에 의한 전달(Pass by Value) 완벽 정리

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

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

값에 의한 전달의 핵심 특징

  • 메서드 호출 시 매개변수별로 독립된 메모리 공간이 할당됩니다.
  • 인수의 값이 복사되어 전달되므로 원본 데이터가 보호됩니다.
  • 메서드 내부의 변경 사항이 외부 변수에 반영되지 않습니다.

예제 코드

다음 예제는 두 숫자의 값을 서로 바꾸려는(swap) 메서드에 매개변수를 값으로 전달하는 모습을 보여줍니다.

using System;

namespace Demo {
    class NumberManipulator {
        public void swap(int x, int y) {
            int temp;
            temp = x;
            x = y;
            y = temp;
        }
        static void Main(string[] args) {
            NumberManipulator n = new NumberManipulator();
            int a = 50;
            int b = 150;
            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 : 50
Before swap, value of b : 150
After swap, value of a : 50
After swap, value of b : 150

결과 분석: 왜 값이 바뀌지 않았을까?

실행 결과를 보면 swap 메서드를 호출했음에도 변수 ab의 값이 그대로 유지된 것을 확인할 수 있습니다. 그 이유는 다음과 같습니다.

  1. n.swap(a, b)가 호출되면 ab값만 복사되어 매개변수 x, y에 전달됩니다.
  2. 메서드 내부에서 xy의 값은 실제로 서로 교환됩니다.
  3. 하지만 x, ya, b와는 완전히 별개의 메모리 공간이므로, 메서드가 종료되면 그 변경 사항은 사라집니다.

만약 메서드 내부에서 변경한 값이 호출 측 변수에도 반영되기를 원한다면, ref 키워드(참조에 의한 전달)나 out 키워드를 사용해야 합니다. 값에 의한 전달은 원본 데이터를 안전하게 보호해야 하는 상황에서 유용하게 활용할 수 있습니다.