728x90
https://www.youtube.com/watch?v=G3Edvvp_YpA&list=PLVsNizTWUw7GN8wPRhclbKuQa9aI9Cj2V&index=12
📌 일반화 프로그래밍
◾ 일반화
- 특수한 개념으로부터 공통된 개념을 찾아묶는 것
◾ 일반화 프로그래밍
- 데이터 형식 일반화를 이용하는 프로그래밍 패러다임
- 한 가지 코드를 다양한 데이터 형식에 활용
◾ 일반화 메서드
- 데이터 형식을 일반화한 메서드
- 메서드 이름 뒤에 형식 매개 변수 ( <> ) 를 입력하여 작성
컴파일 단계에서 형식 매개 변수는 실제 형식으로 지환됨
void CopyArray<T> ( T[] source, Tp[ target )
{
...
}
int[] cource = { 1, 2, ... 5};
int[] target = new int[5];
CopyArray<int> (source, target);
◾ 일반화 클래스
- 데이터 형식을 일반화한 클래스
- 클래스 이름 뒤에 형식 매개 변수를 입력하여 작성
class Array_Generic<T>
{
private T[] Array;
...
public T GetElement(int index)
{ return array[index]; }
}
Array_Generic<int> intArr = new Array_Generic<int>();
Array_Genernic<double> dblArr = new Array_Generic<double>();
◾ 형식 매개변수 제약
- 형식 매개변수가 특정 조건을 갖추도록 강제하는 기능
//예제1. 형식 매개변수 T를 MyClass의 파생 클래스로 제약
class MyList<T> where T : MyClass
{
...
}
//예제2. 형식 매개변수 T를 값 형식으로 제약
void CopyArray<T> (T[] source , T[] target) where T : struct
{
for (int i=0; i < source.Length; i++)
target[i] = source[i];
}
◾ where절과 함꼐 사용할 수 있는 제약 조건
제약설명
where T : struct | T는 값 형식이어야 함 |
where T : class | T는 참조형식이어야 함 |
where T : new() | T는 반드시 매개변수가 없는 생성자가 있어야 함 |
*where T : 기반클래스이름** | T는 명시한 기반 클래스의 파생 클래스여햐 함 |
where T : 인터페이스이름 | T는 명시한 인터페이스를 반드시 구현해야 함. 여러개의 인터페이스 명시도 가능 |
where T: U | T는 또 다른 형식 매개변수 U로부터 상속받은 클래스여야 함 |
📌 일반화 컬렉션
- 컬렉션은 object 형식 기반
- 컬렉션의 요소에 접근할 때마다 발생하는 박싱 / 언박싱 → 성능 저하
- 일반화 컬렉션은 형식매개변수를 이용하여 버그와 성능저하를 줄임
→ 컴파일 단계에서 형식매개변수가 특정 형식으로 치환 되기 때문 - 일반화 클래스는 System.Collections.Genereic 네임스페이스에 위치
◾ List < T >
◾ Queue < T >
◾ Stack < T >
◾ Dictionary < T >
Dictionary <string, string > dic = new Dictionary<string, string>();
// < key , value > 순
728x90
'C# > 이것이 C#이다' 카테고리의 다른 글
[C# 기초강의] Ch 13. 대리자와 이벤트 (0) | 2023.08.10 |
---|---|
[C# 기초강의] Ch 12. 예외 처리하기 (0) | 2023.08.10 |
[C# 기초강의] Ch 10. 배열과 컬렉션 그리고 인덱서 (0) | 2023.08.10 |
[C# 기초강의] Ch 09. 프로퍼티 (0) | 2023.08.10 |
[C# 기초강의] Ch 08. 인터페이스와 추상클래스 (0) | 2023.08.10 |