C#에서 Stack<T>에 담긴 모든 개체를 한 번에 제거하려면 Clear() 메서드를 호출하면 됩니다. Clear() 메서드는 스택 내부의 모든 요소를 삭제하고 Count 속성을 0으로 초기화합니다.
예제 1: 문자열 스택 비우기
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(){
Stack<string> stack = new Stack<string>();
stack.Push("A");
stack.Push("B");
stack.Push("C");
stack.Push("D");
stack.Push("E");
stack.Push("F");
stack.Push("G");
stack.Push("H");
Console.WriteLine("요소 개수 = " + stack.Count);
Console.WriteLine("스택에 저장된 요소...");
foreach (string res in stack){
Console.WriteLine(res);
}
stack.Clear();
Console.Write("요소 개수(제거 후) = " + stack.Count);
}
}
실행 결과
요소 개수 = 8 스택에 저장된 요소... H G F E D C B A 요소 개수(제거 후) = 0
코드 설명
Push() 메서드로 A부터 H까지 8개의 문자열을 스택에 추가한 뒤 Count 속성으로 현재 요소 개수를 확인합니다. 스택은 LIFO(후입선출, Last-In-First-Out) 구조이므로 가장 마지막에 넣은 H부터 역순으로 출력됩니다. 이후 Clear() 메서드를 호출하면 모든 요소가 제거되어 Count 값이 0으로 변경됩니다.
예제 2: 정수 스택 비우기
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(){
Stack<int> stack = new Stack<int>();
stack.Push(10);
stack.Push(20);
stack.Push(30);
stack.Push(40);
stack.Push(50);
stack.Push(60);
stack.Push(70);
stack.Push(80);
stack.Push(90);
stack.Push(100);
Console.WriteLine("요소 개수 = " + stack.Count);
Console.WriteLine("스택에 저장된 요소...");
foreach (int res in stack){
Console.WriteLine(res);
}
stack.Clear();
Console.Write("요소 개수(제거 후) = " + stack.Count);
}
}
실행 결과
요소 개수 = 10 스택에 저장된 요소... 100 90 80 70 60 50 40 30 20 10 요소 개수(제거 후) = 0
Clear() 메서드 핵심 정리
- 동작: Stack<T>에 저장된 모든 개체를 제거합니다.
- 시간 복잡도: O(n), 여기서 n은 스택의 요소 수입니다.
- Count 변화: 호출 후 Count 속성은 항상 0이 됩니다.
- 참고: 내부 버퍼의 용량(Capacity)은 그대로 유지될 수 있으며, 참조 형식 요소는 이후 가비지 컬렉터가 회수할 수 있습니다.