HOWTO · Java
Java에서 빈 문자 표시
이 기사에서는 Java에서 빈 문자를 처리하는 방법을 소개합니다.
이 페이지의 내용
Java에는 빈 기본형 char가 없습니다. char는 UTF-16 코드 단위 하나를 담습니다. 문자가 하나도 없는 리터럴 ''는 유효하지 않습니다. 요소가 0개인 빈 char[]는 만들 수 있지만, 이는 char 값이 아닙니다. 텍스트가 없음을 나타내려면 빈 String을 사용하고, 문자 값을 나타내려면 공백이나 U+0000처럼 실제 문자를 선택하세요.
''가 유효하지 않은 이유와 공백의 차이
char 리터럴은 작은따옴표로 감싸며 문자 하나를 포함합니다. char ch = ''; 식은 컴파일되지 않습니다. 반면 ' '는 공백 하나를 담는 유효한 char입니다. 다음 짧은 프로그램은 대괄호 사이에 공백을 표시하고 그 숫자 값을 출력합니다.
public class CharExample {
public static void main(String[] args) {
char space = ' ';
System.out.println("[" + space + "]");
System.out.println((int) space);
}
}
[ ]
32
대괄호를 보면 공백과 양쪽의 텍스트를 구분할 수 있고, 정수 값으로 해당 문자의 값을 확인할 수 있습니다. 공백도 비교나 문자열 연산에서 실제 문자로 취급되므로, 데이터에 공백이 필요한 경우에만 사용하세요.
문자가 없을 때는 빈 String 사용
데이터가 텍스트가 없음을 나타낸다면 String value = "";를 사용하세요. 빈 String의 길이는 0이며, 텍스트 필드나 문자열 연결, 문자열을 받는 API에 적합합니다. String은 char가 아니므로 ""를 기본형 char 변수에 대입할 수 없습니다. 빈 char[]도 만들 수 있지만, 이는 문자 하나가 없는 상태가 아니라 요소가 없는 시퀀스를 나타냅니다.
널 문자에는 \0 또는 \u0000 사용
Java에서 U+0000은 \0 또는 \u0000으로 표기하며, 두 표기는 같은 실제 char 값을 나타냅니다. U+0000을 널 문자라고 부르기도 하지만, 빈 문자는 아니며 일반적으로 Java String의 끝을 나타내지도 않습니다. 출력하면 아무것도 없는 것처럼 보일 수 있으므로 값을 확인하려면 숫자로 살펴보세요. 이 문자는 코드 단위 하나를 차지하며 Java 문자열의 length()에도 포함됩니다.
public class NullCharacterExample {
public static void main(String[] args) {
char shortEscape = '\0';
char unicodeEscape = '\u0000';
String value = "A" + shortEscape + "B";
System.out.println(shortEscape == unicodeEscape);
System.out.println((int) shortEscape);
System.out.println(value.length());
}
}
true
0
3
이 코드는 두 표기의 값이 같은지 비교하고, U+0000을 정수로 변환한 뒤 결과 문자열의 길이를 측정합니다. 터미널에서 어떻게 표시되는지에 의존하지 않고 값과 길이를 확인할 수 있습니다. 문자열에는 A, U+0000, B가 들어 있으므로 길이는 3입니다.
Character.MIN_VALUE 또는 Character의 null 사용
다음 실행 가능한 예제는 문자를 래퍼 객체로 감싸고 그 값과 존재 여부를 출력합니다.
public class CharacterExample {
public static void main(String[] args) {
Character value = Character.valueOf('J');
System.out.println(value);
System.out.println(value == null);
}
}
J
false
Character.MIN_VALUE는 U+0000을 얻는 이름 있는 방법이며, 별도의 빈 값은 아닙니다. 데이터 형식에서 바로 그 문자가 필요할 때 사용하세요. Character 래퍼에는 값이 없음을 나타내기 위해 null을 넣을 수도 있습니다. 이는 char 값이 아니라 참조가 없는 상태이므로, 언박싱하거나 메서드를 호출하기 전에 확인해야 합니다.
Java는 char 인스턴스 필드를 U+0000으로 초기화합니다. 지역 char 변수에는 자동 기본값이 없으므로 읽기 전에 값을 할당해야 합니다. 텍스트가 없으면 String을, 선택적 문자를 나타내려면 null을 담은 Character를, U+0000 자체가 의미 있을 때만 \0을 선택하세요.