namespace, 컬렉션,
namespace
- 관련 개체 집합을 포함하는 범위를 선언하는데 사용된다.
:어디 소속인가?
using 지시문을 사용하면 namespace를 사용하지 않고 간단하게 형식을 지정해줄 수 있다.
다음과 같이 쓰면 System.Console.~로 쓰지않고 Console.~로만 쓸 수 있다. 즉 생략하고 간편하게 쓸 수 있다.
컬렉션
-개체를 그룹화해 관리하는 또다른 방법. 배열은 고정된 개수의 형식 개체를 만들때 유용하며, 컬렉션은 보다 유연하다.
:동적으로 확장되거나 축소된다.
컬렉션 종류
-System.Collections.Generic 클래스
-System.Collections.Concurrent 클래스
-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);
}
}
}
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);
}
}
}
}
제너릭
- 정확한 데이터 형식에 맞게 조정할 수 있다.
-형식 매개변수를 자리 표시자로 사용한다.
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);
}
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);
}
}
}
}
큐
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);
}
}
}
}