HOWTO · Java
Java에서 int를 char로 변환하는 방법
이 튜토리얼에서는 char로 캐스팅하거나, Character.forDigit()를 사용하거나, Integer.toString()의 첫 번째 문자를 가져오는 방법으로 Java에서 int를 char로 변환하는 방법을 보여줍니다。
이 페이지의 내용
Java에서는 int가 무엇을 나타내는지에 따라 연산을 선택하세요. UTF-16 코드 단위라면 (char)로 캐스팅하고, 특정 진법의 한 자리 숫자라면 Character.forDigit()을 사용하세요. 10진수 표기의 첫 문자가 필요할 때는 Integer.toString()을 사용하면 됩니다. 세 연산은 결과가 서로 다르므로 용도를 구분해야 합니다.
int를 char로 캐스팅하기
캐스팅은 정수 값을 UTF-16 코드 단위로 해석하며, 숫자를 10진수 문자열로 바꾸지는 않습니다. 예를 들어 코드 단위 65는 A에 해당합니다. 문자 1을 얻으려면 정수가 해당 문자를 나타내야 합니다(예: 문자 리터럴 '1'). 또는 0부터 9까지의 숫자에 '0'을 더해도 됩니다.
Java의 char에는 16비트 UTF-16 코드 단위 하나가 저장됩니다. int를 char로 캐스팅하면 값의 범위가 좁아져 그 크기에 맞게 변환됩니다. 따라서 입력이 이미 코드 단위를 나타낼 때 유용합니다. 이 캐스팅은 범위를 검사하지 않습니다. char가 표현할 수 있는 범위를 벗어난 값도 오류를 내지 않으며, 결과 코드 단위가 의도한 문자와 다를 수 있습니다. 사용자 입력이나 파일에서 값을 읽는 경우, 원래 숫자 값의 의미를 보존해야 한다면 캐스팅 전에 유효성을 검사하세요.
이 구분은 유니코드에서도 중요합니다. 익숙한 기호 중 상당수는 char 하나에 들어가지만, 보충 유니코드 코드 포인트는 서로게이트 쌍이라고 하는 UTF-16 코드 단위 두 개로 표현됩니다. char 하나로는 코드 포인트 전체를 담을 수 없습니다. 이런 문자가 데이터에 포함될 수 있다면 문자열이나 코드 포인트를 처리하는 연산을 사용하세요. ASCII 10진수 숫자의 경우 '0'을 더하는 방식은 값이 0부터 9까지일 때만 사용할 수 있습니다. 이 열 개의 숫자 문자는 코드 단위 값이 연속적이기 때문이며, 일반적인 숫자-문자열 변환 방법은 아닙니다.
Character.forDigit()으로 숫자 한 자리 변환하기
Character.forDigit()은 유효한 숫자 값 하나를 지정한 진법에 맞는 문자로 변환합니다. 진법이 10일 때 값 6은 '6'을 나타내고, 진법이 16일 때 값 12는 'c'를 나타냅니다. 숫자 값은 0 이상 진법 미만이어야 하며, 진법은 2부터 36 사이여야 합니다. 두 인수 중 하나라도 유효 범위를 벗어나면 이 메서드는 null이 아니라 NUL 문자 (\u0000)를 반환합니다.
출력할 전체 숫자가 아니라 한 자리만 나타낼 때 이 메서드를 사용하세요. 예를 들어 16진수의 진법은 16이며, 값 0부터 15까지를 사용합니다. 값 10부터 15까지는 각각 문자 a부터 f로 변환됩니다. 반환되는 문자는 소문자입니다. 출력 형식에 대문자 16진수가 필요하다면 유효한 숫자를 선택한 뒤 반환된 문자에 Character.toUpperCase()를 적용하세요. 역변환을 위한 Character.digit(character, radix)는 진법에 해당하는 숫자 문자를 숫자 값으로 바꿉니다.
NUL 결과는 값이 \u0000인 char입니다. Java 참조형의 null과는 다르며, 많은 터미널에서는 아무것도 표시되지 않습니다. 프로그램 외부에서 입력을 받을 수 있다면 진법과 숫자 값의 범위를 직접 검사해 이 결과를 변환 성공으로 오해하지 않도록 하세요. 42와 같은 전체 숫자를 변환하려면 Character.forDigit()을 한 번 호출하는 대신 형식 지정이나 문자열 변환 연산을 사용하세요.
Integer.toString()에서 첫 문자 가져오기
Integer.toString(value).charAt(0)은 정수를 10진수 문자열로 변환한 다음 첫 문자만 가져옵니다. 값이 1이면 그 문자는 '1'입니다. 여러 자릿수인 값에서는 숫자 전체를 나타내는 char가 아니라 맨 앞 문자만 반환합니다.
예를 들어 값 42는 문자열 "42"가 되므로 charAt(0)은 '4'를 반환합니다. 음수는 마이너스 기호로 시작하므로, 값이 -42라면 이 식은 '-'를 반환합니다. 10진수 표기의 첫 문자를 확인하거나 표시하려는 경우에 적합한 방법입니다. 모든 숫자가 필요하다면 결과를 String으로 유지하세요. char 하나로는 여러 문자로 된 숫자를 나타낼 수 없습니다.
입력의 의미에 따라 선택하세요. UTF-16 코드 단위에는 캐스팅을, 선택한 진법의 한 자리 숫자에는 Character.forDigit()을, 10진수 문자열의 첫 문자에는 Integer.toString()과 charAt(0)을 사용합니다. 이렇게 구분하면 숫자 값 65를 문자열 "65"의 두 문자와 혼동하지 않을 수 있습니다.
아래 프로그램은 앞에서 설명한 값으로 세 가지 연산을 모두 보여 줍니다. 각 연산을 소개한 순서대로 변환된 문자를 출력합니다.
public class IntToCharExample {
public static void main(String[] args) {
int codeUnit = 65;
char letter = (char) codeUnit;
int literalDigitValue = '1';
char literalDigit = (char) literalDigitValue;
int digit = 1;
char addedZeroDigit = (char) (digit + '0');
char decimalDigit = Character.forDigit(6, 10);
char hexadecimalDigit = Character.forDigit(12, 16);
int value = 1;
char firstCharacter = Integer.toString(value).charAt(0);
System.out.println(letter);
System.out.println(literalDigit);
System.out.println(addedZeroDigit);
System.out.println(decimalDigit);
System.out.println(hexadecimalDigit);
System.out.println(firstCharacter);
}
}
A
1
1
6
c
1