개발/C#

[C#] 제네릭과 컬렉션

민돌이2 2018. 11. 29. 03:00

제네릭과 컬렉션

 

제네릭(Generic)

 

제너릭은 Generalize의 줄인말이다. 단어 뜻대로 일반화라는 뜻이다.

다양한 형을 지정해도 같은 처리를 실행하고 싶을 떄 사용한다.

예를 들어 서로 값을 교체하는 Swap메소드를 만드는데 정수든지 소수든지 문자열이든지 똑같은 처리를 하고 싶을때 사용하면 좋다.

 

예제)

public void Swap(int x, int y) { t = x; y = x; x = t; } 
public void Swap(float x, float y) { t = x; y = x; x = t; }
public void Swap(string x, string y) { t = x; y = x; x = t; }

 

위의 예제를 아래와 같이 작성할 수 있게 된다.

 

예제)

public void Swap<T>(T x, T y) { t =x; y = x; x =t; }

 

위와같이 공통된 메소드가 있을 떄 변수의 형 때문에 오버로딩 할 필요가 없다는 것이다.

편리한 기능이지만 주의할점이 있다.

제네릭을 사용하면 지정한 변수로 메서드를 호출할 때는 모든 형마다 해당 메소드가 없으면 사용할 수가 없다. 

 

예제)

Swap<int>( 3, 5 );

 

 

컬렉션(Collection)

오브젝트를 관리하는 방법이다. 컬렉션은 제네릭으로 만들지 않으면 장점이 없으므로 반드시 제네릭 컬렉션을 사용한다.

 

예제)

ArrayList list = new ArrayList(); // 제네릭으로 만들어지지 않은 컬렉션은 사용하지 않음
List<string> list = new List<string>();

 

배열과 유사한 점이 있다. 한 변수이름아래에 리스트를 만들어 보관한다는 점인데, 배열과 컬렉션의 큰 차이점이 있다. 배열은 선언 후 나중에 요소의 개수를 바꿀 수 없지만 컬렉션은 무한히 추가할 수 있다.

 

예제1)

List list = new List<String>();
list.Add("ABC");
list.Add("DEF");

 

예제2)

List list = new List<string> { "ABC" , "DEF" );

 

예제1를 예제2로 줄여 사용할 수 있다. 배열 생성시와 같은 방식이다.

컬렉션 클래스

 클래스  설명 
 Dictionary<TKey, TValue>  키와 값으로 구성된 컬렉션을 표현 
 HashSet<T>   값의 집합을 표현 
 LinkedList<T>  양방향 링크드리스트(LinkeList)를 표현 
 List<T>  인덱스로 접근할 수 있는 리스트를 표현 
 Queue<T>  오브젝트의 선입선출(FIFO) 컬렉션을 표현 
 Stack<T>   오브젝트의 후입선출(LIFO) 컬렉션을 표현 

http://mrw0119.tistory.com/16

 

 

 

 

 

 

 

 

 

 

728x90