- Collection
-
배열의 경우 인덱스를 사용하여 각 항목(element)에 접근하게 되는데, Collection은 인덱스를 사용하지 않고 모든 element에 순차적으로 접근할 수 있는 방법을 제공한다.
- 각 element에 순차적으로 접근할 수 있도록 허용하는 객체의 집합니다.
- 객체가 열거자(enumerator)라고 불리는 객체의 참조를 제공하면 collection이라 한다.
- 열거자는 Collection 내의 항목을 순차적으로 엑세스 할 수 있다.
- foreach를 통해 객체의 내에 순차적으로 접근 할 수 있도록 기능을 제공한다.
-
- Collection의 동작
- Collection이 foreach와 함께 사용될 때 foreach는 collectionm의 Ienumrable interface로 부터 GetEnumerator() method를 호출
- GetEnumerator()는 IEnumerator interface를 구현한 열거자 객체(enumerator object)를 return
- foreach는 이 열거자 객체로부터 IEnumerator interface를 얻어 method(MoveNext(), Reset())와 property(Current)를 호출
- Custom Collection
- collection을 만드려면 System.Collections namespace의 IEnumrable interface를 구현해야 한다.
interface IEnumrable{
IEnumerator GetEnumerator(); // 열거자 객체를 반환
}
- 열거자 객체는 System.Collections의 IEnumerator를 구현한다.
interface IEnumrator{
object Curren{get;}
bool MoveNext();
void Reset();
}
-
IEnumerator를 구현한 Class의 객체는 다음과 같이 작동을 구현
-
객체 초기화시 어떤 element도 가리키지 않음
-
MoveNext method를 호출하여 첫번째 element로 이동한다.
-
Current property를 통해 element를 뽑아낸다.
-
MoveNExt를 호출하여 다음 element로 이동
-
위 과정을 마지막까지 반복
-
Current property가 null을 return하면 더이상 접근할 항목이 없다는 의미
-
Reset method를 호출하여 처음으로 돌아가거나, 처리 종료
-
Reset 호출시에는 첫번째 element의 이전을 가리키므로 MoveNext
-
-
ArrayList
-
객체를 배열로 만들어 사용하는데 유용한 기능을 제공
-
확장성이 뛰어나 삽입/삭제/열거 등의 기능을 제공할 수 있다.
-
배열의 크기를 초기에 지정할 수 있다.
-
정의된 크기를 초과하면 자동으로 크기를 늘려준다.
- ArrayList와 Collection의 관계
-
ArrayList는 IEnumerable interface를 상속받는다.
-
때문에 ArrayList의 GetEnumerator를 통해 열거자 객체를 얻을 수 있다.
-
이를 통해 순차적으로 ArrayList에 접근할 수 있다.
-
-
생성 및 초기화
-
ArrayList myAL = new ArrayList(); // ArrayList 생성
-
myAL.add(new car("그랜저", 100000)); //초기화
-
myAL.add(new car("체어맨", 200000));
-
myAL.add(new car("포텐샤", 300000));
-
-
-
ArrayList 정보
myAL.Count; // 실제로 저장된 element의 수
int MaxSize = myAL.Capacity; //현재 ArrayList 총 크기 얻기
myAL.Capacity = 20; // 저장될 수 있는 총 용량 설정(Default는 16)
-
element 제거
myAL.RemoveAt(1); // 0부터 시작해서 지정된 요소를 제거
-
ArrayList를 배열로 변환
-
parameter로 배열을 전달해야 하는 경우 사용(Type 변환 주의)
Car[] CarArray = new Car[myAl.Count]; // 저장할 배열 생성
for(int i=0; i<myAL.count; i++){
CarArray[i] = (Car)myAL[i];
}
foreach(Car i in CarArray){
Console.WriteLine("차종 : {0}, 가격 : {1}", i.carName, i.carPrice);
}
-
HashTable
-
특정 Key 값에 의해 element에 접근할 수 있도록 고안된 데이터 구조
-
어떠한 형태의 객체이든 저장 가능
-
Hashtable hash1 = new Hashtable(); // HashTable 객체 선언
hash1.Add("690810", "홍길동");
hash1.Add("701116", "박길동");
hash1.Add("740210", "김길동");
hash1.Add("720929", "이길동");
foreach(string item1 in hash1.Keys) { // key data type에 의한 foreach 출력
Console.WriteLine(item1 + " " + hash1[item1]);
}
[파일첨부 : 해당 소스 파일]
출처 : (주)인터데브 솔루션 개발 사업부 박준호님의 C# 동영상 강좌
'프로그램&DB > C#' 카테고리의 다른 글
박준호님의 C# 강좌 - 이벤트(Event) (0) | 2009.04.14 |
---|---|
박준호님의 C# 강좌 - Delegate (0) | 2009.04.14 |
박준호님의 C# 강좌 - Namespace (0) | 2009.04.14 |
[C# 강좌] C# 프로그래밍 #10- 구조체 (0) | 2009.04.08 |
[C# 강좌] C# 프로그래밍 #09- 상속 (0) | 2009.04.08 |