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을 선택하세요.