📒

프로그래밍 언어

프로그래밍 언어

컴퓨터 시스템을 구동시키는 소프트웨어를 작성하기 위한 형식언어
우리가 사람과 대화할 때 그 사람이 이해할 수 있는 언어를 사용하듯, 우리가 컴퓨터에게 명령을 내릴 때는 컴퓨터가 이해할 수 있는 언어인 기계어(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