out ( 매개변수 키워드 )
out 키워드는 메서드의 매개변수를 참조 ( Reference ) 로 전달하는 방식 중 하나이다.
ref 와 달리 호출하는 쪽에서 변수를 초기화할 필요는 없다.
메서드 안에서 해당 매개변수에 반드시 값을 할당해야 한다.
주로 여러 개의 값을 반환해야 할때 사용된다.
문법
▼메서드 정의
반환형 메서드이름(매개변수1, out 자료형 변수명, ...)
▼메서드 호출
메서드이름(값1, out 변수명);
예시 코드
using System;
class Program
{
// 두 정수를 나눠서 몫과 나머지를 out으로 반환
static void Divide(int a, int b, out int quotient, out int remainder)
{
quotient = a / b; // out 변수에 반드시 값 할당
remainder = a % b;
}
static void Main()
{
int q, r; // 초기화 필요 없음
Divide(10, 3, out q, out r);
Console.WriteLine($"몫: {q}, 나머지: {r}");
}
}
실행 결과
몫 : 3 , 나머지 : 1
주의 사항
1. 메서드 안에서 반드시 값을 할당해야 한다
- 할당하지 않으면 컴파일 에러 발생
2. 호출하는 쪽에서는 초기화가 필요 없다
- ref 와 달리 미리 값을 넣어줄 필요가 없다.
3. 여러 개의 값을 반환해야 할때 주로 사용
- 메서드의 return 은 1개 뿐이므로 추가적인 결과값 반환용으로 유용하다
예시 코드
if (int.TryParse("123", out int number))
{
Console.WriteLine($"변환 성공: {number}");
}
else
{
Console.WriteLine("변환 실패");
}
▲문자열을 숫자로 바꿀 때, 성공 여부와 변환된 값 두 가지를 동시에 반환
주의 사항
반환값이 있는 메서드에서 out 을 사용할 때에는 return 자체를 생략할 수 없다.
static int GetValue(out int doubled)
{
int value = 5;
doubled = value * 2;
return value; // 반드시 return 필요
}
▼return 과 out 을 같이 쓰는 일반 패턴
static bool TryDivide(int a, int b, out int result)
{
if (b == 0)
{
result = 0;
return false; // 성공 여부 반환
}
result = a / b;
return true; // 성공 여부 반환
}
bool 반환값은 연산 성공 여부
out 값은 연산 결과
둘 다 꼭 필요하다.
▼ref 와 out 을 같이 쓰는 패턴
class Program
{
// num은 ref → 기존 값 수정
// square는 out → 새 값 할당
static void Process(ref int num, out int square)
{
num += 10; // ref → 기존 값에 10 더하기
square = num * num; // out → 반드시 새 값 할당
}
static void Main()
{
int a = 5; // ref는 반드시 초기화해야 함
int b; // out은 초기화 필요 없음
Process(ref a, out b);
Console.WriteLine($"a (ref, 수정됨): {a}"); // 15
Console.WriteLine($"b (out, 새로 할당됨): {b}"); // 225
}
}
▼실행 결과
a (ref, 수정됨): 15
b (out, 새로 할당됨): 225
보통은 ref 와 out 을 같은 메서드에서 동시에 쓰는 경우는 많지 않지만 문법적으로는 가능하다
ref : 호출하는 쪽에서 초기화된 값을 받아와서, 메서드 안에서 수정하면 그 값을 반영한다.
out : 호출하는 쪽에서 초기화 필요 없다. 메서드 안에서 반드시 새 값을 할당해야 한다.
혼용할 수 있지만 의도가 헷갈리면 코드 가독성이 크게 떨어진다.
정리
메서드가 결과값을 여러 개 돌려주고 싶을 때 쓰는 출력 전용 매개변수이다.
'⭐C Sharp > 07. 메서드(함수)' 카테고리의 다른 글
| 튜플 ( Tuple ) (0) | 2026.04.26 |
|---|---|
| in ( 매개변수 키워드 , 참조 전달 ) (0) | 2025.09.28 |
| ref ( 매개변수 키워드 , 참조 전달 ) (0) | 2025.09.28 |
| 함수 ( Function ) (0) | 2025.09.07 |
| Convert 를 이용한 변환 (0) | 2025.09.07 |