1. 비트

사전적 의미로는

  • 조금, 약간
  • 잠깐
  • 조각

으로 적혀 있다.

 

비트는 두 가지 뜻으로 나뉘는 데 스위치로 따지면 on/off라고 할 수 있다.

  • on/off
  • yes/no
  • true/false
  • 1/0

∴ 0 또는 1 중 하나의 정보를 가지는 정보 단위.

 

2. 코드

하지만 모든 대화를 이분법적으로 해결할 수는 없다. 

그래서 자릿수를 늘려서 보기를 늘린다음 그 중 해당하는 것이 있으면 선택한다.

 

예를 들어보자.

Q. 당신은 학생입니까?

A. 1(참)

Q. 그럼 현재 몇 학년입니까?

A. (???)

Q. 1학년이면 001, 2학년이면 010, 3학년이면 011, 4학년이면 100 5학년이면 101, 6학년이면 110으로 대답해주세요.

당신은 몇 학년입니까?

A. 101

 

이렇게 약속된 0과 1로 만들어진 부호를 코드라고 부른다.

코드의 사전적 의미로는

  • 암호, 부호
  • 관례, 규칙
  • 법규, 규정

등으로 나타나며 순하게 표현하면 '약속'이라고 볼 수 있다.

 

그러므로 프로그래밍에서 코드란,

서로 간의 약속의 의미가 더해진 '약속된 부호'라고 이해하면 된다.

 

3. 바이트

비트 8개를 묶으면 바이트라는 새로운 단위가 만들어진다.

쉽게 생각해서 비트의 상위호환이라고 보면 된다.

 

4. 인코딩, 디코딩, 디코딩 오류

 

인코딩

사람의 언어를 컴퓨터 언어로 바꾸는 과정을 의미한다.

 

디코딩

반대로 컴퓨터의 언어를 인간이 알아볼 수 있는 언어로 바꾸는 과정을 의미한다.

 

디코딩 오류

간혹 웹 사이트를 사용하다 보면 사이트의 한글이 다 깨진 것을 경험하였을 것이다.

검은색 다이아에 ?가 박혀있는 글들이 페이지에 도배되어져 있으면 디코딩 오류가 난 것이다.

검은색 다이아에 ? = 위와 같은 도형

5. 아스키와 유니코드

아스키

  • 미국표준협회에서 만든 코드.
  • American Standard Code for Information Interchange의 약자
  • 영어 대/소문자, 숫자, 특수문자를 8비트 안에 약속한 코드
  • 대소문자 구분하므로 A와 a의 코드가 서로 다르다.
  • A_01000001 / a_01100001

유니코드

  • 컴퓨터의 사용이 보편화되면서 세계 여러 나라의 문자도 표기해야 하는 상황이 됨.
  • 아스키 코드보다 약속 공간을 더 늘린 코드가 바로 유니코드
  • 총 16비트 (2바이트)의 크기를 사용하며 한글도 코드화가 가능해짐.
  • 정식 명칭은 UTF이며, Unicode Transformation Format의 약자이다.

 

6. 컴파일

위에서 알게 된 비트(0과 1), 바이트(00000000~11111111)는

초기에 인간이 컴퓨터에게 명령을 내릴 때 그대로 입력하였다.

가히 미친 짓이다.

하지만 현재는 여러 '프로그래밍 언어'라는 것이 나와 

사람의 언어로 작성하면 기계어로 '번역'해서 컴퓨터에게 알려준다.

 

이 작업을 '컴파일(Compile)'이라고 한다.

사전적 의미로는 '편집하다'라는 뜻이 있으며

프로그래밍에서는 컴퓨터가 읽을 수 있는 비트 형태로 편집하는 과정을 '컴파일'이라고 하고

편집하는 도구를 '컴파일러'라고 한다.

 

7. 하이레벨 vs 로우레벨 언어

프로그래밍 언어에는 로우레벨 언어와 하이레벨 언어가 있다.

 

로우레벨은 

  • 기계 중심의 언어지만
  • 실행 속도가 빠르고
  • 기계마다 다른 코드를 가진다.

기계어와 어셈블리어가 이에 해당된다.

기계어:

컴퓨터가 직접 이해할 수 있는 언어이자 0과 1로 표현되며 전문적인 지식 없이는 작성과 이해가 어렵다.

기종마다 기계어가 달라 호환성이 없다고 보면 되고 유지보수가 어렵다.

 

어셈블리어:

기계어를 알파벳 문자로 변환하여 그나마 알아볼 수 있게 기호화한 언어이다.

어셈블(Assemle)의 사전적 의미는 '조립하다'이며, 말 그대로 0과 1의 조합으로 나올 수 있는 단어를 모아

익숙한 알파벳 기호로 1:1로 바꾼 상징적인 기호 언어이다.

 

반면에 하이레벨은

사람 중심의 언어이며 실행을 위해 번역하는 과정이 필요하다.

서로 다른 기계에서 소스 수정 없이 실행할 수 있다.

 

하이레벨의 언어로는 C, JAVA, Python 등이 있다.

 

+ Recent posts