International Components for Unicode

**International Components for Unicode**(**ICU**)는 성숙한 C/C++ 및 자바 라이브러리를 통해 유니코드 지원, 소프트웨어 국제화 및 소프트웨어 세계화를 지원하는 오픈 소스 프로젝트이다. ICU는 다양한 운영체제와 환경으로의 이식성이 매우 높다. 모든 플랫폼에서, 그리고 C, C++, 자바 소프트웨어 간에 애플리케이션에 동일한 결과를 제공한다. ICU 프로젝트는 유니코드 컨소시엄의 기술 위원회이며, IBM을 비롯한 여러 기업의 후원과 지원을 받으며 사용되고 있다. ICU는 윈도우 10 버전 1703부터 마이크로소프트 윈도우의 표준 구성 요소로 포함되었다.

ICU는 다음과 같은 서비스를 제공한다. 유니코드 텍스트 처리, 전체 문자 속성 및 문자 집합 변환, 유니코드 정규 표현식, 전체 유니코드 세트, 문자·단어·행 경계 판별, 언어별 데이터 정렬 및 검색, 유니코드 정규화, 대소문자 변환 및 문자 체계 전자, CLDR을 통한 포괄적인 로케일 데이터 및 리소스 번들 아키텍처, 다양한 역법 및 시간대, 규칙 기반의 날짜·시간·숫자·통화·메시지 형식화 및 파싱 등을 지원한다. ICU는 과거에 아랍어, 히브리어, 인도계 문자, 타이 문자를 위한 복잡한 텍스트 레이아웃 서비스를 제공했으나, 버전 54에서 더 이상 권장되지 않게 되었고(deprecated), 버전 58에서 하프버즈로 대체되며 완전히 제거되었다.

ICU는 C 및 C++ 표준 라이브러리보다 더 광범위한 국제화 기능을 제공한다. 2024년 4월로 예정된 ICU 75는 사용되는 언어에 따라 C++17 (C++11에서 상향) 또는 C11 (C99에서 상향)을 요구할 계획이다. ICU는 역사적으로 UTF-16을 사용해 왔으며 자바에서는 여전히 이를 사용한다. C/C++의 경우 "불법 UTF-8"에 대한 올바른 처리를 포함하여 UTF-8을 지원한다.

ICU 73.2는 GB 18030-2022 준수 지원을 위해 중요한 변경 사항을 개선했다. 즉, 중국을 위해 (업데이트된 중국 GB 18030 유니코드 변환 형식 표준은 약간 호환되지 않음) "수정된 문자 변환 테이블을 사용하여 일부 GB 18030 문자를 GB 18030-2005 이후 인코딩된 유니코드 문자로 매핑"하며, 일본어와 한국어의 짧은 텍스트 행 바꿈 개선, "영어에서 국가명으로 'Turkey' 대신 'Türkiye'를 사용(데이터에서 대체 철자도 사용 가능)"하는 등의 여러 변경 사항이 포함되었다.

ICU 74는 "새로운 문자, 이모지, 보안 메커니즘, 해당 API 및 구현을 포함하여 유니코드 15.1로 업데이트되었다.  [..] ICU 74 및 CLDR 44는 새로운 유니코드 버전과 주요 로케일 데이터 개선 사항을 포함하는 주요 릴리스이다." 많은 변경 사항 중 일부는 인명 형식화 또는 저지 독일어와 같은 개선된 언어 지원을 위한 것이며, (최신 버전) 유니코드 15.1.0 UTS #39: 유니코드 보안 메커니즘을 따르는 새로운 스푸프 체커 API 등이 포함되어 있다.

## 이전 버전 상세 사항
ICU 72는 유니코드 15로 업데이트되었다(73.2는 최신 15.1로 업데이트). "많은 형식화 패턴에서 ASCII **[[공백 (문장 부호)|공백]]**이 유니코드 공백(예: "얇은 공백")으로 대체되었다." ICU (ICU4J)는 이제 자바 8을 요구하지만, "대부분의 ICU 72 라이브러리 코드는 여전히 자바 7 / 안드로이드 API 레벨 21에서 작동해야 하지만, 더 이상 자바 7로 테스트하지 않는다." ICU 71은 일본어를 위한 구문 기반 행 바꿈(이전 방식은 제목이나 헤드라인 같은 짧은 일본어 텍스트에 잘 작동하지 않았음)과 라틴 문자로 표기된 힌디어(hi_Latn), 즉 "힌글리시" 지원을 추가했다. ICU 70은 문자열의 이모지 속성 지원 등을 추가했으며 이제 C++20 컴파일러로 빌드 및 사용할 수 있다("ICU operator==() 및 operator!=() 함수는 이제 C++20의 호환되지 않는 변경에 대한 조정으로 UBool 대신 bool을 반환한다"). 해당 버전부터 최소 윈도우 버전은 윈도우 7이다. ICU 67은 EU에서 영국의 탈퇴를 처리한다. ICU 64.2는 유니코드 12.1 지원, 즉 현재 일본의 레이와 시대를 위한 단일 새 기호를 추가했다(단, 이에 대한 지원은 ICU 4.8.2까지 이전 버전으로 백포트되었다). ICU 58(유니코드 9.0 지원)은 윈도우 XP 및 윈도우 비스타와 같은 구형 플랫폼을 지원하는 마지막 버전이다. IBM AIX, 솔라리스 및 Z/OS 지원도 이후 버전에서는 제한될 수 있다(즉, 빌드가 컴파일러 지원에 따라 달라짐).

## 기원 및 개발
1996년 초 Taligent가 IBM의 일부가 된 후, 썬 마이크로시스템즈는 새로운 자바 언어가 국제화를 더 잘 지원해야 한다고 결정했다. Taligent는 이러한 기술에 경험이 있었고 지리적으로도 가까웠기 때문에, 그들의 텍스트 및 국제화 그룹은 JDK 1.1 국제화 API의 일부로서 자바 개발 키트에 국제화 클래스를 기여해 달라는 요청을 받았다. 이 코드의 상당 부분은 여전히  및  패키지에 존재한다. 이후 자바의 각 릴리스마다 추가적인 국제화 기능이 더해졌다.

자바 국제화 클래스는 이후 ICU4C ("C용 ICU")로 알려진 라이브러리의 일부로 C++ 및 C로 포팅되었다. ICU 프로젝트는 또한 표준 자바 라이브러리에는 없는 기능을 추가하는 ICU4J ("자바용 ICU")를 제공한다. ICU4C와 ICU4J는 매우 유사하지만 동일하지는 않다. 예를 들어 ICU4C는 정규 표현식 API를 포함하지만 ICU4J는 포함하지 않는다. 두 프레임워크 모두 유니코드 및 공통 로케일 데이터 저장소(CLDR)의 새로운 기능과 시설을 지원하기 위해 시간이 지남에 따라 향상되었다.

ICU는 1999년에 'IBM Classes for Unicode'라는 이름으로 오픈 소스 프로젝트로 공개되었다. 나중에 'International Components For Unicode'로 이름이 변경되었다. 2016년 5월, ICU 프로젝트는 유니코드 컨소시엄에 기술 위원회 ICU-TC로 합류했으며, 라이브러리 소스는 이제 유니코드 라이선스 하에 배포된다.

## MessageFormat
ICU의 일부인 **MessageFormat** 클래스는 복수형(, )이나 문법적 성과 같은 것들을 위한 일반적인 switch-case 스타일의 선택()을 제어하기 위해 임의의 개수의 인수를 허용하는 형식화 시스템이다. 이러한 구문은 중첩될 수 있다. ICU MessageFormat은 자바 SE의 동일한 이름의 시스템에 복수형 및 선택 시스템을 추가하여 만들어졌다.

## 대안
C++에서 ICU를 사용하거나 직접 사용하는 것에 대한 대안으로, ICU의 C++ 래퍼인 Boost.Locale을 사용하는 방법이 있다 (다른 백엔드도 허용함). ICU를 직접 사용하는 대신 이것을 사용하는 주된 이유는 ICU가 "C++ 개발자에게 절대적으로 불친절하다. 대중적인 C++ 관용구(STL, RTTI, 예외 등)를 무시하고 대신 자바 API를 거의 흉내 낸다"는 주장 때문이다. ICU가 UTF-16만 지원한다는 또 다른 주장은 (따라서 ICU 사용을 피해야 한다는 이유) 이제 ICU가 C 및 C++에서 UTF-8도 지원함에 따라 더 이상 사실이 아니다.

## 같이 보기
* 애플 어드밴스드 타이포그래피
* 유니코드 이미징을 위한 애플 타입 서비스
* Gettext
* 그래파이트 (SIL)
* NetRexx (ICU 라이선스)
* 오픈타입
* Pango
* Uconv
* 유니스크라이브

## 각주

## 외부 링크
* 
* International Components for Unicode transliteration services

분류:유니코드
분류:디지털 타이포그래피
분류:패턴 매칭
분류:국제화와 지역화
분류:컴포넌트 기반 소프트웨어 공학
분류:자유 라이브러리