.Net FameWork 2.0버전이 발표 되면서 나온 새로운 기능중 제네릭이라는 기능이 있습니다.
제네릭은 박싱/언박싱과 업/다운 캐스팅을 발생시키지 않기 때문에 메모리를 효율적으로 사용 할 수 있습니다.
우선 제네릭을 소개 하기 전에 박싱/언박싱을 알아 봐야 겠죠?
간단하게 말해 박싱(Boxing)은 값 타입->참조 타입 으로 변환 하는 것이고 언박싱(UnBoxing)은 참조 타입->값 타입으로 변환 하는 것을 말 합니다.
위와 같이 타입 변화로 인해 박싱/언박싱은 내부적으로 많은 리소스를 소비 합니다.
아래에 Boxing/UnBoxing과 제네릭의 차이점을 코드로 예를 들어 보았습니다.
Boxing_UnBoxing.cs
using System.Collection; ArrayList boxing = new ArrayList(); foreach (object obj in boxing) Console.ReadLine(); |
Generic.cs
using System.Collections.Generic; List<int> list = new List<int>(); foreach (int val in list) Console.ReadLine(); |
위 두개의 소스를 보시면 아시겠지만, Boxing방식으로 짠 코드는 ArrayList클래스를 사용 하였지만 Generic은 List<T>를 사용 하였습니다. <T>부분에는 사용 하고 싶은 데이터 타입을 명시하면 됩니다.
그리고, Foreach코드를 보시면 Unboxing코드에서는 object 타입이었지만 int 타입으로 선언 되었습니다.
또한 형 변환을 할 필요가 없기 때문에 형변환 코드인 int unboxing = (int)obj;도 사라졌습니다.