제네릭(generic)이라고 아시나요?
<> 안에 들어가는 것은 타입 이름이죠.
위에 나온 List 클래스를 MSDN 을 통해 살펴보면,
List<T> 로 되어 있는 것을 알 수 있습니다.
참, 리스트는 자료 구조에서 사용되는 컬렉션의 한 종류입니다.
위에서, List<Vector2> 라고 했으면,
Vector2 타입의 개체들을 포함하는 리스트 컬렉션이라고 보면 되지요.
마찬가지로, List<int> 라고 했으면,
int 타입의 개체들을 포함하는 리스트 컬렉션이라고 보면 되지요.
한 번더 연습해 볼까요?
List<string> 라고 했으면,
string 타입의 개체들을 포함하는 리스트 컬렉션이라고 보면 됩니다.
List<Vector2> 타입이나, List<int> 타입, List<string> 타입은
각기 다른 타입입니다.
예를 들면, Vector2 타입이나 int 타입, string 타입이 저마다 다르듯이요.
그렇다면, 왜 제네릭을 구현했을까요?
바로, 중복되는 구현을 간결화하기 위해서랍니다.
int 타입의 데이터들을 리스트 방식으로 관리하는 데이터 구조가 필요해서
intList 라는 클래스를 만들었다고 해 봅시다.
이 클래스에는 int 타입의 데이터를 추가, 삭제, 변경, 조회 등의 작업을 수행하는 메소드를
포함해야 합니다.
이번에는,string 타입의 데이터들을 리스트 방식으로 관리하는 데이터 구조가 필요해서 stringList 라는 클래스를 만들었다고 해 봅시다.
이 클래스에는 string 타입의 데이터를 추가, 삭제, 변경, 조회 등의 작업을 수행하는 메소드를 포함해야 합니다.
하지만, 이들 메소드의 구현사항은 int 타입의 데이터를 추가, 삭제, 변경, 조회 등의 작업을 수행하는 메소드들의 구현사항과 거의 비슷할 것입니다.
마찬가지로, Vector2 타입의 데이터들을 리스트 방식으로 관리하는 데이터 구조가 필요해서
Vector2List 라는 클래스를 만들었다고 해 봅시다.
이 클래스에는 Vector2 타입의 데이터를 추가, 삭제, 변경, 조회 등의 작업을 수행하는 메소드를
포함해야 합니다. 하지만, 이들 메소드의 구현사항은
int 타입과 string 타입의 데이터를 추가, 삭제, 변경, 조회 등의 작업을 수행하는 메소드들의 구현사항과
거의 비슷할 것입니다.
이들 사이의 구현사항에는 변동사항이 거의 없으며, 다만 데이터들의 타입만 다를 뿐입니다.
이렇기 때문에, List<T> 라는 제네릭 클래스를 만들게 된 것이지요.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleTest
{
public struct Addr
{
public string Name;
public int Age;
}
class Program
{
public static void Main(string[] args)
{
List lst = new List();
List addr = new List();
lst.Add("C#");
lst.Add("ASP.NET");
lst.Insert(0, "HTML");
for (int i = 0; i < lst.Count; i++)
{
Console.WriteLine(i+"==>" + lst[i]);
}
Addr a1 = new Addr();
a1.Age = 21;
a1.Name = "홍길동21";
addr.Add(a1);
a1.Age = 22;
a1.Name = "홍길동22";
addr.Add(a1);
for (int i = 0; i < addr.Count; i++)
{
Console.WriteLine("{0} : {1}", addr[i].Name, addr[i].Age);
}
}
}
}