3_c#/C#문법

C# 일반화 프로그래밍

Mi:sAng 2024. 11. 20. 17:47

1. 일반화 프로그래밍의 개념

  - 일반화 : 특수한 개념으로부터 공통된 개념을 찾아 묶는 것

 

  *일반화 프로그래밍

    - 데이터 형식 일반화를 이용하는 프로그래밍 방식

    - 한 가지 코드를 다양한 데이터 형식에 활용한다.

 

2. 일반화 메소드

    - 데이터 형식을 일반화한 메소드

    - 메소드 이름 뒤에 형식 매개 변수(T)를 입력하여 작성한다.

       (형식 매개변수가 꼭 T일 필요는 없다)

    - 아래 코드의 int 부분을 범용적으로 만든 것이다.

 

 

     - 이 일반화 메소드를 호출하는 방법

 int[] a ={1,2,3};
 int[] b ={1,2,3};
 Copy<int> (a,b);

 

3. 일반화 클래스

  - 데이터 형식을 일반화한 클래스

  - 클래스 이름 뒤에 형식 매개 변수를 입력하여 작성

 

  *일반화 클래스의 객체 생성

Array_Generic<int> intArr = new Array_Generic<int> ();
Array_Generic<double> intArr = new Array_Generic<double> ();

 

3. 형식 매개 변수의 제약

  - 형식 매개 변수가 특정 조건을 갖추도록 강제하는 기능

  - 문법 : where 형식매개변수 : 제약조건

// 예시1 : 형식 매개변수 T를 MyClass의 파생 클래스로 제약
class MyList<T> where T: MyClass
{
	//
}

// 예시2 : 형식 매개 변수 T를 값 형식으로 제약
void CopyArray<T> (T[] source, T[] target) where T: struct
{
	//
}

 

 

4. 일반화 컬렉션

  -컬렉션은 object 형식 기반 (Object 클래스는 모든 타입의 상위 클래스이다)

  -컬렉션의 요소에 접근할 때마다 발생하는 박싱/언박싱은 성능의 저하로 이어진다.

    (박싱 : 값 형식의 데이터를 참조 형식으로 변환하는 것)

    (언박싱 : 참조 형식의 데이터를 값 형식으로 변환하는 것)

  -일반화 컬렉셜은 형식매개변수를 이용하여 버그와 성능저하를 줄인다.

    (컴파일 단계에서 형식매개변수가 특정 형식으로 치환되기 때문이다)

  -일반화 컬렉션은 System.Collections.Generic 네임스페이스에 위치한다.

  - List<T>, Queue<T>, Stack<T>, Dictionary<TKey, TValue> 

Queue<int> queue= new Queue<int>();
List<int> list= new List<int>();
Stack<int> stack = new Stack<int>();
Dictionaty <string, string> dic = new Dictionary<string, string>();

 

 

'3_c# > C#문법' 카테고리의 다른 글

C# 람다식  (0) 2024.11.20
C# Delegate: 대리자  (1) 2024.11.20
C# 배열, 컬렉션, 인덱서  (0) 2024.11.20
C# 프로퍼티  (1) 2024.11.20
C# 메소드 오버로딩 / 오버라이딩  (0) 2024.10.02