[Effective C#] Chapter 3: 제네릭


Effective C# Chapter 3 제네릭 개요

제네릭

타입을 매개변수로 받는 것. (List)

닫힌 제네릭 타입

구체적인 타입이 정해진 제네릭 (List)

열린 제네릭 타입

일부의 타입 매개변수만 구체적인 타입이 정해진 제네릭 (List)

머신 코드 공유 (참조 타입 vs 값 타입)

참조 타입을 사용하는 제네릭들은 같은 머신 코드를 공유한다.

List<string> stringList = new List<string>();
List<Stream> OpenFiles = new List<Stream>();
List<MyClassType> anotherList = new List<MyClassType>();

위의 코드들은 모두 같은 머신 코드를 공유한다.

값 타입을 사용하는 제네릭들은 서로 다른 머신 코드를 생성한다.

List<double> doubleList = new List<double>();
List<int> markers = new List<int>();
List<MyStruct> values = new List<MyStruct>();

위의 코드들은 각기 다른 머신 코드를 사용한다.

타입별로 다른 코드가 생성되면 런타임에 메모리 풋프린트가 커진다.

그러나 박싱 & 언박싱을 피할 수 있어서 결국 코드와 데이터 크기가 줄어든다.

또한 컴파일러가 타입 안정성을 보장해주므로 코드의 길이가 짧아진다.

Reference

댓글남기기