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