Post

CS - 문자/인코딩 컴파일/인터프리트

CS

CS - 문자/인코딩 컴파일/인터프리트

문자와 인코딩

컴퓨터가 문자를 읽기 위해서는 문자 집합(Character Set) 이 필요하다. 문자 집합에 특정 문자가 포함되어 있어야 해당 문자를 인식할 수 있으며, 문자를 0과 1의 형태로 변환하는 과정인코딩(Encoding) 이라고 한다.
반대로, 0과 1로 된 데이터를 문자로 변환하는 과정디코딩(Decoding) 이라고 한다.

아스키 코드 (ASCII)

아스키 코드는 영어 알파벳, 숫자, 특수문자 등을 포함하는 대표적인 문자 집합이다.

  • 7비트(128개 문자) 또는 8비트(256개 문자 확장) 로 구성된다.

  • 1바이트(8비트)로 저장되며, 확장 아스키(Extended ASCII)는 256개의 문자를 포함한다.

  • 예: 'A' → 65 (01000001), 'B' → 66 (01000010)

한글 인코딩 방식

한글은 영어보다 더 많은 문자가 필요하기 때문에 두 가지 인코딩 방식을 사용한다.

  • 조합형 인코딩

    • 초성, 중성, 종성을 개별 코드로 저장하여 조합해 문자를 만드는 방식.

    • 초기 한글 컴퓨터 시스템에서 사용되었지만, 널리 채택되지 않았다.

  • 완성형 인코딩

    • 초성 + 중성 + 종성이 결합된 글자 하나를 고유한 코드 값으로 저장하는 방식.

    • 단점: 모든 한글 조합을 포함하지 않음 → 새로운 글자는 표현할 수 없음.

대표적인 한글 인코딩 방식은 EUC-KR이며, 완성형 인코딩 방식을 사용한다.

유니코드 (Unicode)

유니코드는 모든 언어를 아우르는 문자 집합으로, ASCII나 EUC-KR보다 훨씬 많은 문자를 표현할 수 있다.

유니코드는 위에서 설명한 아스키 코드나 EUC-KR과는 다르게 인코딩 방식이 다르다.

유니코드 문자에 부여된 값의 범위를 확인해 표현할 바이트의 크기를 조절한다는 특징이 있는데, 아직 자세한 방식은 모르겠다.

대표적인 유니코드의 인코딩 방식이 UTP-8과 UTP-16이다.

고급 언어와 저급 언어

C++과 같은 프로그래밍 언어들은 대부분 고급 언어에 속한다. 이 고급 언어들은 인간 친화적인 언어이므로 컴퓨터가 이해하기에는 무리가 있다.
때문에 컴퓨터가 이해할 수 있는 저급 언어로 변환해야 하며 어셈블리어와 기계어가 저급 언어에 속한다.

기계어는 정말 모든 코드가 0과 1로 이루어져 있어 인간이 읽기에는 무리가 있다.

어셈블리어는 기계어에서 좀 더 인간 친화적으로 만든 언어이므로 기계어보다는 이해하기 쉽다.

물론 편하다고 말은 했어도 기계어를 좀 더 읽기 쉽게 만든 수준이기에 복잡한 수준의 코드를 짜기에는 어려움이 있다.

컴파일과 인터프리트

위에서 고급 언어를 저급 언어로 변환하는 과정에 대해 언급했다.

이 과정은 크게 컴파일 방식과 인터프리트 방식 두 갈래로 나눌 수 있다.

컴파일 방식은 소스 코드 전체가 저급 언어로 변환되어 실행되며, 하나의 에러라도 있다면 컴파일에 실패하게 된다.

인터프리트 방식은 소스 코드를 한 줄씩 저급 언어로 변환하는 방식이다.

이 차이로 컴파일 방식은 모든 소스 코드를 변환하는 시간이 필요하며, 인터프리트 방식은 그런 시간이 필요없다.

하지만 컴파일 방식보다 인터프리트 방식이 빠르다고 말 할 수 없다.
왜냐면 인터프리트 방식은 한 줄 한 줄 변환하는 과정을 거쳐야 하며, 컴파일 방식은 소스 코드를 한 번만 변환하면 바로 실행하기 때문이다.

마치 영어를 모르는 사람에게 한 줄 한 줄씩 해석해주는 방법과 변역본을 만들어 제공하는 방식이라고 생각하면 된다.

This post is licensed under CC BY 4.0 by the author.