나만의 작은 도서관
[C#] 문법 정리 #8. out, ref 키워드 본문
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 키워드는 메서드 내에서 전달하는 매개변수를 메서드 실행의 결과를 적용한 결과값으로 사용
- 선택 기준은 변수 초기화 상태와 값 반환 또는 수정 여부에 따라 결정.
'Unity > 문법 및 메소드(System)' 카테고리의 다른 글
[C#] 문법 정리 #10. 예외 처리 (0) | 2024.11.23 |
---|---|
[C#] 문법 정리 #9. Nullable, enum, var (0) | 2024.11.23 |
[C#] 문법 정리 #7. 값형과 참조형, 박싱과 언박싱 (0) | 2024.11.22 |
[C#] 문법 정리 #6. 인터페이스 (0) | 2024.11.21 |
[C#] 문법 정리 #5. 상속과 다형성(virtual, abstract 키워드) (0) | 2024.11.21 |