Programming Language
- 주어진 문제를 해결하기 위해, 인간과 컴퓨터 사이에서 의사소통을 가능하게 하는 인공적인 언어
- 자연어와 달리 미리 정해진 규칙에 따라 엄격하게 정의됨.
- compiler나 interpreter 등을 통해 computer가 수행할 수 있는 machine language로 변환되어 수행.
Classification
Abstraction 수준에 의한 분류
1. Low-level Language
- Computer H/W 내의 물리적 동작을 이해하고 각 동작에 대응하는 명령어를 이용하여 programming
- 빠른 동작이 가능하지만 사람이 이해하기는 어려움.
- Machine language, Assembly language가 있음.
2. High-level Language
- 사람이 이해하기 쉬움.
- Abstraction 개념을 도입하여 H/W에 대한 직접적 이해 없이도 programming이 가능
- 오늘날의 프로그래밍 언어라고 불리는 것이 다 high level language
cf) Abstraction
- 주어진 작업이나 객체를 속성들의 일부분을 가지고 필요한 만큼 묘사할 수 있는 방법을 지원하는 것
- 필수적인 attribute(속성)들만으로 주어진 것을 묘사하기 때문에 나머지 속성들은 추상화, 은닉 또는 삭제됨.
- 추상화의 범주에는 Data Abstraction, Algorithm Abstraction가 있음.
Data Abstraction : 문자열, 수, tree와 같은 계산될 자료의 특성을 추상화하는 것. string, number, tree etc...
Algorithm Abstraction : 실행 순서를 제어하는 특성을 추상화하는 것으로 여러 기계어를 모아 이해하기 쉬운 추상 구문으로 만드는 것. Loop Statements, Condition statements, Procedure call etc...
작동방식에 따른 구분
1. Compiler Language
- Compiler를 사용하는 고급 언어
- 프로그램 전체를 읽어들여 이를 object code로 바꿈.
- 컴파일러 능력에 따른 최적화 가능.
- 빠르게 프로그램 전체 실행이 가능하지만 소스 변경 시 전체를 다시 compile 해야함.
- Fotran, Pascal, Cobol, Ada, C, C++ etc...
- JAVA도 compiler language라고 볼 수 있음.
Object Code
- object module라고도 불리며 compiler가 source code로부터 compile을 수행하여 생성한 code 혹은 파일
- machine language, intermediate language과 같은 binary code
- linker 등을 통해 여러 다른 object code와 연결되어 executable code가 됨.

2. Interpreter Language(Script Language)
- Interpreter에 의해 line 단위로 compile 없이 실행되는 언어.
- 고급 언어의 한 종류
- 개발단계에서 적은 양의 수정에 대한 결과를 쉽게 확인 가능
- Python, Java Script etc...
| Compiler Language | Interpreter Language |
|---|
| object code 생성 | 일반적으로 object code 만들지 않음 |
| program 단위의 translation | statement 단위의 translation |
| translation에 많은 시간 | translation 속도 빠름 |
| execution 속도 빠름 | execution 속도 느린 편 |
| executable code 변환 이후 compiler 필요 없음 | 원칙적으로는 interpreter가 수행을 위해 필요 |
| 결과물이 OS 종속적인 경우 많음 | 결과물이 OS 독립적인 경우 많음 |
프로그래밍 작성 기법 별 구분
Reference :
1) https://dsaint31.me/mkdocs_site/CE
2) https://www.vadimbulavin.com/xcode-build-system/