[8/14] 소스코드와 명령어
컴퓨터는 소스코드를 직독직해하지 못한다. 우리가 사용하는 자바 같은 언어들은 개발자(사람)가 읽고 쓰기 편한 고급언어이고 컴퓨터가 이해하는 언어는 저급언어이기 때문이다. 고급언어는 개발 편의성에 중점을 두고, 저급언어는 성능과 하드웨어에 중점을 둔다.
- 고급언어 : 개발자가 읽고 쓰기 편한 언어
높은 수준의 추상화를 제공하므로 개발자가 기계코드나 하드웨어의 세부사항을 걱정할 필요가 없다. 대부분의 고급언어는 인터프리터 또는 컴파일러에 의해 기계코드로 변역된다. (웹개발, 응용프로그램 개발 등에서 사용)
- 저급언어 : 컴퓨터가 이해하고 실행하기 위해 만들어진 언어 (명령어)
낮은 수준의 추상화를 제공하며, 개발자는 하드웨어와 밀접하게 작업해야 한다. 어셈블리 언어는 어셉블러에 의해 기계코드로 변환되며 기계어는 CPU에서 직접 실행될 수 있다. (시스템프로그래밍, 운영체제 개발 등에서 주로 사용)
중간언어
C와 C++ 같은 언어는 고급언어와 저급언어 사이에 위치할 수 있다. 이들은 고급언어의 편의성과 저급언어의 세밀한 제어능력을 동시에 제공한다.
[ 저급언어 ]
- 기계어
: 0과 1의 이진수로 표현된 언어로 간혹 십육진수(0~9, A~F) 로 표현하기도 한다.
- 어셈블리어
: 0과 1로 이뤄진 기계어를 읽기편한 형태로 번역한 저급언어로, 컴퓨터를 동작시키는 명령어이다. 기계어와 달리 소스코드에 직접적으로 명시하면서 개발하기도 한다.
[ 고급언어 ]
저급언어로 변환되는 2가지 방식 ( 컴파일, 인터프리트 )
소스코드 ---> 저급언어(목적코드)
1. 컴파일러를 이용해 컴파일 하는 방식
: 컴파일러를 이용해 변환하는데, 이때 컴파일러는 소스코드 컴파일 중 오류가 발생하면 소스코드 전체가 실행되지 않는다.
2. 인터프리터라는 특수 프로그램으로 변환하는 방식
: 인터프리터에 의해 한줄씩 변환이 실행되며, 소스코드 전체가 저급언어로 변환되기까지 기다릴 필요가 없다. 또 인터프리트 언어는 소스코드 인터프리트 중 오류가 발생하면 오류 발생 전까지의 코드는 실행한다는 특징이 있다.
* 컴파일 언어는 CPU, 컴파일러의 종류에 따라 변환된 저급언어의 형태가 달라진다. 또한 컴파일언어와 인터프리트 언어가 '고급언어 -> 저급언어' 변환 방식의 전부는 아니며 대표적인 방식 중 하나다, 정도로 이해하는 것이 좋다.