소개
Java 는 유니코드 문자를 처리하는 강력한 지원을 제공하여 국제적인 애플리케이션 개발에 탁월한 선택입니다. 유니코드는 플랫폼, 프로그램 또는 언어에 관계없이 모든 문자에 고유한 숫자를 할당하는 범용 문자 인코딩 표준입니다.
이 튜토리얼에서는 실용적인 예제를 통해 Java 에서 유니코드를 사용하는 방법을 살펴보겠습니다. 코드에서 유니코드 문자를 표현하고, 프로그래밍 방식으로 조작하며, 유니코드 입출력 작업을 처리하는 방법을 배우게 됩니다. 이 랩을 마치면 Java 애플리케이션에서 국제 텍스트를 자신 있게 사용할 수 있게 됩니다.
첫 번째 유니코드 Java 프로그램 만들기
이 단계에서는 유니코드 문자를 사용하는 첫 번째 Java 프로그램을 만들 것입니다. Java 가 유니코드를 처리하는 방식을 살펴보고 코드에 다양한 언어의 문자를 통합하는 방법을 알아보겠습니다.
Java 에서 유니코드 이해하기
Java 는 내부적으로 UTF-16 인코딩을 사용합니다. 즉, Java 의 각 문자는 16 비트 유니코드 문자로 표현됩니다. 이를 통해 Java 는 광범위한 국제 문자를 기본적으로 지원할 수 있습니다.
각 유니코드 문자는 문자를 식별하는 숫자 값인 고유한 코드 포인트 (code point) 를 갖습니다. 예를 들어:
- 영어 문자 'A'는 코드 포인트 U+0041 을 갖습니다.
- 중국어 문자 '中'은 코드 포인트 U+4E2D 을 갖습니다.
- 이모지 '😀'는 코드 포인트 U+1F600 을 갖습니다.
유니코드 문자의 사용을 보여주는 간단한 Java 프로그램을 만들어 보겠습니다.
프로그램 생성 및 실행
WebIDE 를 열고 터미널로 이동합니다.
/home/labex/project디렉토리에 있는지 확인합니다.WebIDE 편집기를 사용하여
UnicodeDemo.java라는 새 Java 파일을 만듭니다. 왼쪽 사이드바에서 "Explorer" 아이콘을 클릭한 다음 "New File" 아이콘을 클릭하고 이름을UnicodeDemo.java로 지정합니다.다음 코드를 파일에 추가합니다.
public class UnicodeDemo {
public static void main(String[] args) {
// Unicode characters from different languages
String english = "Hello";
String spanish = "Hola";
String french = "Bonjour";
String chinese = "你好";
String japanese = "こんにちは";
String arabic = "مرحبا";
String russian = "Привет";
// Print all greetings
System.out.println("English: " + english);
System.out.println("Spanish: " + spanish);
System.out.println("French: " + french);
System.out.println("Chinese: " + chinese);
System.out.println("Japanese: " + japanese);
System.out.println("Arabic: " + arabic);
System.out.println("Russian: " + russian);
// Print information about a specific character
char chineseChar = '中';
System.out.println("\nInformation about the character '" + chineseChar + "':");
System.out.println("Unicode code point: " + Integer.toHexString(chineseChar | 0x10000).substring(1).toUpperCase());
System.out.println("Character type: " + Character.getType(chineseChar));
}
}
Ctrl+S를 누르거나 메뉴에서 File > Save 를 선택하여 파일을 저장합니다.터미널에서 다음 명령을 실행하여 프로그램을 컴파일하고 실행합니다.
javac UnicodeDemo.java
java UnicodeDemo
다음과 유사한 출력을 볼 수 있습니다.
English: Hello
Spanish: Hola
French: Bonjour
Chinese: 你好
Japanese: こんにちは
Arabic: مرحبا
Russian: Привет
Information about the character '中':
Unicode code point: 4E2D
Character type: 5
출력 이해하기
이 프로그램은 다양한 언어로 인사를 성공적으로 표시하여 Java 의 유니코드 지원을 보여줍니다. 문자 유형 값 "5"는 Java 의 Character 클래스에서 Character.OTHER_LETTER에 해당하며, '中'이 대문자도 소문자도 아닌 문자로 분류됨을 나타냅니다.
이 예제는 Java 가 특별한 구성 없이도 다양한 문자 체계의 문자를 처리할 수 있음을 보여줍니다. 유니코드 문자는 소스 코드에 직접 포함되며 Java 는 이를 올바르게 처리하고 표시합니다.
유니코드 이스케이프 시퀀스 사용하기
이 단계에서는 Java 에서 이스케이프 시퀀스를 사용하여 유니코드 문자를 표현하는 방법을 배우겠습니다. 이는 코드에 유니코드 문자를 포함해야 하지만 해당 문자의 직접 입력을 지원하지 않을 수 있는 텍스트 편집기 또는 환경과의 호환성을 보장하려는 경우에 유용합니다.
유니코드 이스케이프 시퀀스
Java 에서는 \u 이스케이프 시퀀스 뒤에 4 자리 16 진수 코드 포인트를 사용하여 모든 유니코드 문자를 표현할 수 있습니다. 예를 들어:
\u0041은 'A'를 나타냅니다.\u4E2D는 '中'을 나타냅니다.
기본 다국어 평면 (BMP, Basic Multilingual Plane) 을 벗어나는 문자의 경우, 4 자리 16 진수 이상이 필요한 경우, Java 12 이상에서 서러게이트 쌍 (surrogate pairs) 또는 새로운 \u{...} 구문을 문자열 리터럴에서 사용할 수 있습니다.
유니코드 이스케이프 시퀀스를 보여주는 새 프로그램을 만들어 보겠습니다.
프로그램 만들기
/home/labex/project디렉토리에UnicodeEscapeDemo.java라는 새 파일을 만듭니다.다음 코드를 파일에 추가합니다.
public class UnicodeEscapeDemo {
public static void main(String[] args) {
// Unicode escape sequences
char charA = '\u0041'; // Latin capital 'A'
char charZ = '\u005A'; // Latin capital 'Z'
char charCopyright = '\u00A9'; // Copyright symbol ©
char charEuro = '\u20AC'; // Euro symbol €
char charChinese = '\u4E2D'; // Chinese character '中'
System.out.println("Using Unicode escape sequences:");
System.out.println("\\u0041: " + charA);
System.out.println("\\u005A: " + charZ);
System.out.println("\\u00A9: " + charCopyright);
System.out.println("\\u20AC: " + charEuro);
System.out.println("\\u4E2D: " + charChinese);
// Comparing direct characters and escape sequences
System.out.println("\nComparing direct characters and escape sequences:");
System.out.println("Direct 'A' == \\u0041: " + ('A' == '\u0041'));
System.out.println("Direct '©' == \\u00A9: " + ('©' == '\u00A9'));
System.out.println("Direct '中' == \\u4E2D: " + ('中' == '\u4E2D'));
// Exploring character properties
System.out.println("\nExploring properties of Unicode characters:");
examineCharacter('A');
examineCharacter('9');
examineCharacter('©');
examineCharacter('中');
}
private static void examineCharacter(char c) {
System.out.println("\nCharacter: " + c);
System.out.println("Unicode code point: \\u" +
Integer.toHexString(c | 0x10000).substring(1).toUpperCase());
System.out.println("Is letter? " + Character.isLetter(c));
System.out.println("Is digit? " + Character.isDigit(c));
System.out.println("Is whitespace? " + Character.isWhitespace(c));
System.out.println("Is symbol? " + Character.isISOControl(c));
}
}
Ctrl+S를 누르거나 메뉴에서 File > Save 를 선택하여 파일을 저장합니다.터미널에서 다음 명령을 실행하여 프로그램을 컴파일하고 실행합니다.
javac UnicodeEscapeDemo.java
java UnicodeEscapeDemo
다음과 유사한 출력을 볼 수 있습니다.
Using Unicode escape sequences:
\u0041: A
\u005A: Z
\u00A9: ©
\u20AC: €
\u4E2D: 中
Comparing direct characters and escape sequences:
Direct 'A' == \u0041: true
Direct '©' == \u00A9: true
Direct '中' == \u4E2D: true
Exploring properties of Unicode characters:
Character: A
Unicode code point: \u0041
Is letter? true
Is digit? false
Is whitespace? false
Is symbol? false
Character: 9
Unicode code point: \u0039
Is letter? false
Is digit? true
Is whitespace? false
Is symbol? false
Character: ©
Unicode code point: \u00A9
Is letter? false
Is digit? false
Is whitespace? false
Is symbol? false
Character: 中
Unicode code point: \u4E2D
Is letter? true
Is digit? false
Is whitespace? false
Is symbol? false
코드 이해하기
이 프로그램은 몇 가지 중요한 개념을 보여줍니다.
유니코드 이스케이프 시퀀스 (Unicode Escape Sequences): 유니코드 이스케이프 시퀀스 (
\uXXXX) 를 사용하여 문자를 정의합니다.문자 동일성: 프로그램은 직접 정의된 문자 ('A') 가 이스케이프 시퀀스 ('u0041') 를 사용하여 정의된 문자와 동일함을 보여줍니다.
문자 속성:
examineCharacter메서드는Character클래스를 사용하여 문자가 문자, 숫자 또는 공백인지 여부와 같은 다양한 유니코드 문자의 속성을 검사합니다.
유니코드 이스케이프 시퀀스를 사용하는 것은 특히 다음과 같은 경우에 유용합니다.
- 코드가 유니코드를 제대로 처리하지 않는 도구로 처리되어야 하는 경우
- 소스 코드에서 정확한 코드 포인트를 명시적으로 지정하려는 경우
- 입력하기 어렵거나 다른 문자와 시각적으로 유사한 문자를 포함해야 하는 경우
파일로 유니코드 읽기 및 쓰기
이 단계에서는 유니코드 문자를 파일로 읽고 쓰는 방법을 배우겠습니다. 특히 국제 텍스트를 다룰 때 파일 작업 시 문자 인코딩을 적절하게 처리하는 것이 중요합니다.
문자 인코딩 이해하기
텍스트를 파일에 쓰거나 파일에서 읽을 때는 문자 인코딩을 지정해야 합니다. 유니코드 텍스트에 가장 일반적이고 권장되는 인코딩은 UTF-8 입니다.
- UTF-8은 모든 유니코드 문자를 표현할 수 있는 가변 너비 인코딩입니다.
- ASCII 와 하위 호환됩니다.
- HTML, XML 및 많은 최신 시스템의 기본 인코딩입니다.
Java 는 UTF-8, UTF-16 및 ISO-8859-1 과 같은 표준 문자 집합에 대한 상수를 포함하는 java.nio.charset.StandardCharsets 클래스를 제공합니다.
유니코드 텍스트를 파일로 읽고 쓰는 것을 보여주는 프로그램을 만들어 보겠습니다.
유니코드 파일 작성기 만들기
/home/labex/project디렉토리에UnicodeFileDemo.java라는 새 파일을 만듭니다.다음 코드를 파일에 추가합니다.
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.util.*;
public class UnicodeFileDemo {
private static final String FILE_PATH = "unicode_sample.txt";
public static void main(String[] args) {
try {
// Create a list of greetings in different languages
List<String> greetings = Arrays.asList(
"English: Hello, World!",
"Spanish: ¡Hola, Mundo!",
"French: Bonjour, le Monde!",
"German: Hallo, Welt!",
"Chinese: 你好,世界!",
"Japanese: こんにちは、世界!",
"Arabic: مرحبا بالعالم!",
"Russian: Привет, мир!",
"Greek: Γειά σου, Κόσμε!",
"Hindi: नमस्ते, दुनिया!",
"Emoji: 👋🌍!"
);
// Write greetings to file
writeToFile(greetings);
System.out.println("Successfully wrote Unicode text to " + FILE_PATH);
// Read and display file contents
List<String> readLines = readFromFile();
System.out.println("\nFile contents:");
for (String line : readLines) {
System.out.println(line);
}
// Display encoding information
System.out.println("\nEncoding information:");
System.out.println("Default charset: " + System.getProperty("file.encoding"));
System.out.println("Is UTF-8 supported? " + StandardCharsets.UTF_8.canEncode());
} catch (IOException e) {
System.err.println("Error processing the file: " + e.getMessage());
e.printStackTrace();
}
}
private static void writeToFile(List<String> lines) throws IOException {
// Write using Files class with UTF-8 encoding
Files.write(Paths.get(FILE_PATH), lines, StandardCharsets.UTF_8);
}
private static List<String> readFromFile() throws IOException {
// Read using Files class with UTF-8 encoding
return Files.readAllLines(Paths.get(FILE_PATH), StandardCharsets.UTF_8);
}
}
Ctrl+S를 누르거나 메뉴에서 File > Save 를 선택하여 파일을 저장합니다.터미널에서 다음 명령을 실행하여 프로그램을 컴파일하고 실행합니다.
javac UnicodeFileDemo.java
java UnicodeFileDemo
다음과 유사한 출력을 볼 수 있습니다.
Successfully wrote Unicode text to unicode_sample.txt
File contents:
English: Hello, World!
Spanish: ¡Hola, Mundo!
French: Bonjour, le Monde!
German: Hallo, Welt!
Chinese: 你好,世界!
Japanese: こんにちは、世界!
Arabic: مرحبا بالعالم!
Russian: Привет, мир!
Greek: Γειά σου, Κόσμε!
Hindi: नमस्ते, दुनिया!
Emoji: 👋🌍!
Encoding information:
Default charset: UTF-8
Is UTF-8 supported? true
출력 파일 검토
만든 파일을 살펴보겠습니다.
WebIDE 파일 탐색기를 사용하여
/home/labex/project디렉토리에 생성된unicode_sample.txt파일을 엽니다.다양한 언어로 된 모든 인사가 유니코드 문자와 함께 제대로 표시되는 것을 볼 수 있습니다.
코드 이해하기
이 프로그램은 파일에서 유니코드 작업을 수행하는 방법에 대한 몇 가지 주요 사항을 보여줍니다.
명시적 인코딩 지정:
StandardCharsets.UTF_8을 사용하여 파일에 쓰고 읽을 때 UTF-8 인코딩을 명시적으로 지정합니다. 이렇게 하면 유니코드 문자가 올바르게 보존됩니다.최신 파일 I/O: 특정 문자 인코딩으로 파일을 읽고 쓰는 데 편리한 메서드를 제공하는
java.nio.file.Files클래스를 사용합니다.기본 인코딩: 이 프로그램은 운영 체제 및 로캘 설정에 따라 달라질 수 있는 시스템의 기본 문자 인코딩을 표시합니다.
이모지 지원: 이 프로그램에는 Java 와 UTF-8 이 유니코드의 보조 평면 (supplementary planes) 의 문자를 처리할 수 있음을 보여주는 이모지 예제 (👋🌍) 가 포함되어 있습니다.
파일에서 유니코드로 작업할 때는 항상 다음 사항을 기억하십시오.
- 인코딩을 명시적으로 지정합니다 (가급적 UTF-8).
- 읽기 및 쓰기에 동일한 인코딩을 사용합니다.
- 파일 작업 중에 발생할 수 있는 잠재적인
IOException을 처리합니다. - 시스템의 기본 인코딩을 알고 있지만, 이에 의존하지 마십시오.
요약
이 튜토리얼에서는 Java 에서 유니코드 문자를 사용하는 데 필요한 필수적인 측면을 배웠습니다. 다음은 지금까지 배운 내용에 대한 요약입니다.
유니코드 기본 사항: Java 의 내장 유니코드 지원을 보여주는 여러 언어로 텍스트를 표시하는 기본적인 Java 프로그램을 만들었습니다.
유니코드 이스케이프 시퀀스: 문자를 표현하기 위해 유니코드 이스케이프 시퀀스 (
\uXXXX) 를 사용하는 방법을 배우고 다양한 유형의 유니코드 문자의 속성을 탐구했습니다.유니코드 파일 I/O: UTF-8 을 사용하여 적절한 문자 인코딩을 보장하면서 유니코드 텍스트를 파일로 읽고 쓰는 프로그램을 구현했습니다.
이러한 개념을 마스터함으로써 이제 국제 텍스트를 올바르게 처리할 수 있는 Java 애플리케이션을 개발할 수 있습니다. 이는 글로벌 사용자를 위한 소프트웨어를 만드는 데 필수적인 기술입니다.
이 튜토리얼에서 얻은 몇 가지 주요 사항은 다음과 같습니다.
- Java 는 내부적으로
char타입에 UTF-16 인코딩을 사용합니다. - 유니코드 문자는 직접 또는 이스케이프 시퀀스를 사용하여 표현할 수 있습니다.
- 파일에서 읽거나 쓸 때는 항상 인코딩 (가급적 UTF-8) 을 지정합니다.
Character클래스는 유니코드 문자의 속성을 검사하는 메서드를 제공합니다.- 최신 Java 의 NIO 패키지 (
java.nio) 는 파일에서 유니코드 작업을 위한 강력한 지원을 제공합니다.
이러한 지식을 갖추면 모든 언어로 텍스트를 원활하게 처리하는 Java 애플리케이션을 자신 있게 만들 수 있습니다.



