프로그래밍 언어

Kroisse (토론 | 기여)님의 2015년 4월 17일 (금) 03:15 판

컴퓨터 프로그램을 짤 때 쓰는 언어. 보통의 자연어랑 구분해서 이렇게 부른다.

구분

  • 저급 ↔ 고급: 사람이 이해하기 어렵지만 컴퓨터가 해석하긴 쉬운 언어를 저급 언어, 반대인 언어를 고급 언어라고 부른다. 물론 이분법으로 나뉘는 게 아니라 C 언어 같은 건 파이썬보다 저급이지만 어셈블리보다는 고급이다... 식으로 말할 수 있다. 고급 언어가 선택이었던 옛날에는 이 구분이 쓸모가 있었는데, 모든 언어가 고급이고 상황에 따라 다른 종류의 언어를 써야 하는 현대에는 별 쓸모 없는 구분이다.
  • 컴파일 ↔ 인터프리트: 프로그램을 실행하는 방법은 여러 가지가 있는데 사람이 짠 코드를 실시간으로 "번역"하는 걸 인터프리트라고 하고 미리 "번역"해서 컴퓨터가 빠르게 알아 먹을 수 있는 프로그램으로 만들어 주는 걸 컴파일이라고 한다. 엄밀히 말하면 언어보다는 언어 구현체에 가깝긴 하지만 아무래도 컴파일하는 게 편한 언어(C 언어 같은 것)가 있고 인터프리트하기 편한 언어(파이썬 같은 것)가 있게 마련이다. 근데 요즘은 원래대로라면 인터프리트되었던 언어도 성능을 위해 실시간으로 컴파일되거나, 원래대로라면 컴파일되었던 언어가 다른 언어로 재번역되어 인터프리트된다거나 하는 일도 잦아서 이것도 별 쓸모 있는 구분은 아니게 되었다(...).
  • 명령적 ↔ 선언적: 어떤 일을 프로그램으로 짤 때 그 일을 하기 위한 단계를 하나씩 써 나가는 언어를 명령적 언어, 일에 대해서만 써 놓고 빈칸을 컴퓨터가 채워 넣는 언어를 선언적 언어라고 한다. 보통 선언적인 언어로 갈수록 과정에는 별 관심이 없는 경우가 많고, 반대로 과정을 잘 제어해야 할 수록 명령적 언어를 써야 한다.
  • 절차적 ↔ 객체지향 ↔ 함수형 ↔ 논리 ↔ ...: 프로그램을 짤 때 어떤 모델에 맞추느냐에 따른 구분. 모든 게 프로시저(procedure)면 절차적(procedural), 모든 게 객체(object)면 객체지향(object-oriented), 모든 게 함수(function)면 함수형(functional), 모든 게 논리식이면 논리 프로그래밍 언어 등등. 흔히 패러다임이라고 하는데, 한 패러다임에 속하는 언어들끼리는 일단 하나를 배우면 쉽게 건너탈 수 있지만 서로 다른 패러다임을 배우는 데는 많은 시간이 든다는 게 정론. 고로 여러 패러다임에 속하는 언어를 배우는 게 이득이다. 절차적 언어의 예로 C 언어, 객체지향 언어의 예로 자바, 함수형 언어의 예로 하스켈, 논리 언어의 예로 프롤로그 등등이 있다.
  • 일반 목적 ↔ 시스템 ↔ 스크립팅 ↔ 난해 ↔ ...: 용도에 따른 구분. 많은 언어는 아무 용도로나 쓸 수 있지만, 어떤 언어는 시스템 프로그래밍에 특화되어 있고, 어떤 언어는 빠르게 짜고 버리는 코드(스크립트)에 특화되어 있고, 어떤 언어당신의 뇌를 엿먹이는데 특화되어 있다(...). 물론 용도에 맞는 언어를 쓰는 게 정답. 모든 용도에 최적인 언어 같은 거 없다.