C#

일반화와 제네릭

윤태영(Coding) 2023. 6. 17. 21:55

"일반화"는 주로 특정한 사례나 타입에 국한되지 않고, 보다 넓은 범위의 사례나 타입들을 처리할 수 있도록 코드를 작성하는 것을 의미한다. 이것은 C#에서는 제네릭을 사용해서 일반화라는 개념을 구현할 수 있다.

 

제네릭은 타입을 매개변수로 받아서, 하나의 코드로 여러 타입을 처리할 수 있게 해준다.

 

예를 들어 정수 리스트,문자열 리스트,사용자 정의 객체 리스트 등을 만들 때 각각의 리스트를 위한 별도의 클래스를 작성하는 대신, 제네릭을 사용해서 일반화된 리스트 클래스를 만들 수 있다.

< 제네릭을 사용하지 않은 경우 >

정수와 문자열을 저장하는 데 각각 다른 클래스를 만들어야 한다.

public class IntegerBox
{
    private int item;

    public void SetItem(int item)
    {
        this.item = item;
    }

    public int GetItem()
    {
        return item;
    }
}

public class StringBox
{
    private string item;

    public void SetItem(string item)
    {
        this.item = item;
    }

    public string GetItem()
    {
        return item;
    }
}

< 제네릭을 사용한 경우 >

제네릭을 사용하면 하나의 클래스로 여러 타입을 처리할 수 있다.

public class Box<T>
{
    private T item;

    public void SetItem(T item)
    {
        this.item = item;
    }

    public T GetItem()
    {
        return item;
    }
}

< 사용해보기 >

using System;

namespace GenericBoxExample
{
    class Program
    {
        // 제네릭 클래스 Box 정의
        public class Box<T>
        {
            private T item;

            public void SetItem(T item)
            {
                this.item = item;
            }

            public T GetItem()
            {
                return item;
            }
        }

        static void Main(string[] args)
        {
            // 정수 저장 BOX
            Box<int> intBox = new Box<int>();
            intBox.SetItem(123);
            Console.WriteLine($"정수 상자에 담긴 내용 => {intBox.GetItem()}");

            // 문자열을 저장하는 Box
            Box<string> stringBox = new Box<string>();
            stringBox.SetItem("태영");
            Console.WriteLine($"문자열 상자에 담긴 내용 => {stringBox.GetItem()} ");

            // 사용자 정의를 저장하는 BOx
            Box<Person> personBox = new Box<Person>();
           personBox.SetItem(new Person { Name = "윤태영", Age = 90 });
            Console.WriteLine($"저는 {personBox.GetItem().Name} 이며, {personBox.GetItem().Age}살 입니다. ");


        }

        //사용자 정의 클래스 Person
        public class Person
        {
            public string Name { get; set; }
            public int Age { get; set; }

        }
    }
}

 

 

Reference: https://www.tutorialsteacher.com/csharp/csharp-generics

 

C# Generics

C# Generics Generic means the general form, not specific. In C#, generic means not specific to a particular data type. C# allows you to define generic classes, interfaces, abstract classes, fields, methods, static methods, properties, events, delegates, an

www.tutorialsteacher.com