호빵의 IT 개발소

[C/C #] ref, out 키워드 본문

CS(전공지식)/프로그래밍언어

[C/C #] ref, out 키워드

호빵Stack 2022. 7. 17. 22:15

ref, out

  • ref와 out 키워드는 메서드 or 함수 내에서 인수를 전달하는데 사용
  • ref와 out 키워드는 인수/매개 변수가 참조로 전달되어 나타냄

 

ref, out의 공통점

  • ref와 out 키워드는 런타임에 다르게 처리되며 컴파일 시간에 동일하게 처리
  • 속성은 변수가 아니므로 ref 또는 out 매개변수로 전달할 수 없음

 

ref 키워드

  • 인수를 참조로 전달하는데 사용 - 매개 변수의 값이 메서드에서 변경되면 호출하는 메서드에 반영
  • 전달된 인수는 호출된 메서드에 전달되기 전에 호출 메서드에서 초기화 되어야 함(중요)

ref 특징

  • 매개 변수가 ref로 전달되기 전에 초기화
  • 호출 메서드로 돌아가기 전에 매개 변수 값을 초기화할 필요는 없음
  • ref 매개변수를 통한 값 전달은 호출된 메서드가 전달된 매개 변수의 값을 변경해야 할 때 유용
  • ref를 사용하면 데이터를 양방향으로 전달할 수 있음
class Test
{
    static void TestRef(ref int number)
    {
        number = 10;
        Console.WriteLine("TestRef에서 값 변경: {0}", number);
    }

    static void Main(string[] args)
    {
        int number1 = 0;
        Console.WriteLine("TestRef 호출 전: {0}", number1);
        TestRef(ref number1);
        Console.WriteLine("TestRef 호출 후: {0}\n", number1);
    }
}

out 키워드

  • ref 키워드와 같은 인수를 전달하는데 사용되지만 값을 할당하지 않고 인수를 전달할 수 있음
  • 전달된 인수는 호출 메서드로 돌아가기 전에 호출된 메서드에서 초기화 되어야 함

 

out 특징

  • 매개 변수가 전달되기 전에 초기화할 필요가 없음
  • 호출 메서드로 돌아가기 전에 매개 변수 값을 초기화해야 함
  • 매개 변수 선언은 메서드가 여러 값을 리턴할 때 유용
  • 데이터는 단방향 방식으로만 전달됨(호출된 메서드 -> 호출자 메서드)
class Test
{
    static void TestOut(out int number)
    {
        number = 10;
        Console.WriteLine("TestOut에서 값 변경: {0}", number);
    }

    static void Main(string[] args)
    {
        int number1;
        TestOut(out number1);
        Console.WriteLine("TestOut 호출 후: {0}\n", number1);
    }
}

 

 

 

 

 


 

출처 및 참조 : https://developer-talk.tistory.com/53

Comments