본문 바로가기

c#

c# 문법 ref out 키워드의 차이점

ref와 out은 매우 비슷한 기능을 가진 키워드 입니다. 

매개변수를 전달 할 때 사용 되며 이 둘의 차이점은 변수에 대한 초기화 입니다.

ref 키워드는 초기화 한뒤 사용하여야 하고 out키워드는 초기화가 필요 없고 이전의 값이 모두 무시된다는 점에 있습니다. 

예제를 보겠습니다.

    public void RefOut() 
        {
            int x = 2; //변수 2
            int y = 2; // out,ref에 사용할 변수

            RefIn(x, ref y);

            Console.WriteLine(x + ", " + y);
            MessageBox.Show(y.ToString());
            RefIn(x, ref y);
            MessageBox.Show(y.ToString());

            OutIn(x, out y);
            MessageBox.Show(y.ToString());
            OutIn(x, out y);
            MessageBox.Show(y.ToString());
        }
		// ref 활용 곱셈
        public void RefIn(int a, ref int rf)
        {
            rf = a * rf;
        }
		//out 활용 곱셈
        public void OutIn(int a,  out int ot) 
        {            
            ot=0; //out키워드는 선언을 하지 않으면 컴파일 에러 발생
            ot = a * ot;
        }

위의 예제를 실행할 시 ref y의 값은 8 out키워드를 사용한 y의 값은 0으로 ref는 변수가 할당 된 상태로 쓸 수 있다는 점이며 

out 키워드는 변수를 무조건 재 선언하여 지정 해야 한다는 점이 가장 큰 차이입니다. 

즉 ref는 기존의 내용을 담고 있기에 연속된 상황에서 쓰는 것이 아니라면 초기화를 해서 사용하여야하며 out은 그럴 필요없이 메서드 내에서 다시 재선언 해서 사용하기 때문에 따로 초기화 하는 것에 신경 쓸 필요 없습니다.