WorkaHolic

Generic...지네릭...

2009. 3. 24. 16:43
반응형
[출처] http://www.cyworld.com/dandybum/2630903

.Net FameWork 2.0버전이 발표 되면서 나온 새로운 기능중 제네릭이라는 기능이 있습니다.

제네릭은 박싱/언박싱과 업/다운 캐스팅을 발생시키지 않기 때문에 메모리를 효율적으로 사용 할 수 있습니다.


우선 제네릭을 소개 하기 전에 박싱/언박싱을 알아 봐야 겠죠?

간단하게 말해 박싱(Boxing)은 값 타입->참조 타입 으로 변환 하는 것이고 언박싱(UnBoxing)은 참조 타입->값 타입으로 변환 하는 것을 말 합니다.

위와 같이 타입 변화로 인해 박싱/언박싱은 내부적으로 많은 리소스를 소비 합니다.


아래에 Boxing/UnBoxing과 제네릭의 차이점을 코드로 예를 들어 보았습니다.


Boxing_UnBoxing.cs

 using System.Collection;


 ArrayList boxing = new ArrayList();
            boxing.Add(100);
            boxing.Add(200);
            boxing.Add(300);

            foreach (object obj in boxing)
            {
                int unboxing = (int)obj;
                Console.WriteLine(unboxing);
            }

            Console.ReadLine();


Generic.cs

 using System.Collections.Generic;


 List<int> list = new List<int>();
            list .Add(100);
            list .Add(200);
            list .Add(300);

            foreach (int val in list)
            {
                Console.WriteLine(val);
            }

            Console.ReadLine();


위 두개의 소스를 보시면 아시겠지만, Boxing방식으로 짠 코드는 ArrayList클래스를 사용 하였지만 Generic은 List<T>를 사용 하였습니다. <T>부분에는 사용 하고 싶은 데이터 타입을 명시하면 됩니다.

그리고, Foreach코드를 보시면 Unboxing코드에서는 object 타입이었지만 int 타입으로 선언 되었습니다.


또한 형 변환을 할 필요가 없기 때문에 형변환 코드인 int unboxing = (int)obj;도 사라졌습니다.

반응형