C#에서 out 키워드는 메서드 매개변수로 사용될 때, 해당 매개변수가 출력 전용임을 나타냅니다. 즉, 메서드 내부에서 값을 설정하고, 호출한 쪽에서 해당 값을 사용할 수 있도록 보장합니다.
out DataTable처럼 out이 DataTable 앞에 붙는 경우, 메서드가 반환할 DataTable 객체를 호출하는 쪽에서 받을 수 있습니다.
using System;
using System.Data;
class Program
{
static void Main()
{
// DataTable 선언 (초기화는 필요 없음)
DataTable myTable;
// 메서드 호출 (DataTable은 out으로 전달됨)
PopulateDataTable(out myTable);
// 메서드에서 생성한 DataTable을 바로 사용 가능
foreach (DataRow row in myTable.Rows)
{
Console.WriteLine($"{row["ID"]}, {row["Name"]}");
}
}
static void PopulateDataTable(out DataTable table)
{
// 반드시 table에 값을 할당해야 함
table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(1, "Alice");
table.Rows.Add(2, "Bob");
}
}
결과
1, Alice
2, Bob
out 매개변수는 반환값과 함께 사용할 수도 있습니다. 예를 들어, 메서드가 성공 여부를 반환하고, DataTable은 out을 통해 반환하는 경우
using System;
using System.Data;
class Program
{
static void Main()
{
if (TryGetDataTable(out DataTable table))
{
foreach (DataRow row in table.Rows)
{
Console.WriteLine($"{row["ID"]}, {row["Name"]}");
}
}
else
{
Console.WriteLine("DataTable 생성 실패!");
}
}
static bool TryGetDataTable(out DataTable table)
{
try
{
// DataTable 생성
table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(1, "Alice");
table.Rows.Add(2, "Bob");
return true; // 성공
}
catch
{
table = null; // 실패 시 null 반환
return false; // 실패
}
}
}
out 키워드를 사용하면 반환값을 따로 사용하지 않아도, 메서드 내부에서 변경한 데이터를 호출한 쪽에서 바로 사용할 수 있습니다. 따라서 반환값과 out을 적절히 조합하면 더 유연하게 메서드를 설계할 수 있습니다.
이를 활용하여 DB에서 데이터 조회 결과를 가져올때 사용 해볼 수 있겠습니다.