프로그래밍 언어의 속도는 언어에 따라서 천차만별이다. 자주 사용하는 언어인 파이썬과 C언어만 해도 파이썬은 C언어보다 느리다. 그렇다고 해서 파이썬이 느린 언어는 아니다. 이렇게 언어들의 속도차이가 있는 이유는 다양하다. 그중 가장 대표적인게 컴파일 언어와 인터프리터 언어의 차이다.

 

컴퓨터의 언어(기계어)

컴퓨터는 우리가 사용하는 프로그래밍 언어를 그대로 받아들이지 못 한다. 기계어는 컴퓨터가 직접 이해하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어이며, 컴퓨터의 CPU가 이해하고 처리할 수 있는 유일한 형태의 언어이다. 즉 아무리 간단한 코드라고 해도 컴퓨터가 알아들을 수 있게 0과 1로만 이루어진 기계어로 바꿔야 한다. 

간단하게 말하면 기계어는 모든 프로그래밍 언어의 종착지이다. 다른 프로그래밍 언어들은 인간이 이해하고 사용하기 쉽도록 번역하고 축약한 것이다. 어떤 프로그래밍 언어든지 최종적으로는 기계어로 번역되어 CPU에 전달되며, 전달받은 기계어를 CPU가 수행한다.

 

기계어가 0과 1로만 이루어진 이유

  • 컴퓨터의 물리적 구조
    • 컴퓨터는 전기 신호를 통해 정보를 처리한다, 전기 신호(전기가 통했는지 안통했는지)를 표현하는 가장 간단한 방법이 0과 1의 조합이다.
    • CPU는 0과 1로 된 비트열을 해석하여 명령을 수행한다.
  • 효율성과 단숭성
    • 0과 1로만 표현된 기계어는 간단하고 효율적이다. 
    • 이진 표현은 하드웨어에서 직접 처리하기에 가장 효율적이다
  • 하드웨어의 특성
    • 컴퓨터의 기본 구성 요소인 트랜지스터는 0과 1로 동작한다.

 

프로그래밍 언어의 2가지 번역 방법

프로그래밍 언어는 크게 2가지 방법으로 번역된다. 방법에 따라 각각 인터프리트 언어(interpreted language), 컴파일 언어(compoled language)라고 불린다.

 

인터프리터 언어

대표적인 인터프리트 언어로는 파이썬과 자바스크립트가 있다.

인터프리터는 프로그래밍 언어로 작성된 소스 코드를 런타임에 한 줄씩 해석하여 실행단다. 즉 파이썬 혹은 자바스크립트 애플리케이션이 실행중일 때 인터프리터가 0과 1로 실시간번역을 해주는 셈이다.

인터프리터 언어는 실행시간이 비교적 느리지만  실시간 디버깅 및 코드 수정이 용이하다

 

컴파일 언어

대표적인 컴파일 언어는 C, C++등이 있다.

컴파일 언어는 프로그래밍 언어로 작성된 소스 코드를 전체적으로 한 번에 기계어로 변환한다. 원시 코드(소스 코드)를 목적 코드(기계어)로 변환하며, 이 과정은 런타임 이전에 수행된다. 또한 컴파일된 결과물은 하나의 패키지로 작동하며 실행속도가 빠르다.

 


 

 

그 외...

그 외에도 여러 가지 프로그래밍 언어 실행방식이 있다.

JIT  (Just-In-Time Compiler)

대표적인 JIT언어로는 Java가 있다.

JIT 컴파일러는 인터프리터와 컴파일러의 중간 형태이다. 이를 설명하기 위해 코틀린과 Java의 호환성에 대해서 이야기해보겠다.

코틀린과 자바는 100% 호환된다. 코틀린은 JetBrains에서 만들었는데 이 회사에서 개발한 코드의 70%가 자바였다. JetBrains는 Java보다 더 좋은 프로그래밍 언어로 개선하고 싶었지만 이미 너무 많은 코드에 자바를 사용했기에 모든 걸 무시하고 다른 언어를 사용하는 게 불가능했고, 자바와 완벽하게 호환되는 언어인 코틀린을 만들었다.

여기서 말하는 100%의 호환이란 자바에서 코틀린 코드를, 코틀린에서 자바코드를 사용 가능해야 한다는 것이다.

자바는 컴필레이션과 인터프리테이션을 다 활용한다. 자바코드는 컴파일을 하지만 컴파일언어와는 다르게 기계어가 아닌 자바 바이트 코드로 변환된다. 그리고 이 자바 바이트코드는 OS에 따라서 자바 가상머신이 각각의 기계어로 번연한다. 이러한 특성으로 코틀린 역시 컴파일하면 자바 바이트코드로 번역되어 두 언어 간에 100% 호환이 가능하게 됐다.

 

 

 

 

 

 

 

 

개인 기록용입니다. 만약 잘못된 부분이 있다면 댓글로 알려주신다면 감사하겠습니다!

'C.S' 카테고리의 다른 글

[자료구조] Stack, Queue  (0) 2024.07.19
[C.S] 컴퓨터의 기억장치의 종류  (0) 2022.06.08
[C.S] 메인보드  (0) 2022.05.26