C# (수업 정리)

C#: 매개변수 한정자 (ref, in, out)

yunjeong_01 2024. 7. 23. 11:15

매개변수 한정자는 특정 변수, 데이터의 메모리 주소값을 직접 전달해 원본 데이터를 변경하고자 할 때 사용할 수 있습니다. 대표적으로 ref, in, out 키워드가 있으며 다음과 같이 사용할 수 있습니다. 데이터의 복사본을 전달하지 않고 메모리 주소를 전달하기 때문에 메모리 사용량을 줄이고 성능을 향상시킬 수 있습니다.

 

1) ref

ref 한정자는 변수의 메모리 주소를 전달하여, 메서드 내부에서 그 변수 원본의 값을 참조하고 변경할 수 있도록 합니다.
두 변수의 값을 교환하거나, 메서드의 호출 과정에서 변수 원본의 값을 변화시켜야 할 때 사용할 수 있습니다.

 

2) in

in 한정자는 메서드에 변수의 메모리 주소를 전달하지만, 메서드 내에서는 그 매개변수의 값을 변경할 수 없게 합니다.
구조체와 같이 크기가 큰 구조체를 함수에서 다뤄야 할 때 유용하면서도 의도치 않은 원본 데이터의 변질을 방지할 수 있습니다.

 

3) out

out 한정자는 메서드가 값을 반환할 때 사용되며 이는 메서드가 여러 값을 반환해야 할 때 유용합니다.
out 매개변수는 메서드 내에서 반드시 할당되어야 합니다.

 

 

<ref 한정자 예시>

namespace _2024_07_23_1
{
    internal class Program
    {

        public static void Swap(int left, int right)
        {
            int temp = left;
            left = right;
            right = temp;
        }

        public static void Swap1(ref int left, ref int right)
        {
            int temp = left;
            left = right;
            right = temp;
        }

        static void Main(string[] args)
        {
            int a = 10;
            int b = 20;

            int c = 10;
            int d = 20;

            Swap(a, b);
            Console.WriteLine($"a= {a} / b= {b}");

            Swap1(ref c, ref d);
            Console.WriteLine($"a= {c} / b= {d}");
        }
    }
}

'C# (수업 정리)' 카테고리의 다른 글

C#: 객체지향프로그래밍 (상속)  (0) 2024.07.23
C#: 객체지향프로그래밍 이론  (0) 2024.07.23
C#: 클래스와 Static  (0) 2024.07.22
C#: 클래스와 메모리  (0) 2024.07.22
C#: SOLID 원칙  (0) 2024.07.22