반응형
아래 글은 C# 제네릭 클래스 만들기 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.
📃 참고자료
- C# 교과서(길벗 출판사) - 48단원 제네릭 클래스 만들기 642 ~ 661페이지
- 유튜브 채널 VisualAcademy [C# 교과서 마스터하기 48. 제네릭 클래스 만들기]
- 닷넷코리아 (https://www.dotnetkorea.com/)
https://www.youtube.com/watch?v=iArf2vVafM4
✳ 제네릭(Generic)
- 매개변수에 따른 형식
-> <T> - 무언가를 담아 놓을 컨테이너 역할
- Cup of T
- Cup<T> - 장점
- 타입 안정
- 성능
-> 박싱과 언박싱이 필요 없음
✳ 내장된 제네릭(Generic) 리스트 클래스
내장된 제네릭 클래스만으로도 충분
- System.Collections.Generic 네임스페이스
- ArrayList<T>
- List<T>
- Stack<T>
- Queue<T>
- Hashset<T>
- Dictionary<Tkey, Tvalue>
✳ 제네릭 형식(Generic Types)
- 제네릭 형식은 하나 이상의 형식 매개 변수를 설정할 수 있는 형식
- 형식 매개 변수(Type Parameter)는 넘어오는 형식에 따른 멤버의 형식으 결정됨
- 형식 매개 변수 T는 클래스 이름 뒤에 꺽쇠 괄호(angle brackets: <>)로 표시 함
- 아래 코드는 List 클래스를 나타내는데, T는 어떠한 형식에 대한 리스트를 나타내는지를 의미하는 표시
public class List<T>
✳ Action<T>와 Func<T, TResult>
- Action<T>
- 반환값이 없는 경우에 사용자 정의 대리자(custom Delegate)를 정의 하는 대신에 Action 대리자를 사용할 수 있음 - Func<T, TResult>
- 반환값이 필요한 경우에는 Func 대리자를 사용할 수 있음
- 마지막 파라미터는 항상 리턴값을 나타냄
✳ Generic Type 제약 조건
제약조건(constraint) | 설명 |
where T : struct | 반드시 값 타입(Value Type)이어야 함 |
where T : class | 반드시 참조 타입(Reference Type)이어야 함 |
where T : new() | 반드시 public 기본 생성자를 가져야 함 |
where T : <기본 클래스 이름> | 지정된 클래스로부터 상속되어야 함 |
where T : <인터페이스 이름> | 지정된 인터페이스를 구현해야만 함 |
where T : U | T 매개변수는 또 다른 U 형식 매개변수를 상속 받아야 함 |
✳ 예제코드
// GenericNote.cs
// 제네릭(Generics): 넘어온 타입(T)에 따라서 타입(T)이 결정됨(매개변수화된 타입)
using System;
namespace 제네릭
{
class Juice { }
class Coffee { }
// Cup of T, Cup<T>
class Cup<T>
{
public T Type { get; set; }
}
class 제네릭
{
static void Main(string[] args)
{
Cup<Juice> juice = new Cup<Juice>();
juice.Type = new Juice();
Console.WriteLine(juice.Type); // 제네릭.Juice
var coffee = new Cup<Coffee> { Type = new Coffee() };
Console.WriteLine(coffee.Type); // 제네릭.Coffee
}
}
}
반응형
'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글
닷넷 프레임워크와 닷넷 코어 차이 (0) | 2021.06.13 |
---|---|
C# 확장 메서드(Extension Method) 만들기 (0) | 2021.06.13 |
C# 개체(Object)와 개체지향프로그래밍 (0) | 2021.06.11 |
C# 특성(Attribute)과 리플렉션(Reflection) 맛보기 (0) | 2021.06.10 |
C# 메서드(Method) 오버라이드 (0) | 2021.06.09 |