C# 일반화 프로그래밍 1
본문 바로가기
  • 게임 개발자가 되고싶은 구구
게임 개발 공부/C#

C# 일반화 프로그래밍 1

by gugu99 2021. 12. 19.
반응형

안녕하세요

 

게임개발자가 되기위해 공부하고있는 구구입니다.

오늘은 C#의 일반화 프로그래밍에 대해 알아보도록 하겠습니다.


  • 일반화(Generic)

- 클래스, 함수 일반화 가능

- <T>키워드

- 데이터 형식을 일반화 하여 프로그래밍함.(자료형을 미리 정해두지 않음)

 

 

  • 일반화의 특징

- Boxingm Unboxing을 줄일 수 있음.(프로그램의 성능개선)

- 불필요한 오버로딩을 줄일 수 있음.

- T에는 어떠한 데이터 자료형도 올 수 있음.

 

일반화 x -> 파라미터가 float형인 함수와 int형인 함수를 서로 따로 만들어야 했음.

 

  • 함수의 일반화

C#-generic-Boxing-Unboxing-T-&amp;amp;amp;amp;lt;T&amp;amp;amp;amp;gt;-클래스-함수-일반화

제너릭 함수를 쓰기위 해선 <T>라는 키워드를 사용해야합니다.

 

static void GenericPrint<T>(T data)

여기서 GenericPrint는 함수명이고 <T>는 제너릭을 사용한다는 표시이며 T는 어떠한 자료형이든 올 수 있고 data는 말그대로 데이터(데이터명)입니다.

 

아래에서 Generic함수를 쓰는 부분이 나오는데 a, b, c는 전부 자료형이 다릅니다.

하지만 이러한 자료형이 다른 변수들을 같은 함수에서 출력하는데 object라는 자료형을 사용하지 않고 출력을 하다 보니 Boxing과 Unboxing을 줄이고 이는 프로그램 성능의 개선으로 이어질 수 있습니다.

 

 

C#-generic-Boxing-Unboxing-T-&amp;amp;amp;amp;lt;T&amp;amp;amp;amp;gt;-클래스-함수-일반화


  • 클래스의 일반화

- 제너릭 함수를 사용할때 처럼 클래스명 옆에 <T> 키워드를 추가하면 사용이 가능.

- 이 T로 인해서 멤버 변수 및 멤버 함수의 자료형을 써야할 때 T로 대체할 수 있음.

  (꼭 자료형을 T라 써야되는건 아님.)

- 메인함수에서 객체 생성시 <T>키워드안에 사용할 자료형을 언급해 줘야함.

 

 

C#-클래스-일반화-generic-&lt;T&gt;-class
C#-클래스-일반화-generic-&lt;T&gt;-class


  • dynamic 키워드

- object, var

- 런타임에 변수 형식 변경이 가능

- 일반화 함수에서 변수타입 대응가능

- 특정 데이터에 종속되지 않고 다양한 타입으로 자료형을 변환해서 사용가능

 

  • default 키워드

- value type : 0 초기화

- reference type : null 초기화

 

 

C#-클래스-일반화-generic-&lt;T&gt;-class-dynamic-default

 

AddArray<T>와 SumArray<T>는 둘다 배열을 받아서 배열안의 수를 더해주는 함수입니다.

AddArray<T>의 경우 temp의 자료형을 dynamic으로 하였고 초기화는 default로 하였습니다.

SumArray<T>의 경우 temp의 자료형을 T로 받았고 초기화는 똑같이 default로 하였습니다.

 

dynamic은 산술 연산자의 사용이 가능하기에 for문안에서 바로 사용하지만

제너릭은 산술연산자의 사용이 불가하기 때문에 dynamic으로 형변환 뒤 산술연산자를 사용하는 모습이 보입니다.

 

C#-클래스-일반화-generic-&lt;T&gt;-class-dynamic-default

 

 

  • where 키워드(한정자)

where T : struct //값형식으로 제한

where T : class //참조형식으로 제한

- 매개변수 제한 기능

 

※Where의 종류에 대해서는 아래의 마이크로소프트 첨부자료의 주소를 남깁니다.

https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters

 

 

C#-클래스-일반화-generic-&lt;T&gt;-class-where
C#-클래스-일반화-generic-&lt;T&gt;-class-where

where T : struct 는 값형식의 데이터만 다뤄야한다. ex)int, float

where T : class 는 참조형의 데이터만 다뤄야한다. ex)배열, 컬렉션

where T : II 는 interface로 T의 자료형을 제한한다.

인터페이스는 객체생성이 불가능합니다. 하지만 자식클래스를 이용하면 객체를 생성할 수 있습니다.

ex) cc._interface = new DD();

 

C#-클래스-일반화-generic-&lt;T&gt;-class-where

 

 

 

 

 

 

 

오늘은 여기까지 하도록 하겠습니다.

 

반응형

'게임 개발 공부 > C#' 카테고리의 다른 글

C# 예외 처리  (0) 2021.12.21
C# 일반화 프로그래밍 2  (0) 2021.12.20
C# 컬렉션 2  (0) 2021.12.15
C# 컬렉션 1  (0) 2021.12.14
C# 클래스 6  (0) 2021.12.13

댓글