프로그래밍 언어
컴퓨터 시스템을 구동시키는 소프트웨어를 작성하기 위한 형식언어
우리가 사람과 대화할 때 그 사람이 이해할 수 있는 언어를 사용하듯, 우리가 컴퓨터에게 명령을 내릴 때는 컴퓨터가 이해할 수 있는 언어인 기계어(Machine code)로 명령을 전달해야한다.
: 기계어? 0101001.... 이런거 아닌가요? 우리가 사용하기에는 너무 어려울 것 같은데요.
그래서! 우리는 컴퓨터에게 명령을 내리가 쉽도록 사람이 이해하기 쉬운 언어로 명령을 내린 후 컴퓨터가 이해하기 쉬운 언어로 번역하도록 해야한다.
프로그래밍 언어는 아래와 같이 저급 언어와 고급 언어로 나눌 수 있다.
저급 언어 (Low-Level Language)
컴퓨터가 이해하기 쉽게 작성된 프로그래밍 언어
•
컴파일이나 인터프리터 과정이 없어 실행속도가 빠름
•
유지보수가 힘듦
•
기계어, 어셈블리어
고급 언어 (High-Level Language)
사람이 이해하기 쉽게 작성된 프로그래밍 언어
•
가독성이 높고 다루기 쉬움
•
실행을 위해서는 컴퓨터가 이해할 수 있도록 저급 언어로 번역하는 과정이 필요
•
C, Java, BASIC, 포트란, 코볼 등
고급언어로 작성된 프로그램을 실행시키는 두가지 방법이 있다.
프로그램을 컴파일 하거나 인터프리터(interpreter)에 통과시키는 방법이 있는데 컴파일러와 인터프리터의 가장 큰 차이는 시점이다.
컴파일러 (Compiler)
실행 전 고급 언어로 작성된 프로그램을 목적 코드로 번역하여 실행
•
런타임 이전에 목적코드로 변경
•
CPU에 의존적
•
번역 실행과정을 거치기 때문에 시간이 오래 걸림
•
한번 번역 후에는 다시 번역하지 않으므로 실행 속도가 빠름
•
C, Java
인터프리터 (Interpreter)
실행 중 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행
•
런타임 중에 프로그램 한줄씩 해석하며 실행
•
목적 프로그램은 생성되지 않음
•
번역 속도가 빠름
•
프로그램 실행 시 매번 번역해야하므로 실행 속도가 느림
•
Python, BASIC, JavaScript
하지만 현재는 인터프리터와 컴파일러의 경계가 모호해지고 있어서 사라지는 추세...라고 한다 ⇒ JIT 컴파일
JIT 컴파일
프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법
컴파일 방식과 인터프리트 방식의 혼합
•
JVM, .NET, V8