어두운 배경이 싫으시다면 페이지 우측 하단에 보이는 초승달 모양의 아이콘을 클릭하면 화이트모드로 변경됩니다. 초승달 모양 버튼 : `화이트/다크 모드` 전환 |
프로그래밍을 하다 보면 아스키코드에 대해서 다들 한 번 들어보거나, 아스키코드를 이용한 대소문자 변환 등 프로그래머라면 거의 사칙연산급의 지식이라고 할 수 있습니다. 이 부분에 대해서 좀 더 다양한 내용으로 설명을 해보겠습니다.
1. 아스키 코드란?
ASCII(American Standard Code for Information Interchange)의 약자로 컴퓨터와 통신 장비 간의 데이터 전송을 위해 개발된 문자 인코딩 시스템입니다. 아스키코드는 주로 문자(영어 알파벳)와 기호, 숫자, 구두점 및 제어 문자를 포함하여 총 128개(7비트)의 문자 집합을 정의합니다.
그렇다면 아스키코드가 나오기 전의 어떤 방식으로 통신을 하였는지를 보면 굉장히 기계적인 방식이 주를 이룹니다. 즉, 초기 컴퓨터 또는 그 이전의 타자기, 전신 등의 기계식 장치에서의 통신은 주로 On/Off와 같은 2진법 기반이 주를 이룹니다. 대표적인 것이 모스 부호가 있습니다.
다만 이런 2진법 체계의 문자 인코딩 방식은 기계 친화적이어서 인간이 이해하기가 너무 어렵습니다. 그렇다 보니 오류가 많이 발생할 수 있었고, 이를 해결하기 위해서 미국 표준 협회(ASA, 현재 ANSI)에 의해서 1960년대에 처음 도입됩니다.
영화 '마션'을 보면 이것을 대표하는 장면들이 있습니다. 주인공이 지구와 첫 통신을 할 때에는 질문 → Yes or No로 답하는 부분이 있는데 시간도 오래 걸리고 답답해하는 모습을 보입니다.
이후 같이 갔던 동료의 아스키코드표를 참고하여 16진법을 통해 양방향 대화를 하게 됩니다. 즉, 양방향 통신으로 대화가 가능하게 된 것이 ASCII 코드 문자 체계가 나오게 된 배경과 유사합니다.
2. 비트(bit)와 바이트(Byte)
위에서 아스키코드는 128개, 즉 7비트의 문자 집합이라고 하였습니다. 이때 비트(bit)란, 컴퓨터가 데이터를 표현하는 가장 기본이 되는 정보의 단위입니다.
비트는 전기신호가 들어가는 상태를 나타내는 켜짐(1)과 꺼짐(0)을 2진법(binary system)으로 표현합니다. 컴퓨터에게는 가장 기본이 되는 단위이지만 인간에게는 굉장히 불편한 표현 방식입니다.
그래서 인간이 사용하는 언어체계를 담아서 컴퓨터와 소통할 수 있는 문자 체계를 만들게 되는데 이것이 ASCII이고, 총 128개의 문자들로 구성되어 있습니다. 각각의 문자는 0부터 127까지의 숫자로 표현합니다. ex) 97 = a, 65 = A
숫자로 표현하기 때문에 10진법 또는 16진법으로 표현하기도 합니다. 다만 10진법의 경우 인간이 이해하기 편한 숫자 체계이지만, 컴퓨터에게는 그리 익숙하지 않은(?) 숫자체계입니다.
그리고 모니터와 같은 출력 장치를 통해 같은 문자라도 10진법으로 표기하게 되면 최대 3자리의 공간이 필요합니다. 반면 16진법으로 표현할 경우 딱 2 자리면 표현할 수 있고(00 ~ FF), 보기에 편하면서 10진법과 2진법 등으로 변환하기도 용이합니다.
바이트(Byte)는 이런 bit가 8개 모여서 구성된 데이터를 저장 및 표현하는 데 사용되는 단위입니다. 비트의 0과 1은 어떤 의미인지 부여하기 어렵지만, 8개의 비트가 모인 바이트는 0 ~ 255(2의 8제곱 = 256)의 숫자를 이용하여 표현하므로 의미를 부여할 수 있습니다. 위에서 97 = a라고 한 것처럼
이런 바이트라는 개념이 등장하게 된 주요 원인이 바로 위에서 설명한 ASCII 코드 때문입니다. ASCII 코드는 초창기에는 7비트와 1비트의 '패리티 비트(Parity bit)'를 붙여서 총 8비트로 구성되었습니다.
'패리티 비트'란, 에러 검출을 목적으로 사용하는 비트로 데이터 전송 시 손상 여부를 체크하기 위한 비트입니다. 초창기에는 전자기 신호가 들쭉 날쭉이고 장치가 좋지 않아 잘못된 데이터가 전송되는 상황이 많았기 때문에 주로 사용되었습니다. (물론 검출만 할 뿐 뭐가 문제인지는 모른다는 게 함정 ㅋ)
이런 식으로 8비트 체계로 통신을 하다 보니 이것을 하나의 단위로 묶어서 사용하기에 이르렀고, 그래서 바이트가 나오게 되었습니다. 추후에 패리티 비트가 필요 없게 되자, 확장 아스키(Extended ASCII)로 기존 아스키코드를 확장한 8비트(256개의 문자 표현)를 만들게 됩니다.
1Byte는 1 Character라고도 표현하기도 합니다. 이는 위에서 말했듯이 ASCII 코드(1Byte)로 하나의 문자를 표현할 수 있어 문자를 나타내는 Character를 붙여서 1Byte=1Character라 합니다.
3. 아스키 코드표
아마 아스키코드 또는 아스키코드표를 검색하면 아래와 같이 코드표가 대부분 검색될 겁니다. 아래 표는 제가 직접 제작한 코드표이고, 해당 표를 제작한 엑셀 파일도 같이 공유하겠습니다.
위에 표에는 제가 문자와 숫자를 강조해서 표시해 놨습니다. 이는 프로그래밍을 하다 보면 중요한 역할을 수행하기 때문입니다. 특히 영어의 대소문자 구분을 위해서는 알아두면 좋습니다.
- 알파벳 대문자(A ~ Z) : 65 ~ 90
- 알파벳 소문자(a ~ z) : 97 ~ 122
- 숫자(0 ~ 9) : 48 ~ 57
영어 알파벳의 대소문자의 차이는 32로 빼거나 더해서 대소문자를 변환하는 것도 가능합니다.
이상 아스키코드와 관련하여 설명하였습니다.
구독 및 좋아요는 컨텐츠를 생산하는데 많은 도움이 됩니다. 😊
감사합니다.