나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2022-05-03 17:34:32

ICU(소프트웨어)

International Components for Unicode
ICU 홈페이지(영어)
1. 개요2. 역사3. 내용
3.1. 문자열 처리: char & string3.2. 코드 변환: conversion3.3. 로캘: locale3.4. 날짜와 시간: date/time3.5. 포매팅: formatting3.6. 변환: transform3.7. 순서: collation3.8. 경계 분석: boundary analysis

1. 개요

컴퓨터 소프트웨어에서 유니코드를 다루기 위한 C/C++, Java용 멀티 플랫폼 오픈 소스 라이브러리. 지원하는 기능들 중 일부분은 다른 라이브러리들에서 더 가볍고 빠르게 지원하는 것들도 있지만(예를 들어 유니코드 코드 변환은 iconv 등), 최신 유니코드 표준을 거의 그대로 100% 지원하는 것을 목표로 하고 있기 때문에, 소프트웨어를 여러 국가의 문자, 언어 체계에 맞게 돌아가도록 하는 국제화(internationalization, globalization)에서 거의 끝판왕 위치를 차지하고 있다. 한글을 제대로 지원하는 서구권에서 만들어진 게임 등을 보면 거의 꼭 들어가 있다. 대표적인 예가 시드 마이어문명 5.

2. 역사

애플에서 Mac OS를 대체하기 위해 만들던 Taligent OS가 그 시초이다. Taligent 개발을 위해 애플과 IBM이 같이 손 잡고 일하다 Taligent를 IBM에 넘겨 버린 후 Taligent에 있던 유니코드와 국제화 관련 코드들을 따로 빼서 정리한 게 ICU4C(ICU C/C++)가 되었다. 당시 썬 마이크로시스템즈의 Java 팀이 IBM 바로 옆에 위치해 있었는데, 자바에 '유니코드랑 국제화에 도움 좀 주실 수 있나요?'라고 했더니 마침 가지고 있던 걸 주어 ICU4J(Java용 ICU)가 탄생하게 되었다.

그 뒤 1999년 IBM에서는 ICU를 오픈 소스 프로젝트로 전환하여 공개한 후 유니코드 표준이 변경되는 것에 맞추어 지속적으로 업데이트하고 있다.

3. 내용

3.1. 문자열 처리: char & string

문자열의 길이, 인덱스, 위치 등을 다루기 위한 많은 함수들이 있다. Standard C Library에 있는 strlen, strcat 등의 함수는 아스키 코드만을 다루기 위한 함수이지만, 유니코드에 대응되는 함수들을 ICU에서 제공하고 있다. 뿐만 아니라 문자(열)의 속성(알파벳인지 숫자인지 기호인지 등등), 문자열 반복자(iterator), 정규표현식까지도 지원한다.

3.2. 코드 변환: conversion

ASCII, EBCDIC은 물론 ISO가 정의한 각종 코드들은 물론 UTF-8, UTF-16(LE/BE), UTF-32 등 컴퓨터에서 쓰이는 거의 모든 코드들을 서로 변환해 줄 수 있는 기능을 가지고 있다.

3.3. 로캘: locale

이 자체로 뭔가 기능을 하지는 않지만 ICU의 다른 기능을 위한 기초 역할을 하는 개념에 가까운 기본 클래스. 언어(language), 문자 체계(script), 국가(country)의 개념을 분리하여 정의하도록 한 뒤 이를 바탕으로 문자열 등의 처리 기준을 명확하도록 한다. 예를 들자면이렇듯 같은 글자나 언어라도 사용되는 국가에 따라 다른 처리가 필요한 경우, 아니면 반대로 한 국가에서 여러 가지 공식 언어나 공식 문자가 있는 경우 처리를 달리하기 위해 locale을 정의한 뒤 이를 바탕으로 문자열 처리 등을 해야 한다.

3.4. 날짜와 시간: date/time

각종 날짜와 시간을 다루는 함수들. Standard C Library 등에 있는 날짜/시간 함수의 유니코드 대응은 물론 좀 더 다양하고 강력한 기능들을 제공해 준다.

3.5. 포매팅: formatting

3.6. 변환: transform

3.7. 순서: collation

각종 언어와 글자에 대한 (정렬할 때의) 순서, 검색 등을 처리한다. 같은 한글도 대한민국 표준어북한 문화어의 순서가 다르고, 독일어의 경우 사전에서의 순서(of < öf)와 전화번호부에서의 순서(öf < of)가 다르다. 정렬/순서 문서도 참고할 것.

3.8. 경계 분석: boundary analysis

각국 글자의 문자/문자열/문장의 경계가 어디인지를 해당 국가/언어/글자에 따라 분석해 준다.
프랑스어로 예를 들자면 다음과 같다.