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 |