컴퓨터는 0과 1만 이해할 수 있다. 그렇다면 문자(예: 한글, 영어 알파벳, 숫자 등)는 어떻게 0과 1로 표현되어 모니터에 출력될까? 이를 이해하려면 세 가지 개념을 반드시 알고 있어야 한다.
✅ 문자 집합(Character Set)
- 컴퓨터가 인식하고 표현할 수 있는 문자들의 “모음집”
- 이 집합에 속한 문자만 컴퓨터가 이해할 수 있고, 속하지 않은 문자는 인식하지 못한다.
- 예:
- ASCII: 영어 알파벳·숫자·기본 특수문자 128개
- EUC-KR / CP949: 한글 완성형 약 2,350자 (EUC-KR), 확장 약 11,000자 (CP949)
- Unicode: 현대 대부분의 문자, 기호, 이모티콘까지 포함한 통일된 집합
✅ 인코딩(Encoding)
- 사람이 읽는 문자(예: “가”, “A”, “1”)를 0과 1 비트 열로 변환하는 과정
- 인코딩 후 생성된 비트 배열을 “문자 코드”라 한다.
- 동일한 문자 집합도 인코딩 방식에 따라 서로 다른 비트열을 가질 수 있다.
- 예) 문자 집합 = ASCII - “A” → 65 (코드 포인트) → 7비트 인코딩(ASCII) → 1000001₂
✅ 디코딩(Decoding)
- 인코딩의 반대 과정으로, 0과 1로 이루어진 문자 코드를 다시 사람이 읽을 수 있는 문자로 변환하는 과정
1️⃣ 아스키 코드(ASCII)
✅ 개요
- 1960년대 초에 등장한 영어권 표준 문자 집합
- 0~127까지 총 128개 문자만 포함
- 영문 대·소문자, 숫자, 기본 특수문자, 제어문자(CR, LF 등) 포함
✅ 비트 구조
- 7비트 표현 → 최대 2⁷ = 128문자
- 실제 저장·전송 시에는 8비트(1바이트)를 사용하지만, 그중 1비트는 오류 검출용 패리티 비트로 쓰이므로 실질 문자 표현은 7비트
✅ 코드 포인트 예시
문자 코드 포인트(decimal) 2진수(7비트)
------------------------------------------
'A' 65 1000001₂
'a' 97 1100001₂
'0' 48 0110000₂
'$' 36 0100100₂
✅ 장·단점
- 장점
- 매우 간단하고 가볍다
- 영어권 환경에서는 호환성 좋음
- 단점
- 한글, 한자, 기타 비ASCII 문자 표현 불가
- 128자밖에 지원하지 않으므로 영문 외 언어에는 부족
2️⃣ EUC-KR (한글 완성형 인코딩)
✅ 한글 인코딩의 특수성
- 영어 알파벳은 알파벳을 쭉 이어 쓰면 단어가 되지만, 한글은 초성·중성·종성 조합으로 하나의 글자를 이룬다.
- 따라서 한글 인코딩은 완성형 방식과 조합형 방식으로 나뉜다.
- 완성형(Precomposed) 인코딩
- 초성·중성·종성이 결합된 완성된 글자 단위로 코드 포인트를 부여
- 예: ‘가’(ㄱ+ㅏ) 하나를 2바이트(16비트) 코드로 단일 할당
- 대표적 예: EUC-KR, CP949
- 조합형(Decomposed) 인코딩
- 초성, 중성, 종성을 각각 비트열로 따로 할당한 뒤 조합하여 하나의 글자 표현
- 예: ‘가’ → 초성(ㄱ) 코드 + 중성(ㅏ) 코드 → 최종 조합
✅ EUC-KR 특징
- KS X 1001/1003 문자 집합 기반의 완성형 인코딩
- 한글 2,350여 글자(완성형) + ASCII 94문자 포함 → 총 약 2,444개 문자 지원
- **2바이트(16비트)**로 한글 한 글자를 표현
- 16비트 → 네 자리 16진수(예: 0xB0A1)로도 표시 가능
- 한글 2,350자를 제외한 미지원 글자는 표현 불가 (예: ‘쀍’, ‘퍽’ 등 일부 확장 글자)
✅ 비트 구조
문자 집합: KS X 1001 완성형
- 1바이트: 0x00~0x7F → ASCII(문자)
- 2바이트: 0xA1~0xFE(첫 바이트) 0xA1~0xFE(둘째 바이트)
→ 2350여 한글 + 한자·특수문자 일부
✅ 장·단점
- 장점
- 기존 ASCII와 호환 (ASCII 코드 0x00~0x7F 그대로 사용)
- 당시 대부분의 웹·메일·문서 시스템에서 널리 지원
- 단점
- 모든 한글 조합 표현 불가 → 일부 글자 깨짐
- 확장성이 낮아, 새로운 한글 문자 추가 어렵
- 다국어(예: 일본어, 중국어, 한자) 동시 지원 불가
3️⃣ CP949 (확장 완성형)
✅ 개요
- 마이크로소프트가 EUC-KR을 기반으로 한글 확장 및 일부 한자·기호 추가하여 만든 인코딩
- 확장된 완성형 방식으로, EUC-KR에서 표현 못 하던 몇천 자를 추가 지원
- 윈도우 계열(Windows 95 이후)에서 주로 사용
✅ 지원 범위
- EUC-KR 기본 2,350자 + CP949 확장 영역 한글 약 11,000자 이상 지원
- 일부 추가 한자, 기호, 특수문자 포함
- 하지만 여전히 Unicode 전체 한글 조합(예: 과거 옛한글, 방언 등)을 모두 포함하지 않음
✅ 호환성
- ASCII(0x00~0x7F) 및 EUC-KR(0xA1~0xFE 영역) 호환
4️⃣ 유니코드(Unicode)와 UTF-8
✅ 유니코드(Unicode) 문자 집합
- 전 세계 모든 문자를 통일된 코드 포인트 체계로 관리
- 한글, 한자, 일본어, 그리스어, 키릴문자, 이모티콘, 특수 기호 등 포함
- 현재 U+0000 ~ U+10FFFF 범위(약 110만여 코드 포인트) 정의
- 한글 초성·중성·종성 조합으로 생성되는 11,172자 완성형 한글(가(0xAC00)부터 힣(0xD7A3)) 포함
✅ UTF-8 인코딩
- 가변 길이 인코딩 방식으로 1바이트부터 4바이트까지 사용
- ASCII 범위(U+0000~U+007F): 1바이트(0xxxxxxx)
- U+0080~U+07FF: 2바이트(110xxxxx 10xxxxxx)
- U+0800~U+FFFF: 3바이트(1110xxxx 10xxxxxx 10xxxxxx)
- U+10000~U+10FFFF: 4바이트(11110xxx 10xxxxxx 10xxxxxx 10xxxxxx)
예시
- 영어 ‘A’ (U+0041) → 0x41 → 1바이트: 01000001
- 한글 ‘가’ (U+AC00) → 0xAC00 → 3바이트:→ 최종: 1110 1010 1011 0000 1000 0000 (3바이트, 0xEAB080)
- 1) U+AC00 = 1010 1100 0000 0000₂ 2) 3바이트 패턴: 1110xxxx 10xxxxxx 10xxxxxx 3) 비트 분리: 1010 1100 0000 0000₂ → xxxxxxxx xxxxxxxx → 1010 1100 | 0000 0000 → 계속 이어 붙이기 4) 3바이트씩 채우면: 1110 1010 10 110000 10 000000 = EA B0 80₁₆
✅ UTF-16 인코딩
- 2바이트(16비트) 단위로 저장하되, U+10000 이상의 문자는 서로게이트 쌍(Surrogate Pair)으로 표현
- 기본 다국어 평면(BMP) 문자(U+0000~U+FFFF) → 1유닛(2바이트)
- 보충 평면(SMP, U+10000~U+10FFFF) 문자 → 2유닛(4바이트)
✅ UTF-32 인코딩
- 고정 길이 4바이트(32비트)로 모든 코드 포인트를 그대로 저장
- 저장량이 크지만, 인덱싱·처리가 간편
5️⃣ 정리 및 비교표
항목 범위/용량 비트 단위 주요 특징
ASCII | U+0000~U+007F (128자) | 7비트(저장 시 8비트) | 영어 알파벳·숫자·기본 특수문자, 호환성 좋음 |
EUC-KR | KS X 1001 완성형 (약 2,350자) + ASCII | 2바이트(16비트) | 한국어 완성형 인코딩, 호환성 좋지만 모든 한글 미표현 |
CP949 | EUC-KR 확장 약 11,000여자 지원 | 2바이트(16비트) | EUC-KR 호환 + 확장 한글/한자, 윈도우 환경에서 널리 사용 |
Unicode | U+0000~U+10FFFF (약 110만 코드) | 가변(UTF-8), 2바이트(UTF-16), 4바이트(UTF-32) | 전 세계 문자 통합, 다국어·이모티콘 지원 |
UTF-8 | Unicode 범위 | 1~4바이트 가변 | ASCII 호환, 웹 표준, 저장 효율 높음 |
UTF-16 | Unicode 범위 | 2/4바이트 가변 | BMP 문자는 2바이트, 보충 평면 문자 4바이트 |
UTF-32 | Unicode 범위 | 4바이트 고정 | 인덱싱·처리 간편하지만 저장 용량 큼 |
6️⃣ 마무리
- 문자 집합: 컴퓨터가 이해할 수 있는 문자들의 모음
- 인코딩: 문자 → 0과 1 비트열로 변환
- 디코딩: 0과 1 비트열 → 문자로 변환
- 초기에는 **ASCII(128자)**가 사용되었고, 한국어 지원을 위해 EUC-KR / CP949 완성형 인코딩이 등장
- 결국 전 세계 문자를 하나로 통합한 Unicode 문자 집합과, 이를 효율적으로 표현하는 UTF-8(웹 표준) 방식이 대세가 되었다
'CS 공부 > 컴퓨터 구조' 카테고리의 다른 글
[CS] 정보 단위와 수 체계 쉽게 정리하기 (0) | 2025.06.04 |
---|---|
[CS] 개발자를 위한 컴퓨터 구조 필수 개념 정리 (0) | 2025.06.03 |
[CS] 컴퓨터 구조를 알아야 하는 이유 (0) | 2025.06.03 |