Character.charCount() 메서드란?
Java의 Character.charCount() 메서드는 지정된 문자(유니코드 코드 포인트)를 표현하는 데 필요한 char 값의 개수를 반환합니다. 동작 방식은 다음과 같습니다.
- 지정된 문자가 0x10000 이상이면 2를 반환합니다. 이는 해당 문자가 보충 문자(supplementary character) 영역에 속한다는 의미입니다.
- 그 외의 경우에는 1을 반환합니다. 즉, 기본 다국어 평면(BMP, Basic Multilingual Plane)에 속하는 일반적인 문자입니다.
참고로 자바에서 char 타입은 16비트(UTF-16 코드 유닛)이므로, 0x10000 이상의 확장 유니코드 문자 하나를 표현하려면 서로게이트 페어(surrogate pair) 형태로 char 두 개가 필요합니다. charCount() 메서드는 바로 이 개수를 판별할 때 유용하게 사용됩니다.
예제 1: 보충 문자 여부 판별하기
아래 예제에서는 코드 포인트 0x12345에 대해 charCount()를 호출하여 결과를 확인합니다.
import java.lang.*;
public class Demo {
public static void main(String[] args) {
// int 코드 포인트 cp 생성 및 값 할당
int cp = 0x12345;
// int 변수 res 선언
int res;
// cp에 대한 charCount 결과를 res에 저장
res = Character.charCount(cp);
String str1 = "보충 문자(supplementary character)가 아닙니다";
String str2 = "유효한 보충 문자(supplementary character)입니다";
// res 값 출력
if (res == 1) {
System.out.println(str1);
} else if (res == 2) {
System.out.println(str2);
}
}
}실행 결과
유효한 보충 문자(supplementary character)입니다
0x12345는 0x10000보다 크기 때문에 char 두 개가 필요하며, 따라서 charCount()는 2를 반환합니다.
예제 2: 반환값 직접 출력하기
이번에는 다른 코드 포인트를 사용해 반환값을 그대로 출력해 보겠습니다.
import java.lang.*;
public class Demo {
public static void main(String[] args) {
int c = 0x11987;
int res = Character.charCount(c);
System.out.println(res);
}
}실행 결과
2
0x11987 역시 0x10000을 초과하는 코드 포인트이므로 결과값으로 2가 출력되는 것을 확인할 수 있습니다.
정리
Character.charCount() 메서드는 유니코드 코드 포인트가 몇 개의 char 값으로 구성되는지 빠르게 확인할 수 있는 간단하지만 실용적인 도구입니다. 특히 문자열을 직접 순회하거나 UTF-16 인코딩 관련 로직을 작성할 때 보충 문자 처리에 활용하면 유용합니다.