스토리지

[3.12] 메소드의 키워드 (ref, out, params) 본문

Unity/수업내용(C#)

[3.12] 메소드의 키워드 (ref, out, params)

ljw4104 2021. 3. 12. 10:57

1. ref

ref는 Call by Reference에 나와있다.

silimy5465.tistory.com/33

 

[3.12] Call by Value & Call by Reference

1. Call by Value class Program { static void Main(string[] args) { int a = 5; int b = 7; swap(a, b); Console.WriteLine("In Main a : {0}, b : {1}", a, b); } static void swap(int a, int b) { Console.W..

silimy5465.tistory.com

 

2. out

ref와 동일하게 주소를 전달하는 키워드이기 때문에 호출한 블럭에서도 값이 변경이된다.

하지만 ref와 다른점은

ref out
선언 했을 때, 무조건 초기화가 되어있어야함. 초기화를 하면 안됨. (out을 매개변수로 받은 함수에서 가능)
따로 return값이 필요없음 함수가 끝나기전에 무조건 매개변수에 값을 넣어야됨.
public class App
    {
        public App()
        {
            Console.WriteLine("App 생성됨");

            int a;
            OutParameter(out a);
            Console.WriteLine(a);
        }

        public void OutParameter(out int a)
        {
            a = 50;
            a *= 2;
        }
    }

Main함수에서는 a에 관한 어떤 연산도 수행하지 않았지만 주소가 전달되기에 계산된 값으로 출력된다.

 

3. params

params 키워드는 다수의 값을 매개변수로 넣어줬을 때, 이 값들을 배열로 만들어준다.

만약 매개변수 타입이 object이면 어느 타입이든 받아들일 수 있다.

public class App
    {
        public App()
        {
            Console.WriteLine("App 생성됨");

            int[] arr = ParamsMethod(1, 2, 7, 5, 4, 2, 6, 5, 4, 9, 1, 0);

            foreach (var i in arr)
            {
                Console.Write(i + " ");
            }

            Console.WriteLine();
        }

        public int[] ParamsMethod(params int[] a)
        {
            return a;
        }
    }

ParamsMethod에 매개변수로 넘겨준 값들이 배열로 묶여져 return된 것을 확인할 수 있다.

 

Comments