Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 제네릭 메서드란? 개념부터 Swap 예제까지 한 번에 이해하기

C# 제네릭 메서드란 무엇인가?

제네릭(Generics)은 하나의 클래스나 메서드가 특정 데이터 타입에 얽매이지 않고 다양한 타입과 함께 동작하도록 작성할 수 있게 해주는 C#의 핵심 기능입니다. 제네릭을 활용하면 코드 중복을 줄이고, 컴파일 시점에 타입 안정성을 확보하며, 박싱(boxing)으로 인한 성능 저하도 피할 수 있습니다.

제네릭 메서드는 메서드 이름 뒤에 꺾쇠 괄호(<>)로 감싼 타입 매개변수(type parameter)를 선언하여 정의합니다. 아래는 두 변수의 값을 서로 교환하는 제네릭 Swap 메서드의 기본 형태입니다.

static void Swap<T>(ref T lhs, ref T rhs) { }

정의된 제네릭 메서드를 호출할 때는 사용할 구체적인 타입을 명시적으로 지정할 수도 있고, 인자로 전달되는 값의 타입을 컴파일러가 자동으로 추론하게 할 수도 있습니다.

Swap<int>(ref a, ref b);

C# 제네릭 메서드 작성 예제

다음 예제는 하나의 제네릭 Swap<T> 메서드를 int형char형 변수에 모두 적용하는 모습을 보여줍니다. 동일한 메서드가 여러 타입에서 문제없이 동작한다는 점이 제네릭의 가장 큰 장점입니다.

using System;
using System.Collections.Generic;

namespace Demo {
  class Program {
    static void Swap<T>(ref T lhs, ref T rhs) {
      T temp;
      temp = lhs;
      lhs = rhs;
      rhs = temp;
    }

    static void Main(string[] args) {
      int a, b;
      char c, d;
      a = 45;
      b = 60;
      c = 'K';
      d = 'P';
      Console.WriteLine("Int values before calling swap:");
      Console.WriteLine("a = {0}, b = {1}", a, b);
      Console.WriteLine("Char values before calling swap:");
      Console.WriteLine("c = {0}, d = {1}", c, d);
      Swap(ref a, ref b);
      Swap(ref c, ref d);
      Console.WriteLine("Int values after calling swap:");
      Console.WriteLine("a = {0}, b = {1}", a, b);
      Console.WriteLine("Char values after calling swap:");
      Console.WriteLine("c = {0}, d = {1}", c, d);
      Console.ReadKey();
    }
  }
}

실행 결과

Int values before calling swap:
a = 45, b = 60
Char values before calling swap:
c = K, d = P
Int values after calling swap:
a = 60, b = 45
Char values after calling swap:
c = P, d = K

제네릭 메서드의 주요 장점

  • 코드 재사용성: 타입별로 메서드를 중복 작성할 필요가 없어 유지보수가 쉬워집니다.
  • 타입 안정성: 잘못된 타입이 전달되면 컴파일 단계에서 오류를 바로 확인할 수 있습니다.
  • 성능 향상: object로의 변환 과정에서 발생하는 박싱/언박싱 비용을 줄일 수 있습니다.