[C#] out 키워드란 with DataTable

동키·2024년 12월 16일

C#

목록 보기
5/12

C#에서 out 키워드는 메서드 매개변수로 사용될 때, 해당 매개변수가 출력 전용임을 나타냅니다. 즉, 메서드 내부에서 값을 설정하고, 호출한 쪽에서 해당 값을 사용할 수 있도록 보장합니다.

out DataTable처럼 out이 DataTable 앞에 붙는 경우, 메서드가 반환할 DataTable 객체를 호출하는 쪽에서 받을 수 있습니다.

주요 특징

1. 값을 초기화하지 않아도 됨

  • out 매개변수는 메서드에 전달되기 전에 초기화될 필요가 없습니다.
  • 대신, 메서드 내부에서 반드시 값을 할당해야 합니다.

2. 값을 반환하는 추가적인 방법

  • 메서드에서 여러 값을 반환할 때 유용합니다. out을 사용하면 return 값 외에 추가로 값을 반환할 수 있습니다.

3. 참조형 타입에도 사용 가능

  • DataTable과 같은 참조형 타입도 out으로 전달할 수 있습니다.
  • 메서드 내부에서 해당 참조형 객체를 생성하거나 변경하여 호출한 쪽에 전달할 수 있습니다.

동작 방식

  • 메서드가 호출될 때, 호출하는 쪽에서는 out 매개변수로 사용할 변수를 선언만 하면 됩니다.
  • 메서드 내부에서는 반드시 DataTable을 생성하거나 값을 할당해야 합니다.
  • 메서드를 호출한 쪽에서는 out 매개변수를 통해 변경된 값을 바로 사용할 수 있습니다.

예제

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에서 데이터 조회 결과를 가져올때 사용 해볼 수 있겠습니다.

profile
오키동키

0개의 댓글