[C#] 일반화 프로그래밍 (Generic 형식)

Learning 

When: 1학년 6월 7일

 

How:

람다식을 공부하려 했는데, 책에 람다식 전 챕터로 있길래 이것을 먼저 공부하지 않으면 람다식을 공부하다 막힐 수도 있을 것 같아 일단 간단하게 공부해 보았습니다.

 

Understanding:

  • 일반화 프로그래밍이란? : 배열을 출력하는 메서드가 있다고 할 때, 매개변수로 받을 배열의 타입은 하나일 수도, 여러 개일 수도 있습니다. 그런데 만약 20가지 타입을 출력하는 메서드를 만들고 싶을 때, 일반화 프로그래밍을 모른다면 오버로딩으로 같은 내용의 메서드를 20개나 써야 하는 대참사가 일어납니다. 이것은 절대 희귀한 경우가 아니기에 공부를 조금 해보았다면 C#에서 대책을 마련했을 것이라는 생각이 들 것입니다. 그 대책이 일반화 프로그래밍이고, 먼저 코드로 설명을 해보자면
            int[] intArray = { 1, 2, 3, 4, 5 };

            void PrintArray<T>(T[] a)
            {
                for (int i = 0; i < a.Length; i++)
                {
                    Console.Write(a[i] + " ");
                }
            }

            PrintArray<int>(intArray);

여기서 <> 말고는 원래 알고 있는 C#과 별반 다르지 않습니다. 일단 맨 앞에 <T>와 옆에 있는 T[]의 T는 같은 의미를 가집니다.

지금까지의 내용이 이해가 되었다면 직감적으로 T가 여러 가지 타입을 전부 담을 수 있는 타입을 담는 변수 같은 건가? 라는 생각이 들 수 있습니다. 그 말이 맞고, 이것을 이용하여 여러 타입을 전부 수용할 수 있는 메서드를 만들 수 있는 것입니다.

예시 코드에서 string 형식의 배열을 출력하고 싶다면
PrintArray<string>(stringArray); 이런 식으로 사용할 수 있습니다. 그리고

일반화 프로그래밍은 메서드 말고도 클래스나 컬렉션에도 사용할 수 있습니다.

 

Result: 일반화 프로그래밍은 같은 내용의 메서드, 클래스, 컬렉션 등을 타입이 달라서 여러 개를 만드는 수고스러운 일을 줄여주는 프로그래밍 방식입니다.

'C#' 카테고리의 다른 글

[C#] try~catch 문  (0) 2025.06.12
[C#] 딕셔너리(Dictionary)  (0) 2025.06.08
[C#] Null값 받을 수 있는 변수, nullable 변수  (0) 2025.05.31
[C#] 인터페이스와 추상 클래스  (0) 2025.05.15
[C#] out, ref 키워드  (0) 2025.05.14