저급언어(low-level programming language)
저급언어란 컴퓨터가 직접 이해하고 실행할 수 있는 프로그래밍 언어를 의미합니다.
고급언어로 작성된 소스코드가 실행될려면 반드시 저급언어로 변환되어야한다.
기계어(machine code)
기계어는 0과 1의 명령어 비트로 이루어진 언어입니다. 2진수로 나열하다보면 너무 길어져서 16진수로 표현하기도 하지만 사람이 읽으면 그 의미를 이해하기 어렵고 오로지 컴퓨터만을 위해 만들어진 언어입니다.
어셈블리어
어셈블리어는 0과 1로 이루어진 기계어를 읽기 편한 형대로 번역한 저급 언어입니다. 최소한의 명령으로 이루어진 언어로 이진수 패턴을 사용하는 기계어와 비슷해서 복잡한 프로그램을 만들기 쉽지 않습니다.
하지만 하드웨어를 사실상 제어하는 형태이기때문에 임베디드 개발, 게임 개발, 정보 보안 분야 등에서 많이 사용합니다.
고급언어(high-level programming language)
고급언어란 사람이 이해하기 쉽게 작성된 프로그래밍 언어를 의미합니다. C, C++, JAVA, python 등 대부분의 프로그래밍언어가 고급 언어에 속해 있습니다.
고급 언어로 작성한 소스코드는 저급 언어로 변환되어 실행되는데 크게 컴파일 방식과 인터프리터 방식 2가지로 변환됩니다.
컴파일러 언어
컴파일러 언어는 컴파일 타임때 컴파일러에 의해 소스코드가 저급언어로 변환한 후, 실행파일을 통해 실행되는 고급 언어입니다.
컴파일러(Compiler)는 소스코드를 저급언어인 목적코드로 변환한 컴파일(Compile)과정을 통해 목적파일을 생성합니다. 하지만 목적파일로는 프로그램을 실행할 수 없습니다. 프로그램의 로직은 하나의 파일로 구성되어 있는 것이 아니라 외부 라이브러리나, 여러 파일로 분리어 있기 때문에 하나로 연결해주는 작업이 필요합니다.
이 때, 링커(Linker)는 목적코드로 이루어진 목적파일을 연결, 병합하는 링크(Link)과정을 통해서 최종 실행가능한 실행파일을 생성합니다.
- 정적 링크(Static link) : 컴파일된 목적 파일 연결
- 동적 링크(Dynamic link) : 프로그램 실행 중 프로그램 외부에 존재하는 코드를 찾아서 연결
최종적으로 빌드(Build) = 컴파일(Compile) + 링크(Link) 과정을 통해 소스코드를 실행파일을 만들어 실행(Run) 시켜줍니다.
컴파일 언어는 컴파일 단계와 실행 단계가 각각 분리되어 있으며, 컴파일은 한번만 수행합니다. 실행대는 컴파일 과정을 거치지 않고 실행파일만 실행하면 되므로 실행 속도가 빠릅니다. 하지만 규모가 큰 프로젝트 일 경우 컴파일 시간이 오래걸리거나 소스코드 내에 오류를 하나라도 발견하면 해당 소스코드는 컴파일을 실패할 수 있습니다.
컴파일러 언어의 종류
C, C++, C#, JAVA 등이 있다.
인터프리터 언어
인터프리터 언어는 인터프리터에 의해 소스코드를 한 줄씩 실행되는 고급언어입니다.
인터프리터 언어는 컴파일 하는 과정이 없기 때문에 컴파일 하는 시간을 소요되지 않으나, 별도의 실행파일을 생성하지 않고 실행할 때마다 인터프리트 과정을 반복 수행해야되서 실행 속도가 느립니다. 하지만 소스코드를 한 줄씩 실행하기 때문에 소스코드 N번째 줄 문법 오류가 있더라도 N-1번째 줄까지는 올바르게 수행됩니다.
컴파일러 언어 vs 인터프리터 언어
정리하자면, 컴파일러 언어와 인터프리터 언어는 다음과 같은 차이가 있다.
컴파일러 언어 | 인터프리터언어 |
코드 실행 전, 컴파일 타임에 소스 코드 전체를 한번에 기계어로 변환 후 실행 | 코드가 실행 단계인 런타임에 코드 한 줄씩 중간 코드인 바이트코드로 변환 후 실행 |
실행 파일 생성 | 실행 파일 생성 X |
컴파일 단계와 실행 단계가 분리 | 인터프리트 단계와 실행 단계 분리 X 인터프리터는 한 줄씩 바이트코드로 변환 후 즉시 실행 |
컴파일은 한번만 수행 | 코드 실행시마다 인터프리트 과정 반복 수행 |
컴파일과 실행단계가 분리되어 있어, 실행시에는 실행만 하면 되므로 코드 실행 속도 빠름 | 인터프리트 단계와 실행 단계가 분리되어 있지 않아 반복 수행하므로 실행 속도가 느림 |
'컴퓨터구조' 카테고리의 다른 글
컴퓨터구조 - ALU, 제어장치, 레지스터 (0) | 2023.02.23 |
---|---|
컴퓨터 구조 - 명령어의 구조 (0) | 2023.02.22 |
컴퓨터구조 - 데이터를 표현하는 방법 (0) | 2023.02.20 |
컴퓨터 구조 - 컴퓨터를 구성하는 요소 (0) | 2023.02.19 |
컴퓨터 구조 - 컴퓨터 구조(Computer Architecture)란? (0) | 2023.02.18 |