BOX-IT/C++

[C++] 컴파일, 컴파일러, 바이트코드(바이너리코드)는 무슨 뜻일까?

Buang 2022. 3. 1. 20:56
반응형

 

1. 컴파일 정의

 

컴파일 = 사람이 이해할 수 있는 언어를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 것

 

 

우리가 '안녕'이란 문자를 입력해서 상대방한테 보내면

'아, 상대방이 나한테 인사했구나'라고 이해할 수 있다.

 

하지만 컴퓨터는 '안녕'이란 언어를 모른다.

컴퓨터는 0과 1이란 언어만 아는 아이다.

 

가령 컴퓨터한테 Hello나 hi나 안녕같은 문자를 입력하면

컴퓨터는 이 사람이 도대체 무슨 소리를 하는 걸까?라고 생각할 것이다.

그러니 안녕을 0과 1로 바꿔줘야 컴퓨터는 안녕을 이해할 수 있다.

그러니까 영국인한테 한국어로 안녕이라고 말하면 이해를 못하니까

안녕 대신 hello로 바꿔서 이야기하는 것처럼

컴퓨터한테도 안녕 대신

 

001101011 

 

이런식으로 0과 1로 이루어진 코드를 입력해야 컴퓨터는

아 저 사람이 나한테 인사를 했구나라고 이해할 수 있다.(실제로 위의 코드는 안녕을 나타내는 코드가 아닙니다.)

 

즉 컴퓨터가 쓰느 언어는 사람이 사용하는 언어와 다르다.

컴퓨터는 아이스크림도 0과 1로 변환해줘야 '아이스크림을 입력했구나'하고 이해를 한다. 

 

그러니 컴퓨터로 작업을 할 때 당연히 컴퓨터가 이해할 수 있는 언어인

0과 1을 이용해서 작업을 해야 할 것이다. 그런데 사람은 0과 1만 이용해서

작업을 수행하는 게 쉽지 않다. 예초에 우리가 사용하는 단어, 즉 문장 자체를 모두 다

0과 1로 변환해서 사용해야 한다고 해보자.

 

가령 '안녕하세요, 저는 부엉이입니다.'를 컴퓨터가 이해할 수 있는 언어로

바꿔서 써야하는 탓에

 

010101101010101010010111111010101

 

이런식으로 입력해야 한다면?

많이 힘들 것이다. 

 

그래서 사람들은 사람들이 사용하는 언어를

컴퓨터가 이해할 수 있도록 자동 번역해주는 걸 만들었다.

 

즉 안녕하세요를 입력하면 이 안녕하세요가 자동으로 컴퓨터가 이해할 수 있는 언어인

0과 1로 변환되는 것이다. 이렇게 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로

변환하는 작업을 컴파일이라고 한다. 

 

쉽게 말하자면 사람과 컴퓨터 사이의 언어를 통역하는 작업이 컴파일이다.

 

a라는 사람은 영어만 알고, 컴퓨터는 0과 1이란 언어만 안다면

a라는 사람이 영어로 hello를 입력했을 때

이걸 0과 1로 번역해서 컴퓨터한테 전해주는 것을 컴파일이라고 할 수 있다.

 


2. 바이트코드(바이너리코드)

 

바이트코드 = 0과 1로 이루어진 코드

 

0과 1로 바뀐 명령어를 바이트코드 혹은 바이너리 코드라고 한다.

바이너리는 2가지란 뜻이다. 즉 0과 1, 2가지 코드로만 이루어져 있다고 해서 바이너리 코드라고 한다.

 

위에서 

'안녕하세요, 저는 부엉이입니다.'를

 

010101101010101010010111111010101

 

이렇게 바꿀 수 있다고 했을 때

 

010101101010101010010111111010101

 

위의 0과 1로 이루어진 것들은 즉, 바이트코드라고 할 수 있다.

 

3. 컴파일러

 

 

컴파일, 즉 사람이 이해할 수 있는 언어를

컴퓨터가 이해할 수 있는 언어인 0과 1로 변환하는 작업을 할 수 있도록 해주는 프로그램이 컴파일러다.

 

컴파일이 통역이었다면 컴파일러는 통역사가 될 것이다.

 

 

 

반응형