C# ref , out 참조형식

2023. 3. 9. 00:31C#/기록 보관

반응형
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를 사용하면 매개변수를 까먹고 사용하지 않았을때를 예방 할수있을것이다

'C# > 기록 보관' 카테고리의 다른 글

점프문 Continue  (0) 2023.03.07
분기문 짝수홀수  (0) 2023.03.07