21 일반화 프로그래밍

김민영·2023년 1월 31일
0

C# 기초 프로그래밍

목록 보기
15/18

🥨 일반화 프로그래밍

1. 의미

  • 타입에 무관하게 알고리즘을 작성하는 프로그래밍 기법
  • 코드의 재사용성을 극대화할 수 있습니다.

2. 형식

  • 알고리즘에 사용되는 실제 데이터의 타입은 매개변수를 통해 전달합니다.
  • 타입이 매개변수화 되었다고 합니다.
  • 예시
static class Helper
{
	public static void Swap<T>(ref T lhs, ref T rhs)
    {
    	T temp = lhs;
        lhs = rhs;
        rhs = temp;
    }
}

🥨 제네릭

: C#이 제공하는 일반화 프로그래밍 방식

1. T

1) 타입 매개변수 (파라미터)이자 위치지정자(Placeholder)

  • T에 타입을 담아 전달합니다.
  • 어떤 타입이 전달될지는 런타임에 결정됩니다.

2) 명명법

  • 일반적으로 T라 명명합니다.
  • 더 구체적인 이름이 필요할 때는 앞에 T를 붙인 후 이름을 작성합니다. (ex. TSession)

3) 클래스, 인터페이스, 대리자, 메소드만 타입 파라미터를 받을 수 있습니다.

4) 사용 시 실제 타입을 명시합니다.

  • 컴파일러가 판단할 수 있는 경우라면 굳이 적지 않아도 됩니다.
static class Helper
{
	public static void Swap<T>(ref T lhs, ref T rhs)
    {
    	T temp = lhs;
        lhs = rhs;
        rhs = temp;
    }
}

class Program
{
	static void Main()
    {
    	int a = 10, b = 20;
        Helper.Swap<int>(ref a, ref b);
        Helper.Swap(ref a, ref b);  // 모두 가능
    }
}

2. 제약

1) T에는 어떤 타입이라도 들어갈 수 있지만, 아무 타입이나 전달되지 못하도록 제약을 걸수도 있습니다.

2) where T:new() 의 예제

  • 매개변수로 넘겨준 클래스의 기본 생성자를 호출하는 메소드를 생성했습니다.
  • 이 메소드는 해당 클래스의 기본 생성자가 존재하지 않는 경우 오류가 발생할 것입니다.
  • 따라서 where T: new() 를 통해 기본 생성자가 있는 타입만 T에 전달될 수 있도록 제약을 걸었습니다.

  • 기본생성자가 없는 클래스입니다.
  • 매개변수가 하나 있는 생성자를 정의했기에, 기본 생성자가 자동으로 생성되지 않았습니다.

  • 기본 생성자가 없는 타입을 T를 통해 전달하려 했기 때문에 컴파일 오류가 발생합니다.

0개의 댓글