728x90
반응형
1. 핵심 정리
using System;
class Program {
static void Main() {
int[] arr1 = {1, 2, 3, 4, 5};
string[] arr2 = {"aa", "bb", "cc"};
}
}
① 컬렉션 (Collection) 이란?
=> 동일 타입의 객체를 여러 개 보관 할 수 있는 클래스
=> 배열, Linked List, Tree, Hash Table 등의 자료구조를 구현한 클래스
=> 언어에 따라 Collection(C#, Java) 또는 Container(C++) 라는 용어를 사용
② int, double, string, 사용자 정의 타입등 다양한 타입에 대한 컬렉션이 필요
③ 어떤 타입을 보관할 것인가?
2. 데이터 저장 타입에 따른 분류
using System;
using System.Collections;
class Program {
static void Main() {
ArrayList c1 = new ArrayList();
c1.Add(1);
c1.Add(2);
c1.Add("str");
// int n = c1[0]; - error
int n = (int)c1[0];
}
}
먼저 ArrayList이다. Generic이 나오기전에 사용하던 것으로 요소추가는 Add메소드를 통해 한다.
Add메소드의 정의로 이동해보면 obejct를 인자로 받기 때문에 모든 타입을 인자로 받을 수 있다.
따라서 int형 타입만 받다가 string이 들어갈 수도 있는데 이러한 부분을
타입 안정성이 좋지 않다고 한다.
또한 값을 꺼낼 때도 object이므로 int로 캐스팅을 해서 꺼내야 한다.
namespace는 System.Collections을 열어놓으면 사용할 수 있다.
using System;
using System.Collections.Specialized;
class Program {
static void Main() {
StringCollection c2 = new StringCollection();
c2.Add("aa");
c2.Add("bb");
// c2.Add(1); - error 타입 안정성이 좋다.
string s = c2[0];
}
}
다음은 StringCollection이다. 이것도 Generic이 나오기전에 만들어진 컬렉션이다.
위와 같이 Add메소드를 통해 요소를 추가한다.
Add메소드의 정의로 이동해보면 string만 넣을 수 있는 것을 볼 수 있다.
이런걸 타입 안정성이 좋다고 한다.
또한 string만 넣었으므로 꺼낼때도 캐스팅 필요 없이 꺼낼 수 있다.
하지만 문제는 이건 string전용 컬렉션이고 나중에 int, double형이 필요하다면
다 만들어야 하는 문제가 있다. C#에서는 자주 사용하는것만 만들어 주었는데 문자열이 그 경우이다.
namespace는 System.Collections.Specialized를 열어주면 사용할 수 있다.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
List<int> c3 = new List<int>();
c3.Add(1);
c3.Add(2);
// c3.Add("aa"); - error 타입 안정성이 뛰어나다.
int n = c3[0];
}
}
다음으로 볼게 Generic 컬렉션인 List이다.
Add메소드의 정의로 이동해보면 제너릭으로 되어 있는것을 볼 수 있다.
위의 경우 int로 놓았으므로 int만 보관가능하고 꺼낼 때도 int로 바로 받을 수 있다.
제너릭이므로 int, double, string 필요한 타입에 대해 만들어 사용하면 된다.
namespace는 System.Collections.Generic을 열어주면 된다.
using System;
using System.Collections.Concurrent;
class Program {
static void Main() {
ConcurrentStack<int> c4 = new ConcurrentStack<int>();
c4.Push(10);
}
}
다음은 위의 3개와는 좀 다른 관점인데 멀티 쓰레드에 안전한 컬렉션이다.
대표적으로 위의 ConcurrentStack이 있다.
제너릭으로 만들어져 있고, 무언가 요소를 추가할 때 멀티 쓰레드에 안전하다.
namespace는 System.Collections.Concurrent를 열어주면 된다.
그리고 쓰레드에 안전한 컬렉션을 더 알고싶다면
마이크로소프트 msdn으로 가서 찾아보면 확인할 수 있다.
728x90
반응형
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 열거자 (Enumerator) (0) | 2020.04.26 |
---|---|
[C#] Collection과 Interface (0) | 2020.04.26 |
[C#] try ~ finally (0) | 2020.04.21 |
[C#] 예외 필터 (exception filter) (0) | 2020.04.20 |
[C#] 예외를 처리하는 방법 (catch, Exception, rethrow) (0) | 2020.04.20 |