C#에서는 이미 존재하는 컬렉션을 그대로 활용해 새로운 스택(Stack)을 간단하게 만들 수 있습니다. Stack<T> 클래스는 IEnumerable<T> 타입의 컬렉션을 인자로 받는 생성자를 제공하기 때문에, 배열이나 리스트 등 다른 컬렉션의 요소들을 복사하여 스택을 초기화할 수 있습니다.
예제 1 – int형 요소로 스택 만들기
아래 예제에서는 먼저 정수 값을 담는 스택을 생성하고, ToArray() 메서드로 배열을 얻은 뒤 이 배열을 이용해 새로운 스택을 만드는 과정을 보여줍니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
Stack<int> stack = new Stack<int>();
stack.Push(100);
stack.Push(200);
stack.Push(300);
stack.Push(400);
stack.Push(500);
stack.Push(600);
stack.Push(700);
stack.Push(800);
stack.Push(900);
stack.Push(1000);
Console.WriteLine("스택 요소...");
foreach (int val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("\n배열 요소...");
Stack<int> arr = new Stack<int>(stack.ToArray());
foreach (int val in arr) {
Console.WriteLine(val);
}
}
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
스택 요소... 1000 900 800 700 600 500 400 300 200 100 배열 요소... 100 200 300 400 500 600 700 800 900 1000
참고: 스택은 LIFO(Last In First Out, 후입선출) 구조이므로 스택 자체를 열거하면 가장 마지막에 넣은 요소부터 출력됩니다. 반면 ToArray()로 변환한 배열을 이용해 새 스택을 생성하면 요소가 순서대로 다시 푸시(Push)되어, 처음 넣은 값부터 출력되는 것을 확인할 수 있습니다.
예제 2 – string형 요소로 스택 만들기
이번에는 문자열(string) 요소를 담은 스택으로 동일한 방식을 적용해 보겠습니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
Stack<string> stack = new Stack<string>();
stack.Push("Katie");
stack.Push("Andy");
stack.Push("Ariane");
stack.Push("Justin");
Console.WriteLine("스택 요소...");
foreach (string val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("\n배열 요소...");
Stack<string> arr = new Stack<string>(stack.ToArray());
foreach (string val in arr) {
Console.WriteLine(val);
}
}
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
스택 요소... Justin Ariane Andy Katie 배열 요소... Katie Andy Ariane Justin
이처럼 Stack<T>의 생성자에 컬렉션을 전달하기만 하면, 기존 데이터를 손쉽게 스택 구조로 변환할 수 있습니다. 정수든 문자열이든 동일한 패턴이 적용되므로, 다양한 타입의 컬렉션을 스택으로 활용할 때 유용하게 사용할 수 있습니다.