C#에서 CharEnumerator.Clone() 메서드는 현재 CharEnumerator 객체의 복사본을 생성하는 데 사용됩니다. CharEnumerator는 문자열의 개별 문자를 한 글자씩 순차적으로 탐색할 수 있게 해주는 열거자인데, Clone() 메서드를 호출하면 현재 탐색 위치까지 그대로 유지된 상태의 새로운 열거자를 얻을 수 있습니다.
문법(Syntax)
public object Clone();Clone() 메서드는 매개변수를 받지 않으며, 반환 타입은 object입니다. 이는 CharEnumerator 클래스가 ICloneable 인터페이스를 구현하기 때문입니다. 따라서 반환된 객체를 사용하려면 명시적으로 CharEnumerator 타입으로 캐스팅해야 합니다.
예제 코드
다음 예제는 CharEnumerator.Clone() 메서드를 실제로 활용하는 방법을 보여줍니다.
using System;
public class Demo {
public static void Main(){
string strNum = "356";
CharEnumerator ch = strNum.GetEnumerator();
while (ch.MoveNext()){
Console.Write(ch.Current + " ");
CharEnumerator enumClone = (CharEnumerator)ch.Clone();
while (enumClone.MoveNext())
Console.Write(enumClone.Current + " ");
Console.WriteLine();
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 나타납니다.
3 5 6
5 6
6코드 동작 원리
출력 결과가 이렇게 나오는 이유를 단계별로 살펴보겠습니다.
- 외부 루프:
MoveNext()를 호출하며 문자열 "356"의 각 문자를 하나씩 순회하고, 현재 문자(Current)를 먼저 출력합니다. - 복제 시점: 각 반복마다
ch.Clone()을 호출하여 현재 위치 기준으로 열거자를 복제합니다. 복제본은 원본과 동일한 위치에서 시작합니다. - 내부 루프: 복제된 열거자(
enumClone)로 남은 문자들을 끝까지 탐색하며 출력합니다.
그 결과 첫 번째 반복에서는 '3'을 출력한 뒤 복제본이 '5', '6'을 이어서 출력해 3 5 6이 되고, 두 번째 반복에서는 '5' 출력 후 '6'만 남아 5 6, 마지막에는 '6'만 출력되어 6이 됩니다.
정리
CharEnumerator.Clone() 메서드는 열거자의 현재 상태를 보존한 채 독립적인 복사본을 만들고 싶을 때 유용합니다. 다만 반환 타입이 object이므로 반드시 캐스팅이 필요하다는 점, 그리고 복제본과 원본은 서로 독립적으로 움직인다는 점을 기억하면 됩니다.