Generic



 Collection 을 사용하다 보면 많은 Boxing 작업이 발생하게 된다. 이런 문제점을 보완하기 위해 나온 기술이 Generic 이다.


List 컬렉션의 제네릭

List myList = new List();
myList.Add(textBox1);
myList.Add(textBox2);
myList.Add(textBox3);
myList.Add(textBox4);
myList.Add(textBox5);

myList[2].BackColor = Color.Red;

// 순환
List.Enumerator ie =  myList.GetEnumerator();
while (ie.MoveNext())
{
    ie.Current.BackColor = Color.Blue;
}

<> 안에 사용할 타입명을 명시해 준다.
myList[2] 처럼 인덱서로 접근할 때, 이 식의 리턴 값이 object 가 아니고 앞에서 명시한 타입(TextBox)이 리턴 된다. 따라서 Boxing 이 일어나지 않는다. 별도의 타입 변환도 필요 없다. GetEnumerator() 메소드의 리턴값 역시 List<TextBox> 가 되므로 별도의 Boxing 및 타입 변환이 필요 없다.


Dictionary 컬렉션의 제네릭

Dictionary myDic = new Dictionary();
myDic.Add("a", textBox1);
myDic.Add("b", textBox2);
myDic.Add("c", textBox3);
myDic.Add("d", textBox4);
myDic.Add("e", textBox5);

myDic["c"].BackColor = Color.Red;

Dictionary.Enumerator ie = myDic.GetEnumerator();

while(ie.MoveNext())
{
    ie.Current.Value.BackColor = Color.Yellow;
    ie.Current.Value.Text = ie.Current.Key;
}

기본적인 원리는 List 컬렉션과 비슷한다.


실행 전 및 실행 후







Posted by six605
,