Unity3D/C#

C# 강좌 Day-17 컬렉션 (namespace,using)

일등하이 2021. 8. 31. 12:07
반응형

namespace 키워드는 범위를 선언하는데 사용된다, 코드구성에 도움이 되며 고유한 형식을 만들수 있게 도와준다

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 클래스 

https://docs.microsoft.com/ko-kr/dotnet/api/system.collections.queue.enqueue?view=net-5.0#System_Collections_Queue_Enqueue_System_Object_ 

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이 일어난다. 




 

 

 

반응형