C# 강좌 Day-17 컬렉션 (namespace,using)
Unity3D/C# 2021. 8. 31. 12:07namespace 키워드는 범위를 선언하는데 사용된다, 코드구성에 도움이 되며 고유한 형식을 만들수 있게 도와준다
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/namespaces/using-namespaces
using 지시문을 사용하면 네임스페이스에 정의된 해당 형식의 정규화된 네임스페이스를 지정하지 않고도 사용할수 있다
https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/using-directive
대부분의 애플리케이션의 경우 관련 개체의 그룹을 만들고 관리하려고 합니다.
개체를 그룹화하는 방법에는 개체 배열을 만들거나 개체 컬렉션을 만드는 두 가지가 있습니다.
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/concepts/collections
.NET에서는 다양한 컬렉션 클래스를 제공한다
컬렉션의 여러가지 종류
https://docs.microsoft.com/ko-kr/dotnet/api/system.collections?view=net-5.0
대표적인 컬렉션의 종류
ArrayList : 필요에 따라 크기가 동적으로 증가하는 배열을 사용하여 IList인터페이스를 구현한다
Hashtable : 키의 해시코드에 따라 구성된 키/값 쌍의 컬렉션을 나타낸다
Queue : 개체의 선입선출 (FIFO)컬렉션을 나타낸다
Stack : 제너릭이 아닌 개체의 간단한 LIFO(Last In First Out: 마지막에 들어간것부터사용) 컬렉션을 나타낸다
Stack클래스
https://docs.microsoft.com/ko-kr/dotnet/api/system.collections.stack?view=net-5.0
Stack클래스는 LIFO(Last In First Out) 후입선출 특징이 있다
나중에 들어온 데이터가 먼저 출력되는 자료구조이다
주요 속성및 메서드
Count : 스택에 있는 데이터 개수
Push() : 스택에 데이터 저장
Pop() : 스택에 데이터 꺼내고 저장되어 있는 데이터를 제거한다
Peek(): 스택에서 데이터를 꺼내고 데이터는 제거하지 않는다
스택이 꽉차는것을 Overflow라고 한다
Stack클래스를 사용하기 위해서는 먼저 System.Collections네임스페이스를 포함해야 한다
using 지문을 사용하여 해당 네임스페이스를 추가한다
using System.Collections;
컬렉션을 사용하기 위해 반드시 인스턴스화 해야 한다
Stack stack = new Stack();
제공되는 Push메서드를 통해 데이터를 삽입 할수 있다
stack.Push("홍길동");
stack.Push("임꺽정");
다음과 같이 다양한 형식의 값들을 저장할수 있다
using System;
using System.Collections;
class App
{
public App()
{
Stack stack = new Stack();
stack.Push("홍길동");
stack.Push("임꺽정");
stack.Push(100);
stack.Push(true);
stack.Push(new Item());
}
}
class Item
{
public Item()
{
}
}
저장된 데이터는 Pop()메서드를 통해 읽어올수 있다
이때 나중에 입력된 데이터가 먼저 출력된다
object element = stack.Pop();
Console.WriteLine(element);
Push와 Pop메서드의 매개변수타입과 반환타입은 모두 object이므로
값을 저장하거나 가져올때 박싱과 언박싱이 일어난다
using System;
using System.Collections;
class App
{
public App()
{
Stack stack = new Stack();
Console.WriteLine("count: {0}", stack.Count);
object element = stack.Pop();
Console.WriteLine(element);
}
}
스택에 데이터가 없을때 Pop을 하게 되면 에러가 발생한다
Peek() 메서드로 데이터만 가져오기 (저장되어 있는 데이터 삭제 안됨)
using System;
using System.Collections;
class App
{
public App()
{
Stack stack = new Stack();
stack.Push("홍길동");
stack.Push("임꺽정");
stack.Push(100);
stack.Push(true);
stack.Push(new Item());
Console.WriteLine("count: {0}", stack.Count);
object element = stack.Pop();
Console.WriteLine(element);
Console.WriteLine("count: {0}", stack.Count);
object element2 = stack.Peek();
Console.WriteLine(element2);
Console.WriteLine("count: {0}", stack.Count);
}
}
class Item
{
public Item()
{
}
}
Queue 클래스
Stack과 달리 먼저 들어온 데이터가 먼저 나온다
FIFO(First In First Out) 선입선출로 표현된다
제공되는 주요 메서드
Enqueue 의 끝에 요소를 추가 Queue 합니다.
Dequeue 의 시작 부분에서 가장 오래 된 요소를 제거 Queue 합니다.
Peek 의 시작 부분에 있는 가장 오래 된 요소를 반환 Queue 하지만에서는 제거 하지 않습니다 Queue .
컬랙션은 사용전 반드시 초기화 해야 한다 (인스턴스 생성)
using System.Collections;
Queue queue = new Queue();
Enqueue메서드를 사용해 데이터를 넣는다
// Creates and initializes a new Queue.
Queue myQ = new Queue();
myQ.Enqueue( "The" );
myQ.Enqueue( "quick" );
myQ.Enqueue( "brown" );
myQ.Enqueue( "fox" );
// Removes an element from the Queue.
Console.WriteLine( "(Dequeue)\t{0}", myQ.Dequeue() );
Enqueue, Dequeue 매개변수를 Object형식으로 받거나 Object형식으로 반환 하며 Boxing, UnBoxing을 사용한다
Hashtable
https://docs.microsoft.com/ko-kr/dotnet/api/system.collections.hashtable?view=net-5.0#definition
키의 해시 코드에 따라 구성된 키/값 쌍의 컬렉션을 나타냅니다.
내부적으로 배열을 사용해 데이터를 저장하고 Key값에 해시함수를 적용해
배열의 고유한 index를 생성하고 index를 통해 값을 저장하거나 검색할수 있기 때문에 검색이 매우 빠르다
주요 속성및 메서드
Count | Hashtable에 포함된 키/값 쌍의 수를 가져옵니다. |
Keys | ICollection의 키를 포함하는 Hashtable을 가져옵니다. |
Values | ICollection의 값이 들어 있는 Hashtable을 가져옵니다. |
Add(Object, Object) | 지정한 키와 값을 가지는 요소를 Hashtable에 추가합니다. |
Contains(Object) | Hashtable에 특정 키가 들어 있는지 여부를 확인합니다. |
Remove(Object) | Hashtable에서 키가 지정된 요소를 제거합니다. |
컬렉션은 사용전 반드시 인스턴스화 해야 한다
using System;
using System.Collections;
class Program
{
static void Main(string[] args)
{
Hashtable table = new Hashtable();
table.Add(1, "hello");
table.Add("2", "world");
Item item = new Item("장검");
table.Add(item, 123);
table.Add(100, new Item("단검"));
table[200] = new Item("활");
Console.WriteLine(table[200]);
//Console.WriteLine(table[200].name); //not found
Item bow = (Item)table[200];
Console.WriteLine(bow.name);
}
}
class Item
{
public string name;
public Item(string name){
this.name = name;
}
}
Boxing, UnBoxing이 일어난다.
'Unity3D > C#' 카테고리의 다른 글
C# 강좌 Day-20 예외처리 (0) | 2021.09.07 |
---|---|
C# 강좌 Day-18 인덱서 (0) | 2021.09.01 |
C# 강좌 Day-16 배열, foreach (0) | 2021.08.30 |
C# 강좌 Day-15 (속성) (0) | 2021.08.15 |
C# 강좌 Day-14 (abstract, interface) (0) | 2021.08.15 |