본문 바로가기
코스웨어/15년 스마트컨트롤러

20150609 - 27 주보건 콜렉션 - ArrayList - Queue - Indexer

by 알 수 없는 사용자 2015. 6. 9.
728x90
반응형

뇌를 자극하는 C# 프로그래밍


콜렉션

- ArrayList

- Queue

- Indexer

foreach가 가능한 객체를 만들기 

학생 성적 출력 코딩

 

컬렉션이란?

같은 성격을 띄는 데이터의 모음을 담는 자료구조

배열도 .NET 프레임워크가 제공하는 컬렉션 자료구조 중 하나

 

ArrayList

 

ArrayList list = new ArrayList();

 

list.Add( 10 );

list.Add( 20 );

list.Add( 30 );

 

list.RemoveAt( 1 ); // 20을 삭제

 

list.Insert( 25, 1 ); // 25를 1번 인덱스에 삽입, 10 과 30 사이에 25를 삽입



ArrayList 클래스

상속계층구조라고 한다다양한 형식의 객체를 담을 수 있는 이유는 다음의 Add()

,lnsert() 메소드의 선언을 보면 알 수 있다.

public virtual int Add( object value)

public virtual void lnsert( int index, object value)

 

objec 형식의 매개 변수를 받는데 모든 형식은 object을 상속하므로 object 형식으로 간주될 수 있다 그래서 Add()메소드에 int 형식의 데이터를 넣더라도 정수 형식 그대로 입력되는 것이 아니라 object 형식으로 박싱(Boxing) 되어 입력되는 것인데 string 형식도 마찬가지이다반대로 ArrayList의 요소에 접근해서 사용할 때는 원래의 데이터 형식으로 언박싱(Unboxing)이 이루어지게 됩니다박싱과 언방싱은 작지 않은 오버헤드를 요구하는 작업인데 ArrayList가 다루는 데이터가 맣으면 많아질수록 이러한 성능의 저하는 더욱 늘어나게 됩니다이것은 ArrayList만의 문제가 아니라 앞으로 살펴볼 stact, Queue,Hashtable 등의 컬렉션도 갖고 있습니다.



 

Hashtable

->(Key)와 값(Value)으로 이루어진 데이터를 다룰 때 사용.

->키를 헤싱(Hashing)를 통해 테이블 내의 주소를 계산.

->다루기 간편하고 탐색속도도 빠름

 

Hashtable ht = new Hashtable();

ht["book"] = "";

ht["cook"] = "요리사";

ht["tweet"] = "지저귀다";

Console.WriteLine( ht["book"] ) ;

Console.WriteLine( ht["cook"] );

Console.WriteLine( ht["tweet"] );

 

인덱서!!<-오늘의 수업중 가장 중요한 부분이다.

 

->인덱서(lndexer)는 인덱스(lndex)를 이용해서 객체 내의 데이터에 접근하게 해주는 프로퍼티

->인덱서 선언 형식

class 클래스이름

{

한정자 인덱서형식 this[형식 index]

{

get

{

// index를 이용하여 내부 데이터 반환

}

set

{

// index를 이용하여 내부 데이터 저장 }

}

}

프로퍼티란 데이터의 은닉을 위한 것이다.



인덱서란 인덱서는 프로퍼티처럼 식별자를 따로 가지지 않습니다.

프로퍼티가 이름을 통해 객체 내의 데이터에 접근하게 해준다면인덱서는 인덱스를 통해 객체 내의 데이터에 접근하게 해주는데 지정한 인덱스보다 배열의 크기가 작다면 인덱스에 맞춰 배열의 크기를 재조정한다프로퍼티란 객체 내의 접근할 수 있도록 하는 통로역활인데 인덱서도 프로퍼티처럼 객체 내의 데이터에 접근할 수 있도록 하는 통로인데 프로퍼티와 다른점 이라면인덱스(index)"를 이용한다는 사실이다.



p333. 배열과 컬렉션,그리고 인덱서

 



예제부분이 너무 길기 때문에 생략 하였습니다. p335쪽 참고하시면 될 것 같습니다


C++ 수업은 자율학습으로 대체하였습니다

728x90