본문 바로가기
ETC/C#

매개 변수 / 참조 지역 변수

by 빡구동동 2021. 1. 18.

매개 변수 / 참조 지역 변수


참조에 의한 매개 변수 전달

값에 의한 전달이 매개 변수가 변수나 상수로부터 값을 복사하는 것과는 달리, 

참조에 의한 전달은 매개 변수가 메소드에 넘겨진 원본 변수를 직접 참조한다.

 

따라서 메소드 안에서 매개 변수를 수정하면 이 매개 변수가 참조하고 있는 원본 변수에 수정이 이뤄진다.

 

class Program
    {
        static void Swap(ref int a, ref int b)
        {
            int temp = b;
            b = a;
            a = temp;
        }

        static void Main(string[] args)
        {
            // 참조에 의한 매개변수 전달 (Pass By Reference)
            int x = 3;
            int y = 4;

            Swap(ref x, ref y);
            Console.WriteLine($"{x}, {y}");

        }
     }

메소드의 결과를 참조로 반환하기

참조 반환값을 이용하면 메소드의 호출자로 하여금 반환받은 결과를 참조로 다룰 수 있도록 함.

ref 한정자 이용해서 메소드 선언 - return 문이 반환하는 변수 앞에도 ref 키워드 명시

 

 // 메소드의 결과를 참조로 반환하기 - 메소드의 호출자로 하여금 반환받은 결과를 참조로 다룰 수 있게 함
        class Product
        {
            private int price = 100;

            public ref int GetPrice()
            {
                return ref price; // 메소드의 결과를 참조로 반환
            }

            public void PrintPrice()
            {
                Console.WriteLine($"Price : {price}");
            }

        }

    class MainApp
    {
        static void Main(string[] args)
        {
            Product carrot = new Product();
            // GetPrice()가 반환하는 결과를 호출자가 참조로 넘겨받고 싶은 경우
            ref int ref_local_price = ref carrot.GetPrice(); 
            int normal_local_price = carrot.GetPrice();

            carrot.PrintPrice();
            Console.WriteLine($"Ref Local Price : {ref_local_price}");
            Console.WriteLine($"Normal Local Price : {normal_local_price}");

            ref_local_price = 150;

            carrot.PrintPrice();
            Console.WriteLine($"Ref Local Price : {ref_local_price}");
            Console.WriteLine($"Normal Local Price : {normal_local_price}");
        }
    }

 ref int ref_local_price = ref carrot.GetPrice();  부분에서 

ref_local_price 를 수정하면 carrot.price의 내용도 바뀐다!!!


Price 값 변화

 

'ETC > C#' 카테고리의 다른 글

객체 지향 / 클래스 / 정적 필드  (0) 2021.01.20
메소드 / 가변길이 매개 변수 / 로컬 함수  (0) 2021.01.20
데이터를 가공하는 연산자  (0) 2021.01.11
C# 문자열 다루기  (0) 2021.01.10
C# 데이터 보관하기 (3)  (0) 2021.01.10

댓글