C#에서 한 배열 객체가 다른 배열 객체와 같은지 확인하려면 Equals() 메서드를 사용하면 됩니다. 다만 배열의 Equals() 메서드는 두 배열이 동일한 객체(참조)를 가리키는지를 판단할 뿐, 배열의 요소 값까지 비교하지는 않는다는 점에 유의해야 합니다. 아래 예제를 통해 자세히 살펴보겠습니다.
예제 1: 서로 다른 배열 객체 비교하기
using System;
public class Demo {
public static void Main(){
String[] strArr1 = new String[3] { "John", "Jacob", "Tim"};
String[] strArr2 = new String[3] { "Tom", "Brad", "Bradley"};
Console.WriteLine("첫 번째 문자열 배열...");
foreach(string val in strArr1){
Console.WriteLine(val);
}
Console.WriteLine("두 번째 문자열 배열...");
foreach(string val in strArr2){
Console.WriteLine(val);
}
Console.WriteLine("두 배열 객체가 같은가? = " + strArr1.Equals(strArr2));
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
첫 번째 문자열 배열... John Jacob Tim 두 번째 문자열 배열... Tom Brad Bradley 두 배열 객체가 같은가? = False
strArr1과 strArr2는 요소 내용과 관계없이 각각 별개의 배열 인스턴스를 참조하고 있기 때문에 Equals() 메서드는 False를 반환합니다.
예제 2: 참조를 공유하는 배열 비교하기
이번에는 하나의 배열 변수를 다른 배열 변수에 할당한 뒤 비교해 보겠습니다.
using System;
public class Demo {
public static void Main(){
int[] arr1 = new int[5] { 10, 20, 30, 40, 50};
int[] arr2 = new int[5] { 25, 25, 40, 55, 70};
Console.WriteLine("첫 번째 정수 배열...");
foreach(int val in arr1){
Console.WriteLine(val);
}
Console.WriteLine("두 번째 정수 배열...");
foreach(int val in arr2){
Console.WriteLine(val);
}
arr1 = arr2;
Console.WriteLine("두 배열 객체가 같은가? = " + arr1.Equals(arr2));
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
첫 번째 정수 배열... 10 20 30 40 50 두 번째 정수 배열... 25 25 40 55 70 두 배열 객체가 같은가? = True
arr1 = arr2; 문장을 통해 arr1이 arr2와 동일한 배열 객체를 참조하게 되었으므로, 이번에는 Equals() 메서드가 True를 반환합니다.
참고: 배열 요소 자체를 비교하려면?
배열의 참조가 아닌 요소 값을 기준으로 두 배열을 비교하고 싶다면 LINQ에서 제공하는 SequenceEqual() 메서드를 사용하는 것이 좋습니다.
using System;
using System.Linq;
public class Demo {
public static void Main(){
int[] arr1 = { 10, 20, 30 };
int[] arr2 = { 10, 20, 30 };
Console.WriteLine(arr1.Equals(arr2)); // False (참조가 다름)
Console.WriteLine(arr1.SequenceEqual(arr2)); // True (모든 요소가 같음)
}
}정리하면, Equals()는 배열의 참조 동등성을 확인하는 데 사용되며, 실제 요소 값의 일치 여부를 확인하려면 SequenceEqual()과 같은 방법을 활용해야 합니다.