Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 프로퍼티
- 배열
- 인터페이스 예제
- 일반화 클래스
- 접근 한정자
- 무명형식
- is
- 클래스
- 프로퍼티와 생성자
- 클래스 연습문제
- 메소드숨기기
- System.Array
- 인터페이스의 프로퍼티
- 튜플
- 오버라이딩
- 이것이C#이다
- 인덱서
- 배열초기화
- base()
- c#
- 형식변환
- as
- 중첩클래스
- this 키워드
- 추상 프로퍼티
- 인터페이스 상속
- 컬렉션 초기화
- 분할 클래스
- 가변배열
- 자동구현프로퍼티
Archives
- Today
- Total
제로의영역
11.3 일반화 클래스 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
1. 정의: 데이터 형식을 일반화한 클래스
2. 목적: 특수한 개념으로부터 공통된 개념을 찾아 묶어 프로그래밍을 간략화.
3. 사용방법
class 클래스이름 <형식 매개 변수>
{
//...
}
4. 사용 예
다음 코드에서 Array_Int와 Array_Double은 똑같은 기능을 하는 클래스이지만, 내부적으로 사용하는 데이터 형식이 다르기 때문에 두 개의 클래스로 분리해서 구현.
class Array_Int
{
private int[] array;
//...
public int GetElement( int index ) { return array[index]; }
}
class Array_Double
{
private double[] array;
//...
public double GetElement( int index ){ return array[index];}
}
위의 코드를 일반화를 통해 개선
class Array_Generic<T>
{
private T[] array;
//...
public T GetElement( int inedex ){return array[indext];}
}
클래스 이름 뒤에 <T>(형식 매개 변수)를 붙이고 데이터 형식 int와 double에 T를 입력.
Array_Generic 클래스는 다음과 같이 사용.
Array_Generic<int> intArr = new Array_Generic<int>();
Array_Generic<double> dblArr = new Array_Generic<double>();
사용할 때는 원하는 데이터 형식을 통해 변수를 선언하여 사용.
예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _11._2
{
class MyList<T> //MyList 클래스에 형식 매개 변수 T를 추가했습니다.
{
private T[] array;
public MyList()
{
array = new T[3];
}
public T this[int index]
{
get
{
return array[index];
}
set
{
if(index>=array.Length)
{
Array.Resize<T>(ref array, index + 1);
Console.WriteLine($"Array Resized:{array.Length}");
}
array[index] = value;
}
}
public int Length
{
get { return array.Length; }
}
}
class Program
{
static void Main(string[] args)
{
MyList<string> str_list = new MyList<string>();
str_list[0] = "abc";
str_list[1] = "def";
str_list[2] = "ghi";
str_list[3] = "jkl";
str_list[4] = "mno";
for (int i = 0; i < str_list.Length; i++)
Console.WriteLine(str_list[i]);
Console.WriteLine();
MyList<int> int_list = new MyList<int>();
int_list[0] = 0;
int_list[1] = 1;
int_list[2] = 2;
int_list[3] = 3;
int_list[4] = 4;
for (int i = 0; i < int_list.Length; i++)
Console.WriteLine(int_list[i]);
}
}
}
실행결과
Array Resized:4
Array Resized:5
abc
def
ghi
jkl
mno
Array Resized:4
Array Resized:5
0
1
2
3
4
'C#' 카테고리의 다른 글
11.1 일반화 프로그래밍 & 11.2 일반화 메소드 (0) | 2019.12.27 |
---|---|
10.10 foreach가 가능한 객체 만들기 (0) | 2019.12.26 |
10.9 인덱서 (0) | 2019.11.18 |
10.8 컬렉션을 초기화하는 방법 (0) | 2019.09.19 |
10.6 가변 배열 (0) | 2019.08.09 |