C#에서 Stack.Equals() 메서드는 Stack 클래스 객체가 다른 객체와 동일한지 여부를 확인하는 데 사용됩니다. 이 메서드는 두 객체가 같은 인스턴스를 참조하는지 비교하며, 기본적으로 참조(reference) 기준으로 동등성을 판단합니다.
구문(Syntax)
Stack.Equals() 메서드의 기본 구문은 다음과 같습니다.
public virtual bool Equals (object ob);
여기서 매개변수 ob는 현재 객체와 비교할 대상 객체를 의미합니다. 반환값은 두 객체가 동일하면 true, 그렇지 않으면 false입니다.
예제 1: Clone()으로 복제한 스택 비교하기
먼저 스택을 생성하고 요소를 추가한 뒤, Clone() 메서드로 복제한 스택과 Equals()로 비교해 보겠습니다.
using System;
using System.Collections;
public class Demo {
public static void Main(){
Stack stack = new Stack();
stack.Push(150);
stack.Push(300);
stack.Push(500);
stack.Push(750);
stack.Push(1000);
stack.Push(1250);
stack.Push(1500);
stack.Push(2000);
stack.Push(2500);
Console.WriteLine("스택 요소...");
foreach(int val in stack){
Console.WriteLine(val);
}
Console.WriteLine("요소 개수 = "+stack.Count);
stack.Push(3000);
stack.Push(3500);
stack.Push(4000);
Console.WriteLine("\n업데이트된 스택 요소...");
foreach(int val in stack){
Console.WriteLine(val);
}
Console.WriteLine("\n업데이트 후 요소 개수 = "+stack.Count);
Stack stack2 = (Stack)stack.Clone();
Console.WriteLine("\n복제된 스택 요소...");
foreach(int val in stack2){
Console.WriteLine(val);
}
Console.Write("복제된 스택의 요소 개수 = "+stack2.Count);
Console.WriteLine("\n두 스택이 동일한가? = "+stack.Equals(stack2));
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
스택 요소... 2500 2000 1500 1250 1000 750 500 300 150 요소 개수 = 9 업데이트된 스택 요소... 4000 3500 3000 2500 2000 1500 1250 1000 750 500 300 150 업데이트 후 요소 개수 = 12 복제된 스택 요소... 4000 3500 3000 2500 2000 1500 1250 1000 750 500 300 150 복제된 스택의 요소 개수 = 12 두 스택이 동일한가? = False
결과 분석
흥미로운 점은 Clone()으로 복제한 스택조차도 Equals() 결과가 False라는 것입니다. 그 이유는 Clone()이 내용은 같지만 새로운 객체를 생성하기 때문입니다. Stack 클래스는 Equals()를 재정의하지 않았으므로 Object 클래스의 기본 구현인 참조 동등성 비교가 수행되어, 서로 다른 인스턴스에 대해서는 항상 false가 반환됩니다.
예제 2: 서로 다른 내용의 두 스택 비교하기
이번에는 서로 다른 값을 가진 두 개의 스택을 만들어 비교해 보겠습니다.
using System;
using System.Collections;
public class Demo {
public static void Main(){
Stack stack1 = new Stack();
stack1.Push(150);
stack1.Push(300);
stack1.Push(500);
stack1.Push(750);
stack1.Push(1000);
Console.WriteLine("첫 번째 스택(stack1) 요소...");
foreach(int val in stack1){
Console.WriteLine(val);
}
Stack stack2 = new Stack();
stack2.Push(350);
stack2.Push(400);
stack2.Push(500);
stack2.Push(850);
stack2.Push(900);
Console.WriteLine("두 번째 스택(stack2) 요소...");
foreach(int val in stack2){
Console.WriteLine(val);
}
Console.WriteLine("\n두 스택이 동일한가? = "+stack1.Equals(stack2));
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
첫 번째 스택(stack1) 요소... 1000 750 500 300 150 두 번째 스택(stack2) 요소... 900 850 500 400 350 두 스택이 동일한가? = False
정리
C#의 Stack.Equals() 메서드는 객체 간 동등성을 확인하지만, 기본적으로 참조 동등성을 기준으로 판단한다는 점을 기억해야 합니다. 따라서 내용이 완전히 같은 복제된 스택이라도 서로 다른 인스턴스라면 false가 반환됩니다. 스택의 내용 자체를 비교하고 싶다면 요소를 하나씩 순회하며 직접 비교하거나, LINQ의 SequenceEqual() 같은 방법을 활용하는 것이 좋습니다.