C#/기록 보관

C# ref , out 참조형식

seyeol 2023. 3. 9. 00:31
반응형
class MainApp
    {
        public static void Main()
        {
            double mean = 0;
            Mean(5, 4, mean);
            WriteLine(mean);
            
        }
        public static void Mean(double a, double b , double mean)
        {
            mean = (a + b) / 2;
        }
        
    }

이런식의 코드를 실행하면 어떤 값이 나올까? 4.5? 아니다 결과값은 0이 나온다

왜냐하면 매개변수가 값을 받아올때 방식이 값을 복사해서 가져오는것이기 때문이다

예를 들어 A =5; B=A; 라는 코드는 A의 5라는 값을 복사해서 B에 넣어주는것이기 때문에 여기서 B=100이런식으로 B값을 변경해도 A값의 변동은 없다 그러면 B값을 바꿨을때 A값도 변하게 할려면 어떻게 할까

값을 복사 해서 가져오는것이 아닌 그 값자체를 참조해서 가져오게 된다면 B값을 바꿨을때 A값도 변하게 할수있다

 

ref와 out이라는 것을 변수에 추가 시킨다면 그 값 자체를 참조 할수있게 된다

class MainApp
    {
        public static void Main()
        {
            double mean = 0;
            Mean(5, 4,out mean);
            WriteLine(mean);
            
        }
        public static void Mean(double a, double b , out double mean)
        {
            mean = (a + b) / 2;
        }
        
    }

 그러면 ref와 out의 차이는 뭘까 ref는 매개변수의 값을 안바꿔도 문제가 생기지 않지만 out 키워드를 사용하면 매개변수의 값을 바꾸지 않는다면 문제가 발생하기 때문에 out를 사용하면 매개변수를 까먹고 사용하지 않았을때를 예방 할수있을것이다