나만의 작은 도서관

[C#] 문법 정리 #8. out, ref 키워드 본문

Unity/문법 및 메소드(System)

[C#] 문법 정리 #8. out, ref 키워드

pledge24 2024. 11. 22. 22:48

out, ref 키워드

C#에서 out과 ref 키워드는 메서드의 매개변수를 참조로 전달하기 위해 사용한다. 두 키워드 모두 매개변수가 호출된 메서드 내부와 외부에서 공유되도록 하지만, 사용 목적과 동작 방식에서 몇 가지 중요한 차이점이 있다.

 

out 키워드

  • 값 초기화 필요 없음: 메서드에 전달하기 전에 초기화되지 않은 변수를 사용할 수 있다.
  • 메서드 내부에서 반드시 초기화해야 함: 호출된 메서드에서 out 매개변수에 값을 할당하지 않으면 컴파일 오류가 발생한다.
void Divide(int a, int b, out int quotient, out int remainder)
{
    quotient = a / b;
    remainder = a % b;
}

int quotient, remainder;
Divide(7, 3, out quotient, out remainder);
Console.WriteLine($"{quotient}, {remainder}"); // 출력 결과: 2, 1

 

 

ref 키워드

  • 값 초기화 필요: 메서드에 전달하기 전에 변수를 반드시 초기화해야 합니다.
  • 메서드 내부에서 초기화 선택 가능: 초기화하지 않아도 컴파일 오류가 발생하지 않는다.
void Swap(ref int a, ref int b)
{
    int temp = a;
    a = b;
    b = temp;
}

int x = 5, y = 10;
Swap(ref x, ref y);
Console.WriteLine($"x: {x}, y: {y}"); // 출력 결과: x: 10, y: 5

 

out, ref는 어느 상황에 사용하는가?

두 키워드의 공통적인 사용 목적은 메서드 내에서 메소드 외부에 존재하는 변수의 값을 변경하기 위함이다. 이는 메서드 내부에 변수를 적게 사용함으로써  보다 간결한 코드를 짤 수 있다.

 

각각의 사용 목적을 보자면 out 키워드는 메서드에 전달하는 매개변수를 초기화 한다는 의도를 보다 명시적으로 표현하는 용도로 사용할 수 있으며, ref 키워드는 메서드 내에서 전달하는 매개변수를 메서드 실행의 결과를 적용한 결과값으로 사용할 수 있다.(C++에서 포인터 변수를 매개변수로 넘겨주는 것과 비슷하다고 보면 된다.)

 

out, ref 비교

특징 out ref
변수 초기화 필요 여부 호출하기 전에 초기화 필요 없음 호출하기 전에 반드시 초기화 필요
메서드 내 초기화 필요 여부 필수 선택
사용 목적 매서드 내에서 외부 변수 초기화 매서드 내에서 외부 변수 갱신
대표적인 활용 예시 다중 반환 값 (e.g., TryParse) 값을 수정하는 메서드 (e.g., Swap)

 

결론

  • out 키워드는 메서드에 전달하는 매개변수를 초기화 한다는 의도를 보다 명시적으로 표현하는 용도로 사용
  • ref 키워드는 메서드 내에서 전달하는 매개변수를 메서드 실행의 결과를 적용한 결과값으로 사용
  • 선택 기준은 변수 초기화 상태값 반환 또는 수정 여부에 따라 결정.