본문 바로가기

프로그램&DB/C#

박준호님의 C# 강좌 - Collection / ArrayList / HashTable

  • 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# 동영상 강좌