-
일반화 클래스(제네릭 클래스)C# 예제 공부일기 2020. 7. 13. 19:10
일반화(제네릭) 클래스는 멤버의 형을 <T>로 표시한 클래스이다. 객체 생성 시에 그 멤버의 형이 결정된다.
class MyClass<T> { public T x; public T DoSomething(T p) {} }
클래스의 선언 형식은 위와 같다.
using System; namespace CPractice { class MyClass<T> { private T[] arr; private int count = 0; public MyClass(int length) { arr = new T[length]; count = length; } public void Insert(params T[] args) { for (int i = 0; i < args.Length; i++) arr[i] = args[i]; } public void Print() { foreach (T i in arr) Console.Write(i + " "); Console.WriteLine(); } public T AddAll() { T sum = default(T); foreach (T item in arr) sum = sum + (dynamic)item; return sum; } } class Program { static void Main(string[] args) { MyClass<int> a = new MyClass<int>(10); MyClass<string> s = new MyClass<string>(5); a.Insert(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); s.Insert("Tiger", "Lion", "Zebra", "Monkey", "Cow"); a.Print(); s.Print(); Console.WriteLine("a.AddAll() : " + a.AddAll()); Console.WriteLine("s.AddAll() : " + s.AddAll()); } } }
''4
차근차근 정리해 보자면 클래스 부분부터 보자면 클래스 이름 뒤에 <T> 가 붙은 것을 볼 수 있다. 그리고 메인함수에서 보면 <T> 의 자리에 자료형이 적혀있는 것을 볼 수 있다. 일반화 클래스 하나를 두고 여러개의 자료형을 사용한 것이다.
new 객채생성 부분에서 <int> 로 선언했다면 클래스 내의 모든 T는 int로 인식하고 동작한다. 생성자 부분에서는 단지 클래스 내부의 배열의 크기를 결정한다.
Insert부분에서는 메소드의 매개변수가 배열의 형태를 띄고 메소드 안으로 기어들어가서 각각의 똑같은 인덱스에 똑같은 값을 할당한다. 출력 부분은 foreach로 처음부터 끝까지 긁어서 출력하고, AddAll부분에서는 정수형에서의 + 기호는 덧셈을 의미하므로 싹다 더해지고, string 에서의 + 문자열의 이어붙이기를 의미하므로 다 이어 붙여서 출력된다.
'C# 예제 공부일기' 카테고리의 다른 글
Stack<T>의 구현 (0) 2020.07.14 LinkedList 클래스를 활용한 프로그램 (0) 2020.07.13 LinkedList의 구현 (0) 2020.07.13 dynamic 형을 사용하는 일반화 프로그램 (0) 2020.07.13 일반화 메소드 (제네릭 메소드) (0) 2020.07.13