[JS] 17. 1바이트는 왜 8비트일까?




컴퓨터의 기본 저장 단위인 1바이트(Byte)는 8비트(bit)로 이루어져 있다.
어째서 8비트일까?
더불어 아스키코드, 안시코드, 유니코드, utf-8에 대해 간략하게 알아보자🤩

1바이트가 8비트인 이유

  • 컴퓨터 아키텍쳐가 미국(영문권인 곳)에서 개발, 발전했기 때문.
  • 문자를 메모리에 저장하기 위해서는 인코딩을 해야한다. (문자를 전자화, 부호화 하는 것)
  • 미국은 아스키코드를 사용했다.
  • 아스키코드 : 1바이트 = 8비트로, 7비트(2**7=128)는 데이터 값을, 1비트는 오류검출(패리트비트)을 위해 사용.
  • 미국은 아스키코드 내의 문자면 충분했기 때문에, 아스키 문자 인코딩을 기준으로 1바이트가 8비트가 됐다. (한 문자당 하나의 바이트 대응)



ASCII

  • American Standard Code for Information Interchange : 미국 정보 교환 표준 부호

아스키코드

  • 1960년대 미국표준협회에서 정의한 표준 코드
  • 미국권 문자를 표현하는 문자 인코딩
  • 7비트 (2 ** 7 = 128) 만 데이터 값에 사용하고, 1비트는 통신 에러 검출을 위해 사용
  • 통신 에러 검출을 위한 비트 = 패리티 비트 (Parity Bit)
  • 알파벳, 기호, 숫자 등을 다룰 수 있는 기본적인 문자 코드
  • 영문 키보드로 입력할 수 있는 모든 가능성을 담았다.
  • 컴퓨터가 글로벌화되면서 > 유럽권을 고려해서 확장해줘…!
    • 7비트로는 부족하다.
    • 8비트로 확장한 아스키 코드가 등장했다 (ANSI 코드, 확장 아스키 코드)
    • 2 ** 8 = 256 개의 값을 담을 수 있게 됐다.
    • 이렇게 1바이트만으로 표현되는 방식 : SBCS(Single Byte Character Set)
      • 그래도 부족한데…?
      • 2개 이상의 바이트 : MBCS(Multi Byte Character Set) (유니코드 제외)
      • 한글의 대표적으로, EUC-KR, 한컴 2바이트 코드가 해당한다.
      • 확장된 아스키코드 영역의 문자를 2개 합쳐서 표시
      • 국가간 다르게 정의하기 때문에 호환성 이슈가 있다.
  • 그래도 비유럽 국가 (한국, 일본..) 문자를 담기엔 부족한데?
  • 문자 인코딩 방식도 너무 파편화가 됐어..! 통합시키면 안될까?
    • 유니코드(Unicode) 등장
    • 전 세계 언어의 문자를 정의하기 위한 국제 표준 코드
    • 용량이 크게 증가한 2byte (2 ** 16 = 65536)
    • 현재는 한 문자를 나타내기 위해 4byte까지 사용한다.
    • 파편화된 문자 인코딩 방법도 모두 유니코드로 단일화했다. (기존 아스키코드로 작성된 문서는 utf-8로 완벽 호환)



UTF-8 (가변길이 인코딩)

  • 유니코드는 영어는 1바이트, 한글은 2바이트, 다른 특수문자는 3바이트로 언어마다 가변적인 표현의 문제가 있다. > 어떤 글자마다 어떻게 읽어야 하는지 알려줘야한다. (= 유니코드 인코딩 방식)
  • 유니코드 인코딩 : 컴퓨터가 어떤 글자를 만났을 때, 얼만큼 읽어야 하는지 미리 말해주는 것.
  • 유니코드를 사용하는 인코딩 방식 중 하나
  • 영문, 숫자, 기호는 1바이트
  • 한글, 한자는 3바이트로 표현
  • 아스키 코드와 영문 영역은 100% 호환
  • 전세계 모든 언어를 하나의 파일에 쓸 수 있게 됐다.