Basic Multilingual Plane (BMP)

2023. 6. 3. 13:27High Level Programming Language

🔥 Basic Multilingual Plane (BMP)

1. BMP란 무엇인가?

Basic Multilingual Plane (BMP)
유니코드(Unicode)에서 가장 기본적인 문자들을 모아놓은 영역입니다.

  • 코드 포인트 범위: U+0000 ~ U+FFFF (16비트 = 65,536개)
  • UTF-16에서 Surrogate Pair 없이 단일 16비트(2바이트)로 직접 표현할 수 있는 문자 영역입니다.

요약하면,

BMP = 유니코드에서 가장 많이 쓰이는 문자들을 모아놓은 "기본 구역"

입니다.

 

2. 왜 "Basic" Multilingual Plane인가?

유니코드가 처음 설계될 때,
전 세계 주요 문자들은 16비트(= 65,536개) 안에 다 담을 수 있을 것이라고 예상했습니다.

그래서 처음에 정의된 영역을 "Basic Multilingual Plane"이라고 이름 붙였습니다.

  • "Basic": 기본적인 문자들을 담는다
  • "Multilingual": 다양한 언어를 지원한다
  • "Plane": 유니코드에서 "평면(Plane)" = 하나의 큰 번호 영역을 뜻함

 

3. BMP에 포함된 문자들

BMP에는 다음과 같은 대부분의 실생활 문자가 포함되어 있습니다:

문자 종류 예시
라틴 문자 영어, 프랑스어, 독일어, 이탈리아어 등
그리스 문자 그리스어 알파벳
키릴 문자 러시아어, 우크라이나어
한글 음절 가, 나, 다, ... (완성형 한글)
한자(CJK Ideographs) 중국어, 일본어, 한국어 한자
히브리 문자 히브리어
아랍 문자 아랍어
데바나가리 문자 힌디어, 산스크리트어
기타 고대 문자 일부 예: 히에로글리프 일부
특수 기호 수학 기호, 화살표, 도형 문자

 

4. BMP 내부 상세 구성

BMP는 단순히 문자가 나열되어 있는 것이 아니라,
특정 블록(Block) 단위로 세분화되어 있습니다.

 

예시:

블록 이름 범위 설명
Basic Latin U+0000 ~ U+007F ASCII와 동일
Latin-1 Supplement U+0080 ~ U+00FF 서유럽어 추가 문자
Hangul Syllables U+AC00 ~ U+D7AF 한글 완성형 (가~힣)
CJK Unified Ideographs U+4E00 ~ U+9FFF 공통 한자
Arabic U+0600 ~ U+06FF 아랍어 문자
Greek and Coptic U+0370 ~ U+03FF 그리스어 문자

 

 

특징:

  • 하나의 블록은 보통 특정 언어 또는 문자군에 대응.
  • 사용 빈도에 따라 다양한 언어가 균형 있게 포함되어 있음.

 

5. BMP와 보조 평면(Supplementary Planes)의 관계

보조 평면은
기존 Basic Multilingual Plane (BMP, Plane 0)로 담을 수 없는 문자를
수용하기 위해 추가로 정의된 유니코드의 추가 영역입니다.
처음 유니코드는 "65,536개면 전 세계 문자를 충분히 담을 수 있을 것"이라고 예상했습니다.
하지만 현실은...

  • 고대 문자 (이집트 상형문자, 수메르 문자 등)
  • 추가 한자 (중국, 일본, 한국 확장 한자)
  • 이모지(Emoji)
  • 특수 음악 기호, 수학 기호

등이 새롭게 필요해지면서, BMP 영역만으로는 부족하게 되었습니다.

그래서 BMP를 넘는 코드 포인트를 정의하기 위해 보조 평면(Supplementary Planes)을 설계했습니다.

즉,

"BMP(Plane 0)만으로 부족해서 생긴,
Plane 1~Plane 16까지의 확장 공간"입니다.

 

평면 범위 주요 내용
Plane 0 U+0000 ~ U+FFFF Basic Multilingual Plane (BMP)
Plane 1 U+10000 ~ U+1FFFF Supplementary Multilingual Plane (SMP) — 고대 문자, 이모지
Plane 2 U+20000 ~ U+2FFFF Supplementary Ideographic Plane (SIP) — 확장 한자
Plane 14 U+E0000 ~ U+EFFFF Supplementary Special-purpose Plane (SSP) — 특수 목적 기호

 

BMP는 Plane 0이라고도 부릅니다.

 

6. UTF-16과 BMP의 특별한 관계

UTF-16은 원래 BMP만 지원하려고 설계되었습니다.

  • BMP 문자는 UTF-16에서 단일 16비트로 표현 가능 → Surrogate Pair 불필요
  • 보조 평면 문자는 Surrogate Pair(4바이트)가 필요

따라서, BMP 문자는 UTF-16에서 2바이트만으로 처리할 수 있어서 빠르고 간단합니다.

 

7. BMP의 한계와 현실

BMP가 처음 설계될 당시엔 충분했지만,
시간이 지나면서 추가로 필요한 문자가 많아졌습니다:

  • 다양한 이모지 (😊, 🏳️‍🌈 등)
  • 드물게 사용되는 고대 문자 (예: Linear B, 고대 이집트 상형문자)
  • 추가 한자 (CJK Extension B ~ G)

결국 BMP만으로는 부족해서 보조 평면이 필수화되었습니다.
하지만 여전히 일상에서 사용하는 대부분의 텍스트는 BMP에 존재합니다.

 

✨ 요약

항목 내용
정의 유니코드에서 가장 기본적인 문자 집합 (Plane 0)
범위 U+0000 ~ U+FFFF (16비트)
특징 주요 세계 언어의 대부분 문자 포함, UTF-16에서 2바이트로 표현 가능
보조 평면과 관계 보조 평면은 BMP로 부족한 문자 추가를 위해 만들어짐
사용 비율 현대 일반 텍스트의 90% 이상은 BMP 문자

 

✨ 한 문장 요약

BMP란, 세계 주요 문자들을 16비트(2바이트)로 직접 담은 유니코드의 "기본 구역"이다.

 

🔥 BMP 내 Hangul Syllables(한글 음절 블록)

1. Hangul Syllables 블록이란?

  • 유니코드에서는 완성형 한글 음절(가, 나, 다, ...)을
    모두 미리 조합해 코드 포인트로 등록해 놓았습니다.
  • 이 한글 음절들을 모아 놓은 구역이 바로
    "Hangul Syllables 블록"입니다.

 

항목

시작 코드 포인트 U+AC00
끝 코드 포인트 U+D7A3
음절 수 11,172개 (가~힣)

 

2. 왜 Hangul Syllables 블록이 필요한가?

한글은 기본적으로
초성(초음) + 중성(중음) + 종성(종음)
구조로 이뤄진 문자입니다.

즉,

초성 + 중성 + (선택적) 종성

을 조합해서 하나의 음절(글자)를 만듭니다.

그런데 컴퓨터가 매번 조합하기는 번거로우므로,
가장 많이 쓰는 모든 조합을 미리 코드로 등록해놓은 것입니다.

한글 완성형(조합형 아님)을 지원하기 위해 Hangul Syllables 블록이 존재합니다.

 

3. 조합 방식 (수학적 원리)

Hangul Syllables 공식은 수학적 규칙에 의해 완벽하게 정의되어 있습니다.

코드 포인트 계산 공식:

S = 0xAC00 + (초성_index × 21 × 28) + (중성_index × 28) + 종성_index

여기서,

항목 의미 개수
초성 (Choseong) 첫 자음 (ㄱ, ㄴ, ㄷ, ...) 19개
중성 (Jungseong) 모음 (ㅏ, ㅑ, ㅓ, ㅕ, ...) 21개
종성 (Jongseong) 끝 자음 (없음 포함, ㄱ, ㄴ, ㄷ, ...) 28개 (종성 없음도 1개로 포함)

초성 19 × 중성 21 × 종성 28 = 총 11,172개의 완성형 한글 음절.

 

4. 초성, 중성, 종성 목록

(1) 초성 (Choseong)

인덱스 자음 인덱스 자음
0 10
1 11
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19

(2) 중성 (Jungseong)

인덱스 모음 인덱스 모음
0 11
1 12
2 13
3 14
4 15
5 16
6 17
7    
8    
9    
10    

(3) 종성 (Jongseong)

인덱스 받침 인덱스 받침
0 없음 14
1 15
2 16
3 17
4 18
5 19
6 20
7 21
8 22
9    
10    
11    
12    
13    

※ 종성 '없음'도 하나의 인덱스(0)로 취급합니다.

 

5. 예제: '강' (U+AC15)

  • 초성: ㄱ (인덱스 0)
  • 중성: ㅏ (인덱스 0)
  • 종성: ㅇ (인덱스 16)

계산:

S = 0xAC00 + (0 × 21 × 28) + (0 × 28) + 16
  = 0xAC00 + 16
  = 0xAC10

코드 포인트:

  • U+AC10 → '강'

✅ 정확히 복원 완료.

 

6. UTF-16에서 Hangul Syllables 저장

  • BMP에 속하므로 UTF-16에서는 단일 16비트 코드 유닛(2바이트)로 저장합니다.
  • Surrogate Pair 사용하지 않습니다.

예를 들어 '가' (U+AC00)는 UTF-16으로 0xAC00 2바이트로 저장됩니다.

 

요약:

문자 코드 포인트 UTF-16 저장 방법
U+AC00 AC 00 (2바이트)
U+AC15 AC 15 (2바이트)
U+D7A3 D7 A3 (2바이트)

 

✨ 최종 요약

항목 내용
Hangul Syllables 블록 범위 U+AC00 ~ U+D7A3
포함된 음절 수 11,172개
조합 공식 0xAC00 + (초성 × 21 × 28) + (중성 × 28) + 종성
초성 수 19개
중성 수 21개
종성 수 28개 (없음 포함)
UTF-16 저장 2바이트 (Surrogate Pair 필요 없음)

 

✨ 한 문장으로 요약하면

Hangul Syllables 블록은 초성, 중성, 종성의 조합을 수학적으로 계산하여 완성형 한글 11,172개를 U+AC00~U+D7A3에 등록해둔 유니코드 기본 구역입니다.

'High Level Programming Language' 카테고리의 다른 글

Object Graph  (0) 2023.06.03
Package  (0) 2023.06.03
JVM 메모리 구조  (0) 2023.06.03
char, String, Unicode, UTF-X  (0) 2023.05.31
Java Components  (0) 2023.05.29