C#에서 Stack.Pop() 메서드는 스택(Stack)의 맨 위에 있는 객체를 제거하고 그 값을 반환하는 역할을 합니다. 스택은 LIFO(Last In, First Out, 후입선출) 구조로 동작하기 때문에, 가장 마지막에 추가된 요소가 가장 먼저 제거됩니다.
만약 빈 스택에서 Pop()을 호출하면 InvalidOperationException 예외가 발생하므로, 호출 전에 Count 속성으로 스택에 요소가 있는지 확인하는 것이 안전합니다. 또한 요소를 제거하지 않고 맨 위 값만 확인하고 싶다면 Peek() 메서드를 사용하면 됩니다.
문법(Syntax)
Stack.Pop() 메서드의 기본 문법은 다음과 같습니다.
public virtual object Pop ();
예제 1 – 기본적인 Pop() 사용법
아래 예제에서는 문자열 요소를 스택에 Push한 후, Peek()로 최상위 요소를 확인하고, Pop()으로 요소를 제거·반환하는 과정을 보여줍니다.
using System;
using System.Collections;
public class Demo {
public static void Main() {
Stack stack = new Stack();
stack.Push("Inspiron");
stack.Push("Alienware");
stack.Push("Projectors");
stack.Push("Monitors");
stack.Push("XPS");
stack.Push("Laptop");
stack.Push("Notebook");
Console.WriteLine("스택 요소...");
foreach(string val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("요소 개수 = " + stack.Count);
Console.WriteLine("최상위 요소 = " + stack.Peek());
stack.Push("Ultrabook");
stack.Push("Cameras");
stack.Push("Keyboards");
Console.WriteLine("\n업데이트된 스택 요소...");
foreach(string val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("최상위 요소 = " + stack.Peek());
Console.WriteLine("\n업데이트된 요소 개수 = " + stack.Count);
Console.WriteLine("\n최상위 요소 제거 및 반환 = " + stack.Pop());
Console.Write("업데이트된 요소 개수 = " + stack.Count);
Console.WriteLine("\n업데이트된 스택 요소...");
foreach(string val in stack) {
Console.WriteLine(val);
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
스택 요소... Notebook Laptop XPS Monitors Projectors Alienware Inspiron 요소 개수 = 7 최상위 요소 = Notebook 업데이트된 스택 요소... Keyboards Cameras Ultrabook Notebook Laptop XPS Monitors Projectors Alienware Inspiron 최상위 요소 = Keyboards 업데이트된 요소 개수 = 10 최상위 요소 제거 및 반환 = Keyboards 업데이트된 요소 개수 = 9 업데이트된 스택 요소... Cameras Ultrabook Notebook Laptop XPS Monitors Projectors Alienware Inspiron
예제 2 – Clone과 함께 사용하는 Pop()
두 번째 예제에서는 Clone() 메서드로 스택 복사본을 만든 뒤, 원본에는 영향을 주지 않고 복사본(stack2)에서만 Pop()을 호출하는 방식을 보여줍니다.
using System;
using System.Collections;
public class Demo {
public static void Main() {
Stack stack = new Stack();
stack.Push("Inspiron");
stack.Push("Alienware");
stack.Push("Projectors");
stack.Push("Monitors");
stack.Push("XPS");
stack.Push("Laptop");
stack.Push("Notebook");
Console.WriteLine("스택 요소...");
foreach(string val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("요소 개수 = " + stack.Count);
Console.WriteLine("Speakers가 스택에 있나요? = " + stack.Contains("Speakers"));
stack.Push("Headphone");
stack.Push("Keyboard");
stack.Push("Earphone");
Console.WriteLine("\n업데이트된 스택 요소...");
foreach(string val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("업데이트된 요소 개수 = " + stack.Count);
Console.WriteLine("Alienware가 스택에 있나요? = " + stack.Contains("Alienware"));
Stack stack2 = (Stack)stack.Clone();
Console.WriteLine("\n복제된 스택 요소...");
foreach(string val in stack2) {
Console.WriteLine(val);
}
Console.WriteLine("stack2 요소 개수 = " + stack2.Count);
Console.WriteLine("stack2의 최상위 요소 = " + stack2.Peek());
Console.WriteLine("\nstack2에서 최상위 요소 제거 및 반환 = " + stack2.Pop());
Console.WriteLine("stack2 요소 개수 = " + stack2.Count);
Console.WriteLine("\n원본 스택 요소...");
foreach(string val in stack) {
Console.WriteLine(val);
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
스택 요소... Notebook Laptop XPS Monitors Projectors Alienware Inspiron 요소 개수 = 7 Speakers가 스택에 있나요? = False 업데이트된 스택 요소... Earphone Keyboard Headphone Notebook Laptop XPS Monitors Projectors Alienware Inspiron 업데이트된 요소 개수 = 10 Alienware가 스택에 있나요? = True 복제된 스택 요소... Earphone Keyboard Headphone Notebook Laptop XPS Monitors Projectors Alienware Inspiron stack2 요소 개수 = 10 stack2의 최상위 요소 = Earphone stack2에서 최상위 요소 제거 및 반환 = Earphone stack2 요소 개수 = 9 원본 스택 요소... Earphone Keyboard Headphone Notebook Laptop XPS Monitors Projectors Alienware Inspiron
정리
- Pop(): 스택 맨 위 요소를 제거하면서 반환합니다.
- Peek(): 스택 맨 위 요소를 제거하지 않고 값만 확인합니다.
- Push(): 스택 맨 위에 새 요소를 추가합니다.
- 빈 스택에서 Pop() 또는 Peek()를 호출하면
InvalidOperationException이 발생하므로 주의해야 합니다.