Post

[C#] 재네릭 / out,ref 키워드

[C#] 재네릭 / out,ref 키워드

재네릭 / out,ref 키워드


재네릭

  • 제너릭은 클래스나 메서드를 일반화시켜 다양한 자료형에 대응할 수 있는 기능이다.
  • 제너릭을 사용하면 코드의 재사용성을 높일 수 있다.
  • C#에서는 <T> 형태의 키워드를 이용하여 제너릭을 선언한다.
  • 제너릭 클래스나 메서드에서 사용할 자료형은 선언 시점이 아닌 사용 시점에 결정된다.
  • 제너릭 클래스나 메서드를 사용할 때는 <T> 대신 구체적인 자료형 <int> 을 넣어준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
List<int> list = new List<int>();
list.Add(1); // int만 추가 가능

Console.WriteLine(list[0]); // 1

class Pair<T1, T2>
{
    public T1 First { get; set; }
    public T2 Second { get; set; }

    public Pair(T1 first, T2 second)
    {
        First = first;
        Second = second;
    }

    public void Display()
    {
        Console.WriteLine($"First: {First}, Second: {Second}");
    }
}

Pair<int, string> pair1 = new Pair<int, string>(1, "One");
pair1.Display(); //First: 1, Second: One

Pair<double, bool> pair2 = new Pair<double, bool>(3.14, true);
pair2.Display(); //First: 3.14, Second: True

out,ref 키워드

out, ref 키워드는 메서드에서 매개변수를 전달할 때 사용한다. 메서드에서 값을 반환하는 것이 아니라, 매개변수를 이용하여 값을 전달할 수 있다.

  1. out
    • 메서드에서 반환 값을 매개변수로 전달하는 경우에 사용
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
        // 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
      
  2. ref
    • 메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용. 즉 참조로 전달되며, 메서드에서 해당 변수의 값을 읽고 변경할 수 있게 해준다.
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
        // ref 키워드 사용 예시
        void Swap(ref int a, ref int b)
        {
            int temp = a;
            a = b;
            b = temp;
        }
      
        int x = 1, y = 2;
        Swap(ref x, ref y);
        Console.WriteLine($"{x}, {y}"); // 출력 결과: 2, 1
      

주의 사항

  1. 값의 변경 가능성: ref 매개변수를 사용하면 메서드 내에서 해당 변수의 값을 직접 변경할 수 있다. 이는 예기치 않은 동작을 초래할 수 있으므로 주의가 필요하다.
  2. 성능 이슈: ref 매개변수는 값에 대한 복사 없이 메서드 내에서 직접 접근할 수 있기 때문에 성능상 이점이 있다. 그러나 너무 많은 매개변수를 ref로 전달하면 코드의 가독성이 떨어지고 유지보수가 어려워질 수 있다. 적절한 상황에서 ref를 사용하는 것이 좋다.
  3. 변수 변경 여부 주의: out 매개변수는 메서드 내에서 반드시 값을 할당해야 한다. 따라서 out 매개변수를 전달할 때 해당 변수의 이전 값이 유지되지 않으므로 주의해야 한다.
This post is licensed under CC BY 4.0 by the author.