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

박준호님의 C# 강좌 - Namespace

프로그램&DB/C# 2009. 4. 14. 16:59 Posted by Josep.H.S
  • Namespace

    • class와 각종 data type들을 그 연관성에 따라 그룹화시키는 논리적인 개념

    • Namespace를 중첩시켜 계층적인 data type을 구성

    • class의 이름 충돌을 해결하기 위한 용도로 사용

    • Namespace를 사용할 경우 이름이 길어지게 되는데, 이것을 해결하기 위해 Namespace Alias를 통해 Namespace의 별칭을 지정할 수 있다.

    • namespace에 포함될 수 있는 것

      • namespace, class, interface, struct, enum, delegate

 

  • Namespace의 범위

    • class는 그 class가 참조될 수 있는 범위를 가지고 있다.

    • namespace가 지정되지 않으면 같은 namespace에서 처리

 using System;

 class Utility{          // 이 두개의 class는 default namespace에 속한다.

          public void DisplayString(){  Console.WriteLine("Hello")};

 }

 

 class Myclass{

          public static void Main(){

                     Utility util = new Utility();

                     util.DisplayString();

 

                     System.Threading.Thread.Sleep(100000); // 다른 namespace class

          }

}

 

  • class 이름이 중복될 때

    • Application은 수많은 class들로 이루어지고, class의 이름이 중복되는 상황이 발생 할 수 있다.

    • namespace를 사용하지 않는다면, class의 이름을 서로 다르게 지정할 수 밖에 없다.

 public class Project1Utility{

             .............

 }

 

 public class Project2Utility{

             .............

 }

 

 // 복잡한 이름으로 사용이 불편

 namespace MyCompany.Project1{

             public class Utility{

             }

 }

 

namespace MyCompany.Project2{

             public class Utility{

             }

}

 

  • 단일 Namespace의 선언 및 사용

 namespace Project1{

             public class Utility{

                         public void DisplayString(string srt) {  ........ } ;

             }

}

 using Project1;

 namespace Project2{

             public class MyClass{

                          public static void Main(){

                                       Utility util1 = new Utility();  // using 키워드를 사용한 참조

                                       Project1.Utility util2 = new Project1.Utility();

                                       util1.DisplayString("Hello World~!");

                          }

             }

}

 

  • 중첩된 Namespace의 선언

 namespace MyCompany

                namespace Project1{

                             public class Utility{

                             }

                }

 }

                                                                               

 namespace MyCompony

                namespace Project2{

                             public class Utility{

                             }

                }

 }

 namespace MyCompany.Project1{

                 public class Utility{

                 }

 }

 

 namespace MyCompany.Project2{

                 public class Utility{

                 }

 }

 

 

 

 

 

 

  • Namespace의 사용과 Alias

 using MyCompany.Project1;

 

 // ....

 Utility util1  = new Utility(); // using 키워드를 사용한 참조

 MyCompany.Project1.Utility util2 = new MyCompony.Project1.Utility();

 System.Threading.Thread.Sleep(100000);

 using A1 = MyCompany.Project1; // namespace alias 정의

 

 // ....

 A1.Utility util2 = new A1.Utility(); // namespace alias 사용

 

 

[첨부 파일 : 소스 파일]

 

출처 : (주)인터데브 솔루션 개발 사업부 박준호님의 C# 동영상 강좌