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

C#에서 매개변수를 전달하는 3가지 방법 완벽 정리

C#에서 매개변수가 있는 메서드를 호출할 때는 인수(argument)를 메서드에 전달해야 합니다. 매개변수를 전달하는 방법은 크게 세 가지로 나눌 수 있으며, 각 방식에 따라 메서드 내부의 변경 사항이 원본 변수에 미치는 영향이 달라집니다.

값 매개변수(Value Parameters)

값 매개변수 방식은 인수의 실제 값을 함수의 형식 매개변수에 복사합니다. 따라서 함수 내부에서 매개변수를 아무리 변경해도 원본 인수에는 영향을 주지 않습니다.

메서드가 호출되면 각 값 매개변수마다 새로운 저장 위치가 생성되고, 실제 매개변수의 값이 그곳으로 복사됩니다. 이 때문에 메서드 내부에서 매개변수 값을 변경하더라도 호출자 쪽 변수는 그대로 유지됩니다.

참조 매개변수(Reference Parameters)

참조 매개변수 방식은 인수의 메모리 위치에 대한 참조를 형식 매개변수에 복사합니다. 즉, 매개변수에 가한 변경 사항이 그대로 원본 인수에 반영됩니다. C#에서는 ref 키워드를 사용하여 참조로 전달합니다.

출력 매개변수(Output Parameters)

출력 매개변수는 out 키워드를 사용하며, 하나의 메서드에서 여러 개의 값을 반환해야 할 때 유용합니다. 참조 매개변수와 비슷하게 동작하지만, 호출하기 전에 변수를 초기화할 필요가 없다는 점이 다릅니다.

예제

다음은 값 매개변수의 동작을 보여주는 C# 예제입니다. swap 메서드 내부에서 두 변수의 값을 교환하지만, 값이 복사되어 전달되었기 때문에 원본 변수 a와 b는 변하지 않습니다.

using System;

namespace CalculatorApplication {
    class NumberManipulator {
        public void swap(int x, int y) {
            int temp;

            temp = x; /* x의 값을 임시 저장 */
            x = y;    /* y의 값을 x에 대입 */
            y = temp; /* 저장해 둔 값을 y에 대입 */
        }

        static void Main(string[] args) {
            NumberManipulator n = new NumberManipulator();

            /* 지역 변수 정의 */
            int a = 7;
            int b = 10;

            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 : 7
Before swap, value of b : 10
After swap, value of a : 7
After swap, value of b : 10

실행 결과를 보면 swap 메서드를 호출한 후에도 a와 b의 값이 그대로인 것을 확인할 수 있습니다. 이는 값 매개변수 방식에서는 인수의 복사본이 전달되기 때문입니다. 만약 원본 변수의 값도 함께 변경하고 싶다면 ref 키워드를 사용한 참조 매개변수 방식을 활용해야 합니다.