C#에서 BitArray 클래스는 비트 값들의 컬렉션을 다룰 때 유용하게 사용됩니다. 이 글에서는 두 개의 BitArray 객체가 서로 같은지 확인하는 방법을 Equals() 메서드를 통해 알아보겠습니다.
BitArray 객체 간의 동일성을 비교하려면 Equals() 메서드를 사용합니다. 이 메서드는 두 객체가 동일한 참조를 가리키는 경우 True를 반환하고, 내용이 같더라도 별개의 인스턴스인 경우 False를 반환한다는 점에 유의해야 합니다.
예제 1: 참조가 같은 경우
먼저 하나의 BitArray를 다른 변수에 할당한 후 비교하는 예제입니다.
using System;
using System.Collections;
public class Demo {
public static void Main(){
BitArray arr1 = new BitArray(2);
BitArray arr2 = new BitArray(2);
arr1[0] = false;
arr1[1] = true;
Console.WriteLine("BitArray1의 요소...");
foreach (bool res in arr1){
Console.WriteLine(res);
}
arr2[0] = false;
arr2[1] = true;
Console.WriteLine("BitArray2의 요소...");
foreach (bool res in arr2){
Console.WriteLine(res);
}
BitArray arr3 = new BitArray(2);
arr3 = arr2;
Console.WriteLine("BitArray2와 BitArray3이 같은가? = " + arr2.Equals(arr3));
}
}출력 결과
BitArray1의 요소... False True BitArray2의 요소... False True BitArray2와 BitArray3이 같은가? = True
위 예제에서 arr3 = arr2; 구문으로 인해 arr3은 arr2와 동일한 객체를 참조하게 됩니다. 따라서 Equals() 메서드는 True를 반환합니다.
예제 2: 별개의 인스턴스인 경우
이번에는 내용이 동일하지만 서로 다른 인스턴스인 두 BitArray를 비교해 보겠습니다.
using System;
using System.Collections;
public class Demo {
public static void Main(){
BitArray arr1 = new BitArray(2);
BitArray arr2 = new BitArray(2);
arr1[0] = false;
arr1[1] = true;
Console.WriteLine("BitArray1의 요소...");
foreach (bool res in arr1){
Console.WriteLine(res);
}
arr2[0] = false;
arr2[1] = true;
Console.WriteLine("BitArray2의 요소...");
foreach (bool res in arr2){
Console.WriteLine(res);
}
Console.WriteLine("BitArray1과 BitArray2가 같은가? = " + arr1.Equals(arr2));
}
}출력 결과
BitArray1의 요소... False True BitArray2의 요소... False True BitArray1과 BitArray2가 같은가? = False
정리
두 예제의 결과를 비교해 보면 흥미로운 사실을 알 수 있습니다. 예제 2에서는 arr1과 arr2가 모두 false, true라는 동일한 값을 가지고 있음에도 불구하고 Equals() 메서드는 False를 반환했습니다.
이는 BitArray 클래스가 Equals() 메서드를 재정의(override)하지 않기 때문입니다. 즉, 기본적으로 참조 동일성(reference equality)만 검사하며, 요소 값까지 비교하려면 직접 반복문을 돌며 각 비트를 일일이 비교하는 추가 로직을 작성해야 합니다.