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

C# 메서드 매개변수 유형 총정리: 값·참조·출력 매개변수

C#에서 메서드(Method)는 프로그램을 구성하는 코드 블록으로, 동일한 코드를 필요할 때마다 재사용할 수 있게 해줍니다. 이를 통해 불필요한 메모리 낭비를 줄이고 개발 시간을 절약할 수 있으며, 무엇보다 코드의 가독성이 크게 향상됩니다.

메서드를 실행하다 보면 작업을 수행하고 완료하기 위해 외부로부터 값을 입력받아야 하는 경우가 있습니다. 이처럼 메서드에 전달되는 입력값을 매개변수(Parameter)라고 합니다.

C#에서는 매개변수를 다음 세 가지 방식으로 전달할 수 있습니다.

  • 값 매개변수(Value Parameter)
  • 참조 매개변수(Reference Parameter)
  • 출력 매개변수(Output Parameter)

값 매개변수(Value Parameter)

값 매개변수는 인자의 실제 값을 함수의 형식 매개변수에 복사합니다. 단순 변수를 메서드에 전달하면 기본적으로 값으로 전달되는데, 이는 전달된 변수의 값이 메서드 내부 변수로 복사된다는 의미입니다. 따라서 메서드 안에서 값을 변경하거나 수정하더라도 그 변경은 호출한 쪽의 원래 변수에는 반영되지 않습니다. int, double, bool과 같은 기본 데이터 타입은 대부분 값으로 전달됩니다.

예제

using System;

namespace MyApplication {
    class Program {
        static void Main() {
            int x = 5, y = 5;
            Console.WriteLine($"메서드 호출 전 값: x = {x}, y = {y}");
            ValueParameter(x, y);
            Console.WriteLine($"메서드 호출 후 값: x = {x}, y = {y}");
        }

        static void ValueParameter(int x, int y) {
            x = 10;
            y = 10;
            int z = x + y;
            Console.WriteLine($"x + y = {z}");
        }
    }
}

실행 결과

위 코드의 실행 결과는 다음과 같습니다.

메서드 호출 전 값: x = 5, y = 5
x + y = 20
메서드 호출 후 값: x = 5, y = 5

메서드 내부에서 x와 y를 10으로 변경했지만, 호출한 쪽의 변수 값은 여전히 5로 유지되는 것을 확인할 수 있습니다.

참조 매개변수(Reference Parameter)

참조 매개변수는 인자가 저장된 메모리 위치에 대한 참조를 형식 매개변수에 복사합니다. 일반적으로 객체는 모두 참조로 전달되며, 메서드는 전달된 변수의 값 자체가 아니라 그 참조를 대상으로 작업합니다. 그 결과 호출된 메서드 내부에서 변수를 수정하면 호출한 쪽의 변수도 함께 변경됩니다. 즉, 매개변수에 가한 변경이 원본 인자에 그대로 반영됩니다. 참조 매개변수를 사용하려면 ref 키워드를 사용합니다.

예제

using System;

namespace MyApplication {
    class Program {
        static void Main() {
            int x = 5, y = 5;
            Console.WriteLine($"메서드 호출 전 값: x = {x}, y = {y}");
            RefParameter(ref x, ref y);
            Console.WriteLine($"메서드 호출 후 값: x = {x}, y = {y}");
        }

        static void RefParameter(ref int x, ref int y) {
            x = 10;
            y = 10;
            int z = x + y;
            Console.WriteLine($"x + y = {z}");
        }
    }
}

실행 결과

위 코드의 실행 결과는 다음과 같습니다.

메서드 호출 전 값: x = 5, y = 5
x + y = 20
메서드 호출 후 값: x = 10, y = 10

값 매개변수 예제와 달리, 메서드 내부에서 변경한 값이 호출한 쪽의 변수에도 그대로 반영되어 x와 y가 모두 10으로 출력됩니다.

출력 매개변수(Output Parameter)

출력 매개변수는 메서드에서 두 개 이상의 값을 반환해야 할 때 유용합니다. return 문은 함수에서 하나의 값만 반환할 수 있지만, 출력 매개변수를 활용하면 여러 값을 한 번에 반환할 수 있습니다. 출력 매개변수로 제공되는 변수는 호출 전에 값을 초기화할 필요가 없으며, 데이터를 메서드 안으로 전달하는 참조 매개변수와 달리 메서드 밖으로 데이터를 내보내는 데 사용됩니다. 출력 매개변수는 out 키워드를 사용합니다.

예제

using System;

namespace MyApplication {
    class Program {
        static void Main() {
            int result;
            OutParameter(out result);
            Console.WriteLine($"결과: {result}");
        }

        static void OutParameter(out int result) {
            int x = 10, y = 10;
            result = x + y;
        }
    }
}

실행 결과

위 코드의 실행 결과는 다음과 같습니다.

결과: 20

마무리

값 매개변수는 원본 데이터를 보호하고 싶을 때, 참조 매개변수는 메서드가 원본 데이터를 직접 수정해야 할 때, 출력 매개변수는 여러 결과값을 반환받고 싶을 때 각각 활용하면 됩니다. 상황에 맞는 매개변수 유형을 선택하면 더 안전하고 명확한 코드를 작성할 수 있습니다.