C#의 Char.IsSurrogate() 메서드는 지정한 위치의 문자가 서러게이트(surrogate) 코드 단위인지 여부를 확인하는 데 사용됩니다. 서러게이트 코드 단위란 UTF-16 인코딩에서 기본 다국어 평면(BMP) 밖의 문자를 표현하기 위해 사용되는 특수한 코드 단위로, 상위 서러게이트(U+D800~U+DBFF)와 하위 서러게이트(U+DC00~U+DFFF)로 나뉩니다.
구문
메서드의 기본 구문은 다음과 같습니다.
public static bool IsSurrogate(string str, int index);
매개변수 설명
- str: 검사 대상이 되는 문자열입니다.
- index: str 내에서 평가할 문자의 위치(인덱스)입니다.
지정한 인덱스의 문자가 서러게이트 코드 단위에 해당하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
예제 1: 서러게이트 값이 포함된 경우
다음은 Char.IsSurrogate() 메서드를 실제로 구현한 첫 번째 예제입니다.
using System;
public class Demo {
public static void Main(){
string str = new String(new char[] { 'k', 'm', 'g', 't', '\uD800' });
bool res = Char.IsSurrogate(str, 4);
if (res)
Console.WriteLine("Contains Surrogate value!");
else
Console.WriteLine("Does not contain Surrogate value!");
}
}
출력 결과
Contains Surrogate value!
문자열의 4번째 인덱스에 위치한 문자 \uD800은 상위 서러게이트 범위(U+D800~U+DBFF)에 속하므로 true가 반환되어 "Contains Surrogate value!"가 출력됩니다.
예제 2: 서러게이트 값이 없는 경우
이번에는 일반 문자만으로 구성된 문자열을 사용한 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main(){
string str = new String(new char[] { 'k', 'm', 'g', 't', 'w' });
bool res = Char.IsSurrogate(str, 4);
if (res)
Console.WriteLine("Contains Surrogate value!");
else
Console.WriteLine("Does not contain Surrogate value!");
}
}
출력 결과
Does not contain Surrogate value!
4번째 인덱스의 문자 'w'는 일반 문자이므로 서러게이트 코드 단위가 아니며, 따라서 false가 반환됩니다.
정리
Char.IsSurrogate() 메서드는 유니코드 확장 영역 문자를 처리할 때 유용하게 활용됩니다. 특히 이모지나 희귀 한자처럼 BMP 밖의 문자를 다루는 문자열 파싱 로직에서 잘못된 문자 분리를 방지하기 위해 자주 사용됩니다.