<원시 프로그램>
- 고급언어 또는 어셈블리 언어와 같이 기호 언어를 사용하여 작성된 프로그램. = 프로그래머가 소스코드로 작성한 프로그램
- 기계어(컴퓨터가 사용하는 언어)에 가까울수록 저급언어, 사람이 이해하기 쉬운 언어일수록 고급언어로 분류한다.
1. 어셈블리 언어(Assembly Language)
- 기계어를 1:1 대응하여 영문자 등의 기호로 표시해 해석을 쉽게한 기호 언어로 저급언어에 해당한다.
- 고급언어와 달리 제한이나 규칙이 없으나, 복잡한 세부사항을 직접 고려해야함. 배우기가 어렵다.
- 기계마다 사용하는 기계어가 다르기 때문에 이식성이 낮다.
- 응용 프로그램의 특정 기능이 고속으로 처리되어야 하거나, 하드웨어를 직접 제어해야 하는 경우 사용됨.
- 어셈블리 언어를 기계어로 바꿔주는 번역기를 어셈블러(Assembler)라고 한다.
2. 고급언어
- 사람이 이해하기 쉽도록 설계된 언어로서 컴퓨터 구조나 기능에 얽매이지 않는다.
- 하드웨어를 제어해야할 경우 어셈블리 언어에 비해 제한이 따른다.
- 고급언어 → 어셈블리 언어 → 기계어로의 번역과정을 거침
- 고급언어를 기계어로 바꿔주는 번역기를 컴파일러(Compiler), 그 과정을 컴파일(Compile)한다고 한다.
저급언어 |
고급언어 |
- 가독성이 낮다. - 작성 및 수정이 어렵다. - 이식성이 낮다. - 상대적으로 크기가 작아 가볍다. - 상대적으로 처리속도가 빠르다. |
- 가독성이 높다. - 작성 및 수정이 쉽다. - 이식성이 높다. - 상대적으로 크기가 커서 무겁다. - 상대적으로 처리속도가 느리다. |
<타겟 프로그램>
- 컴퓨터가 이해하는 언어인 기계어로 작성된 프로그램
※ 고급언어를 기계어로 해석하는 방식에 따라 컴파일러, 인터프리터, JIT(Just In Time) 등으로 나눌 수 있다.
<빌드(Build)>
- 소스코드 파일(=원시 파일)을 컴퓨터에서 실행할 수 있는 독립된 소프트웨어로 변환하는 과정 혹은 그 결과물.
- 소스코드 파일 -- 컴파일 --> 목적파일 생성 -- 링커가 라이브러리 등과 링크 --> 실행파일
[C++ 빌드 과정]
이미지출처: http://blog.naver.com/rlaalsrjsa/220746214578
<인터프리터 언어(Interpreter Language)>
- 빌드타임: 사실 상 아무것도 하지 않으므로 컴파일러 언어보다 빠르다.
- 런타임: 한 줄씩 분석해 기계어로 변환한 뒤 기계로 전송하기 때문에 컴파일러 언어보다 느리다.
- 실행속도가 느리나 코드 변경 시 즉시 실행이 가능하며 테스트에 용이함.
- 대표언어: Visual Basic, PHP
<컴파일러 언어(Compiler Language)>
- 빌드타임: 프로그래머가 작성한 모든 코드에 대한 기계어를 생성하므로 인터프리터 언어보다 느리다.
- 런타임: 빌드타임에 작성한 기계어를 모두 기계에 보내기 때문에 인터프리터 언어보다 빠르다.
- 빌드가 느리고, 한번에 기계어를 생성하기 때문에 기계어가 정적이나 실행이 빠르다.
- 기계에 따라 사용되는 컴파일러가 다르기 때문에 환경에 맞는 컴파일러를 선택해야 한다.
- 대표언어: C, C++
구분 | 컴파일러 | 인터프리터 |
번역 단위 | 전체 | 한줄(행) |
목적프로그램 | 생성 | 생성X |
실행속도 | 빠름 | 느림 |
번역 속도 | 느림 | 빠름 |
<JIT (Just In Time)>
- 인터프리터 + 컴파일러
- 빌드타임: 런타임에서 실행할 수 있는 중간언어로 변환.
(자바의 경우 javac.exe를 이용해 .java 파일을 .class 파일로 변환)
- 런타임: 중간언어를 기계어로 번역해 기계로 전송. 캐싱을 이용해 기존에 만든 기계어를 재활용한다. 런타임시 시간이 오래걸린다.
(자바의 경우 java.exe가 인터프리터로서 .class를 실행하고 해석)
- 어떤 운영체제에서도 같은 컴파일러로 중간언어를 만들기 때문에 운영체제에 독립적임.
운영체제에 맞는 중간언어를 기계어로 번역해주는 프로그램이 있으면 됨. (ex) JVM, .NET Framework 등)
- 대표언어: Java, C++
[Java 실행환경]
이미지출처: http://cocomo.tistory.com/499
[참고사이트]
어셈블리어와 고급언어
http://blog.naver.com/jeongmin9946/220484520181
http://siren911.tistory.com/18
http://blog.naver.com/ygszzang11/50106750281
컴파일러 언어와 인터프리터 언어
http://blog.naver.com/yujh0429/220552429996
'Study' 카테고리의 다른 글
TCP와 UDP (0) | 2017.01.08 |
---|---|
MVC 패턴 (0) | 2016.12.11 |
정적인 페이지와 동적인 페이지 (0) | 2016.11.26 |
Apache와 Tomcat의 차이 (0) | 2016.11.26 |
Firebase (0) | 2016.10.10 |