namespace, 컬렉션,
2023. 7. 26.

namespace

- 관련 개체 집합을 포함하는 범위를 선언하는데 사용된다.

:어디 소속인가?

 

using 지시문을 사용하면 namespace를 사용하지 않고 간단하게 형식을 지정해줄 수 있다.

 

다음과 같이 쓰면 System.Console.~로 쓰지않고 Console.~로만 쓸 수 있다. 즉 생략하고 간편하게 쓸 수 있다.

 

컬렉션

-개체를 그룹화해 관리하는 또다른 방법. 배열은 고정된 개수의 형식 개체를 만들때 유용하며, 컬렉션은 보다 유연하다.

:동적으로 확장되거나 축소된다.

 

컬렉션 종류

-System.Collections.Generic 클래스

-System.Collections.Concurrent 클래스

-System.Collections 클래스

System.Collections 클래스

ArrayList 

-동적 배열

배열의 인스턴스화는 배열에 값을 할당하는 것이다.

그렇다며 ArrayList에서는 어떻게 인스턴스화, 값을 할당, 순회할 것인가?

->

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class App
    {

        public App()
        {
            //None-Generic Collection Class
            //네임스페이스: System.Collections
            //ArrayList:동적배열 

            //컬렉션 인스턴스화
            ArrayList list = new ArrayList();
            //요소를 추가
            list.Add("홍길동");//값에 오브젝트가 들어감->다들어감 :nongeneric의 특징
            list.Add(123);

            //요소를 가져온다
            string name = (string)list[0];
            int num = (int)list[1];
            //순회
            for(int i=0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);
            }
            foreach (object obj in list)
            {
                Console.WriteLine(obj);

            }

        }
        }
}

Hashtable

-키의 해시 크도에 따라 구성된 키/값 쌍의 컬렉션을 나타냄

-키는 중복되면 안된다.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class App
    {

        public App()
        {
            //Hashtable 
            //인스턴스화
            Hashtable ht = new Hashtable();

            //요소에 값을 넣기
            ht.Add(100,"장검");//키는 중복되면 안됨
            ht.Add(101, "단검");
            //순회
            Console.WriteLine(ht.Count);//컬렉션 요소의 수
            foreach (DictionaryEntry entry in ht)
            {
                Console.WriteLine("{0},{1}",entry.Key,entry.Value);
            }
            ht.Remove(100);//키로 요소 제거

            foreach (DictionaryEntry entry in ht)
            {
                Console.WriteLine("{0},{1}", entry.Key, entry.Value);
            }
            //Hashtable로부터 Key로 value에 가져오는 방법
            string itemName = ht[101].ToString();//인덱스가 아니라 키에 접근하는것
            Console.WriteLine(itemName);

            ht.Clear();//모든 요소 지우기
            Console.WriteLine(ht.Count);
        }


        }
}

hashtable result

Queue

-FIFO 컬렉션

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class App
    {

        public App()
        {
            //Queue : FIFO(선입선출)
            //인스턴스화
            Queue q = new Queue();
            //요소 값을 할당
            q.Enqueue("홍길동");
            q.Enqueue(123);
            //요소 꺼내기
            string name = (string)q.Dequeue();
            Console.WriteLine(name);
            Console.WriteLine(q.Count);//1
            int num = (int)q.Peek();
            Console.WriteLine(num);
            Console.WriteLine(q.Count);
            //순회
            foreach(object obj in q)
            {
                Console.WriteLine(obj);
            }
        }


        }
}

 

Stack

-후입선출 컬렉션

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class App
    {

        public App()
        {
            //프링글스: 마지막에 넣은 것을 가정 먼저 꺼낸다.
           Stack stack = new Stack();
            //넣기
            stack.Push("홍길동");
            stack.Push(123);
            //빼기
            int num = (int)stack.Pop();
            Console.WriteLine(num);//123
            Console.WriteLine(stack.Count);//1
            string name = (string)stack.Peek();
            Console.WriteLine(name);
            Console.WriteLine(stack.Count);//1
            //순회 
            foreach (object obj in stack)
            {
                Console.WriteLine(obj);
            }
        }


        }
}

 

stack

제너릭

- 정확한 데이터 형식에 맞게 조정할 수 있다.

-형식 매개변수를 자리 표시자로 사용한다.

 

T는 형식 매개변수

public class Generic<T>
{
    public T Field;
}

https://learn.microsoft.com/ko-kr/dotnet/standard/generics/#defining-and-using-generics

public static void Main()
{
    Generic<string> g = new Generic<string>();
    g.Field = "A string";
    //...
    Console.WriteLine("Generic.Field           = \"{0}\"", g.Field);
    Console.WriteLine("Generic.Field.GetType() = {0}", g.Field.GetType().FullName);
}
 

.NET의 제네릭

.NET의 제네릭에 대해 알아보세요. 제네릭을 정의하고 사용하며, 제네릭의 이점과 단점을 알아보고, 클래스 라이브러리 및 언어 지원 등을 파악하세요.

learn.microsoft.com

 

generic 클래스

 

List<T>

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class App
    {

        public App()
        {
            //동적배열
            //리스트 형식 변수 정의
            List<string> itemNames;
            //컬렉션 인스턴스화
            itemNames = new List<string>();//string: 형식 매개변수
            //넣기
            itemNames.Add("장검");
            Console.WriteLine(itemNames.Count);//1 : 요소의 수
            itemNames.Add("단검");
            Console.WriteLine(itemNames.Count);//2

            //List는 동적 "배열",인덱스로 요소에 접근 가능
            string name0 = itemNames[0];
            Console.WriteLine(name0);

            itemNames.Remove("장검");
            Console.WriteLine(itemNames.Count);

            //순회
            for(int i = 0; i<itemNames.Count; i++)
            {
                Console.WriteLine(itemNames[i]);
            }

            foreach(string itemName in itemNames)
            {
                itemNames.Remove(itemName);
            }
        }


        }
}

 

 

Dictionary<Tkey,Tvalue>

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class App
    {

        public App()
        {
            //Dictionary : 키/값 쌍으로 데이터를 저장 관리하는 컬렉션
            //변수정의
            Dictionary<int, string> dic;
            //인스턴스화
            dic = new Dictionary<int, string>();
            //넣기
            dic.Add(100, "장검");
            dic.Add(101, "단검");//동일 키 불가
            //요소에 접근하기
            string name101 = dic[101];
            Console.WriteLine(name101);//단검

           //순회
           foreach(KeyValuePair<int, string> pair in dic)
            {
                Console.WriteLine("{0},{1}", pair.Key, pair.Value);
            }    
        }


        }
}

Dictionary

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class App
    {

        public App()
        {
           //큐
           //컬렉션 인스턴스화
           Queue<string> q = new Queue<string>();
            //요소 넣기
            q.Enqueue("장검");
            q.Enqueue("단검");
            q.Enqueue("장검");
            //요소 제거
            string element = q.Dequeue();
            Console.WriteLine(element);
            //시작 부분에 값을 제거하지 않고 반환
            string peek = q.Peek();
            Console.WriteLine(peek);
            //요소의 수 출력
            Console.WriteLine(q.Count);
            //순회
            foreach (string s in q) 
                Console.WriteLine(s);
        }


        }
}

 

스택

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class App
    {

        public App()
        {
          //스택

            //인스턴스화
            Stack <int> stack = new Stack<int>();

            //요소 넣기
            stack.Push(1);
            stack.Push(2);
            stack.Push(3);

            //요소 제거
            int pop = stack.Pop();

            //요소 확인
            int peek = stack.Peek();
            Console.WriteLine(peek);
            //요소의 수 출력 
            Console.WriteLine(stack.Count);

            //순회 
            foreach (int i in stack)
            {
                Console.WriteLine(i);
            }

        }


        }
}

 

스택

 

'C# 기초' 카테고리의 다른 글

개체 이니셜라이저  (0) 2023.07.26
가짜 인벤토리 만들기  (0) 2023.07.26
다차원배열  (0) 2023.07.25
배열 연습  (0) 2023.07.25
배열 예제  (0) 2023.07.24
myoskin