Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

승쨩개발공부

[C#] 제네릭(Generic) 본문

C#

[C#] 제네릭(Generic)

Unknowns 2024. 4. 1. 02:09

재네릭은 자료형을 변수처럼 사용이 가능해진다

사용법은 함수의식별자의 <사용하고싶은 자료형> 을 넣어주면 된다.

재네릭을 사용함으로써 오버로딩된 int와 string을 인자로 받는 함수들을 단축시킬수있음

가변형 자료형으로 바뀌기떄문.

C#에서는 함수를 사용할떄 함수명 뒤에 <>가 붙어있는 함수는 재네릭 함수라고 판단하면된다.

 

인자를 여러 개 받을수도 있다.

클래스로도 사용이 가능한데 나는 Inven클래스를 여러개(CahsInven,GameInven) 만들고싶지않고

제네릭으로 받은 Gameitem이나 CashItem클래스를 배열로 만들고싶고 객체를 따로 관리하고싶다.

 

이런식으로 객체를 만들어 재네릭을 유동적으로 사용이가능하다.

 

 

 

제네릭은 C++ 템플릿과 매우 흡사한대

차이가 좀 많다

 

C# 제네릭은 매개 변수가 있는 형식에 대한 더 간단한 접근 방식으로, C++ 템플릿의 복잡함이 없다. 또한, C#은 C++ 템플릿에서 제공하는 기능 중 일부를 제공하지 않는다.

 

C++ 은 컴파일이 1번 일어나고, C# 제네릭은 컴파일이 2번 일어난다.

C++ 템플릿은 사용하지 않으면 컴파일하지 않는다. 하지만, C# 제네릭은 사용하지 않더라도 그에 관련된 정보를 저장하기 위한 메타데이터가 생성된다.

마이크로 소프트에서 보여준 차이점 중, C++ 템플릿에서는 가능하지만 C# 제네릭에서는 불가능한 기능들이 있다.

C#에서는 template C<int i> {} 같은 비형식 템플릿 매개 변수를 허용하지 않는다.

C#은 명시적 특수화 즉, 특정 형식에 대한 템플릿의 사용자 지정 구현을 지원하지 않는다.

C#은 부분 특수화 즉, 형식 인수의 하위 집합에 대한 사용자 지정 구현을 지원하지 않는다.

C#에서는 형식 매개 변수를 제네릭 형식에 대한 기본 클래스로 사용할 수 없다.

C#에서는 형식 매개 변수가 기본 형식을 사용할 수 없다.

C#에서 제네릭 형식 매개 변수 자체는 제네릭이 될 수 없지만 생성된 형식은 제네릭으로 사용할 수 있다. C++에서는 템플릿 매개 변수를 허용한다.

위와 같이 차이가 나는 이유는 첫 번째 이유와 연관이 있다.

C++ 템플릿의 경우, 한 번의 컴파일로 최종 결과물이 나오기 때문에 현재 컴파일하는 시점에 해당 코드가 유효한 지 모두 검증을 할 수 있다.

하지만 제너릭의 경우에는 IL 혹은 ByteCode로 컴파일 되더라도 최종이 아니며, 이를 이용하여 다른 결과물을 만들어 낼 수도 있다. 때문에 해당 제네릭이 어떻게 사용될 지 첫번째 컴파일에서 결정할 수 없다.

 

 

 

 

'C#' 카테고리의 다른 글

[C#] Collection 자료구조 정리  (0) 2024.05.10
[c#] 리스트(List)  (0) 2024.04.03
[C#] 인터페이스(Interface)  (0) 2024.03.29
[C#] 파티알(Partial)  (0) 2024.03.27
[C#] C++ C# 헷갈리는 차이  (0) 2024.03.27