본문 바로가기

개인공부/C#

[C#] 일반화(Generalization)

 

■ 일반화(Generalization) :

특수한 개념으로부터 공통된 개념을 찾아 묶는 것

 

 

 

■ 일반화 프로그래밍(Generic Programming) :

 - 데이터 형식(Data Type) 일반화를 이용한 프로그래밍

 - 한 가지 코드로 다양한 데이터 형식(Data Type) 활용

 

 

■ 일반화 메서드(Generic Method) :

 - 데이터 형식(Data Type)을 일반화한 메서드

 - 형식 매개변수 < >를 사용하여 작성

 

 

■ 일반화 클래스(Generic Class) :

 - 데이터 형식(Data Type)을 일반화한 클래스

 

■ 형식 매개 변수 제약 :

 - 특정 조건을 갖추도록 제한하는 기능

제약 설명
where T : struct T는 값 형식
where T : class T는 참조 형식
where T : new() T는 매개 변수가 없는 생성자가 있어야함
where T : 기반_클래스_이름 T는 명시된 클래스를 상속 받은 클래스
where T : 인터페이스_이름 T는 명시된 인터페이스를 상속 받은 클래스
where T : U T는 형식 매개 변수 U로부터 상속 받은 클래스

 

 

■ Example

using System;

namespace GenericExample
{
    class Generic<T>
    {
        public T[] array;
        public T data;

        public Generic(int size)
        {
            array = new T[size];
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            // Generic Method Example
            GenericExample.Program generic = new Program();
            generic.GenericMethod<int>(100);
            generic.GenericMethod<double>(3.14);
            generic.GenericMethod<string>("Memoo");
            Console.WriteLine();

            // Generic Class Example
            Generic<int> generic_int = new Generic<int>(3);
            generic_int.data = 999;
            for (int i = 0; i < generic_int.array.Length; i++)
                generic_int.array[i] = i*10;

            foreach(var item in generic_int.array)
                Console.WriteLine($"[Generic Class Example] : data = {generic_int.data}, item = {item}");

            Console.WriteLine();
            // 제약조건 Example
            generic.GenericWhereMethod<int>(1000);
            //generic.GenericWhereMethod<string>("memoo");    // string은 참조 형식(class)이기 때문에 Error 발생

        }

        public void GenericMethod<T>(T value)
        {
            Console.WriteLine($"[GenericMethod] : value = {value}, value.type = {value.GetType()}");
        }

        public void GenericWhereMethod <T>(T value) where T : struct
        {
            Console.WriteLine($"[GenericWhereMethod] : value = {value}, value.type = {value.GetType()}");
        }
    }
}

 

Example 결과

 

 

 

'개인공부 > C#' 카테고리의 다른 글

[C#] 대리자(Delegate)  (0) 2022.10.13
[C#] 예외(Exception)  (0) 2022.10.07
[C#] 인덱서(Indexer), IEnumerable, IEnumerator  (0) 2022.09.26
[C#] 컬렉션(Collection)  (0) 2022.09.23
[C#] 배열(Array)  (0) 2022.09.22