-
[C#] 일반화(3)C# 2022. 3. 2. 23:51728x90
쓰다보니 일반화관련 길이 길어지네요.
이렇게 코딩은 알아가면 알아갈수록 어렵네요.
이번에는 일반화 컬렉션입니다.
기존 Collection들은 Object형태입니다.
일반화 Collection은 일반화에 기반해 컴파일시 사용될 형식이 결정돼 쓸데없는 형변환이 없습니다.
사용법은 일단 using을 통해 System.Collections.Generic 으로 사용할 수 있습니다.
일반화 Collection Collection List<T> ArrayList Queue<T> Queue Stack<T> Stack Dictionary<TKey, TValue> Hashtable 일반화 Collection과 기존 Collection의 차이입니다. 일반화에서 사용했던 <T>가 붙는다는게 일단 가장 큰 차이점이겠네요.
Queue의 예제입니다. 간단하게 문자열에 대해서 Enqueue와 Dequeue를 진행하고 결과를 프린트 해봤습니다.
Queue<string> queueString = new Queue<string>(); queueString.Enqueue("Hello"); queueString.Enqueue("World"); queueString.Enqueue("안녕하세요."); foreach(string data in queueString) { Console.WriteLine(data); } queueString.Dequeue(); Console.WriteLine(); foreach (string data in queueString) { Console.WriteLine(data); }
결과입니다.
FIFO구조입니다. 그렇기에 Dequeue를 하면 처음 삽입된 문장이 빠지는걸 알 수 있네요.
스택입니다. 흔히 팬케이크 구조라고 하는 First In Last Out 구조입니다.
Stack<int> stackInt = new Stack<int>(); stackInt.Push(1); stackInt.Push(2); stackInt.Push(3); stackInt.Push(4); stackInt.Push(5); foreach(int data in stackInt) { Console.WriteLine(data); } stackInt.Pop(); Console.WriteLine(); foreach (int data in stackInt) { Console.WriteLine(data); }
POP한 데이터를 보니 마지막에 추가된 5가 사라진걸 볼 수 있습니다.
List입니다. list는 삭제와 삽입시 자리값을 지정해 줄 수 있습니다. 코드로 만나보시죠
List<int> list = new List<int>(); list.Add(1); list.Add(3); list.Add(5); list.Add(7); list.Add(9); foreach(int data in list) { Console.WriteLine(data); } Console.WriteLine(); list.RemoveAt(2); foreach(int data in list) { Console.WriteLine(data); } Console.WriteLine(); list.Insert(2, 100); foreach (int data in list) { Console.WriteLine(data); } Console.WriteLine();
다음은 결과값입니다. removeat을 통해 2번째, 0부터 시작하니 실제로는 3번째의 값을 삭제하고 다시 삽입했습니다.
마지막으로 Dictionary입니다. Dictionary는 Key와 Value의 조합이며 Key값은 중복을 가질 수 없다는 가장 큰 특징이 있습니다. 이제 예시로 만나보시죠
Dictionary<String, String> dictionTest = new Dictionary<string, string>(); dictionTest.Add("똘기", "자"); dictionTest.Add("떵이", "축"); dictionTest.Add("호치", "인"); dictionTest.Add("새초미", "묘"); foreach(String value in dictionTest.Values) { Console.WriteLine(value); } Console.WriteLine(); foreach (String value in dictionTest.Keys) { Console.WriteLine(value); }
예시는 오랜만에 생각난 꾸러기수비대를 이용해 들어봤습니다. foreach를 통한 간단한 출력문입니다.
key값과 value값을 각각 출력합니다. foreach를 자주쓰는 이유는 확실하지는 않지만 어떤 분이 foreach를 쓰는게 속도가 빠르다며 강조하셨기에 습관이 들어버렸네요... 확실하지는 않습니다. 참고해주세요. :D
결과값입니다.
짠 이렇게 나온걸 확인 할 수 있습니다. 이렇게 일반화에 대해 마무리하고자 합니다.
원래는 간단하게 쓸려그랬는데 공부하다보니 3파트로나 나눠졌네요.
현재는 사정으로 잠깐 Spring을 하고있지만 아직 못끝낸 Delegate를 마저 마무리도 하겠습니다.
항상 몸건강하시길 바랍니다. :D
'C#' 카테고리의 다른 글
[C#] Delegate에 대한 공부(3) Delegate Chain (0) 2022.04.01 [C#] Delegate에 대한 공부(2) (0) 2022.03.22 [C#] 일반화(2) (0) 2022.01.25 [C#] 일반화(1) (0) 2022.01.14 [C#] Delegate에 대한 공부(1) (0) 2022.01.07