프로그래밍 언어

파일:C Hello World Program.png|섬네일|오른쪽|402px|C 프로그래밍 언어로 작성된 단순한 컴퓨터의 프로그램의 소스 코드. 컴파일되어 실행되었을 때 헬로 월드 메시지를 보여주고 있다.
프로그래밍 언어(programming language)는 컴퓨터 시스템을 구동시키는 소프트웨어를 작성하기 위한 형식언어로 주로 고급 언어일수록 사람이 사용하는 언어에 가깝다.
일반적으로 말할 때 프로그래밍 언어를 지원하는 소프트웨어, 곧 소프트웨어를 작성하기 위한 소프트웨어를 가리키는 때가 많고 이때 프로그래밍 언어와 소프트웨어를 구분하지 않고 소프트웨어를 프로그래밍 언어로 보기도 한다.날짜=2010-8-31 예를 들면 델파이는 프로그래밍 언어인 오브젝트 파스칼을 지원하는 소프트웨어를 작성하기 위한 소프트웨어일 뿐이지만 델파이를 별개의 프로그래밍 언어로 보는 때가 더 많다.날짜=2010-8-31

**역사**
최초의 컴퓨터는 종종 프로그래밍 언어의 도움 없이 프로그래밍되었는데 이는 프로그램들을 절대적인 기계어로 작성함으로써 이루어졌다. 십진이나 이진 형태의 프로그램들은 천공 카드나 자기 테이프로부터 읽거나 컴퓨터 프론트 패널의 스위치를 켜고 끔으로써 불러들였다. 절대적인 기계어는 나중에 1세대 프로그래밍 언어(1GL)로 명칭이 정해졌다.
다음 단계로 이른바 2세대 프로그래밍 언어(2GL), 곧 어셈블리어가 개발되었으며 여전히 특정 컴퓨터의 명령어 집합 구조와 밀접하게 관계되었다. 프로그램을 훨씬 더 인간이 읽기 쉽게 만들어주었을 뿐 아니라 주소 계산 시 따분하고 오류가 발생할 경향이 있는 프로그래머를 안심시켜 주었다.
최초의 고급 프로그래밍 언어, 즉 3세대 프로그래밍 언어(3GL)는 1950년대에 작성되었다. 컴퓨터용으로 설계될 초기의 고급 프로그래밍 언어는 Plankalkül였으며, 콘라트 추제가 1943년부터 1945년까지 독일의 Z3용으로 개발될 것이었다. 그러나 1998년, 2000년까지 구현되지 않았다.
4세대 프로그래밍 언어(4GL)는 3세대 프로그래밍 언어 보다 내부 컴퓨터 하드웨어의 상세한 부분을 더 고급적으로 추상화시키는 것을 목적으로 한다. 5세대 프로그래밍 언어(5GL)는 프로그래머가 작성한 알고리즘을 이용하지 않고 프로그램에 주어지는 제약을 사용하여 문제를 해결하는 언어이다.

**A언어부터 C언어까지**
C언어의 C는 약간의 의미를 가지고 있다. 이는 프로그래밍 언어의 역사와도 관련 있다. 통상 A언어부터 B언어, C언어 순으로 발전해 왔다고 일컬어진다.- A언어: 과거에는 ALGOL을 의미했다. (ALGOL은 Algorithm Language의 약자로, 알고리즘 연구개발을 위해 만들어졌다.) 현재는 특정 프로그래밍 언어를 지칭한다기 보다, 구조화된 프로그래밍 언어를 지칭하는 용어로 이용한다.- B언어: 켄 톰슨(Ken Thompson)이 DEC사의 PDP-7으로 어셈블리어로 유닉스라는 운영 체제를 만들게 되었는데, 이후 이 운영 체제를 고급언어로 다시 만들기 위해 마틴 리차드(Matin Richards)의 BCPL(Basic CPL, CPL = Combined Programming Language)을 바탕으로 B라는 언어를 만들게 되었다. 이 언어는 자료형이 없었는데 이는 C언어를 만드는 계기가 되었다.- C언어: 켄 톰슨이 만든 B언어를 보고 그의 동료였던 데니스 리치가 1972년에 B언어에 데이터 유형 개념을 추가하여 만든 언어이다. 이후 유닉스의 구현 언어로 B언어를 제치고 C언어가 채택되면서 이듬해인 1973년에 C언어로 구현된 유닉스가 만들어지게 되었다.

**구조**
컴퓨터 프로그램은 데이터(data)와 명령어(instruction), 이렇게 두 부분으로 나뉜다. 데이터는 일련의 바이트 형식으로 저장된다. 프로그래밍 언어는 이런 바이트들을 유용한 형태로 정리한다. 사용자는 필요에 따라 데이터를 다음과 같이 선언(declaration)할 수 있다.
int MyData; // 정수형 데이터 
이와 같이 선언하면, 컴퓨터 메모리의 한 영역을 'MyData'라는 이름의 정수(integer) 타입으로 저장한다. 메모리의 어느 영역에 데이터를 저장할 것인가는 컴파일러가 결정한다. 일반적으로 사용자는 컴파일러의 내부가 어떻게 동작하는지 몰라도 프로그램을 만들 수 있다. 'MyData'는 간단한 변수(variable)이고, 한 개의 정수만 변수에 담을 수 있다. 여러 개의 변수를 만들고 싶으면 아주 간단하게 배열(array)을 만들 수 있다.
int MyArray100; // 100개의 정수형 변수 선언 
소프트웨어 공학의 발달로 보다 복잡한 자료형들이 필요해졌다. 예를 들어, 사각형을 만드는 데 필요한 자료형을 정의한다고 하자. 한 사각형을 정의하려면 너비, 높이, 색과 같은 여러 정보가 동시에 필요하다. 따라서, 위와 같은 변수나 배열의 선언만으로는 이런 정보들을 잘 정의하기가 어렵다. C 언어와 같은 고급 언어(high-level language)는 보다 정교한 자료형의 선언을 지원하여 여러 가지 다른 형식의 데이터 선언들을 한데 엮은 새로운 자료형을 만들 수 있다.
struct rectangle {
int width;        // 사각형의 너비를 픽셀 단위로 저장
int height;       // 사각형의 높이를 픽셀 단위로 저장
color_type color; // 사각형의 색 정보를 저장
};
이러한 데이터들을 활용하기 위해서는 컴퓨터에게 지시를 내려야 한다. 컴퓨터는 현재 실행하고 있는 지시의 내용과 다음에 실행할 지시의 위치만 알고 있다. 컴퓨터 언어는 컴퓨터의 하드웨어를 직접 제어하는 초기의 어셈블리와 같은 언어에서부터 시작하여 현재에는 C 언어와 같은 고급 언어(high-level language)로 발전되어 왔다. 프로그램 언어가 상위 레벨로 발전될수록 프로그램은 좀 더 인간의 언어에 가까운 형태가 된다. 이에 따라 프로그램 언어의 학습과 프로그램의 구현이 보다 수월해진다.
프로그래머는 상위 레벨의 지시문으로 프로그램을 작성하면 컴파일러가 이 지시문을 컴퓨터가 이해할 수 있는 기계어로 번역한다. 지시문들을 한데 묶어 놓은 것들을 함수(function)라 한다. 함수는 특정한 동작을 일반적인 형태로 정의해 놓은 지시문의 집합이다. 똑같은 동작이 필요하면 지시문을 다시 작성할 필요없이 함수의 매개변수를 이용하여 계속 사용할 수 있다.
예를 들어, C 언어는 검색, 정렬, 입출력에 관련된 다양하고 풍부한 표준 함수(standard functions)를 제공한다. 이런 표준 함수가 제공되는 덕분에 사용자는 해당 함수를 만드는 데 드는 노력을 절약할 수 있다. 연결된 함수들을 한데 묶어 놓은 것은 모듈(module)이라 하고, 모듈들의 상호 연결로 하나의 프로그램이 구성된다. 그리고 이러한 모듈들을 재사용할 수 있게 모아둔 것을 라이브러리라 한다.

**비교**

**주요 프로그래밍 언어의 목록**
 저급 언어
** 기계어
** 어셈블리어- 고급 언어
** 베이직
** C
** C#
** C++
** D
** F#
** 파이썬
** 루비
** 자바
** 코틀린
** 파스칼
** 프롤로그
** 포트란
** 코볼
** 리스프
** 펄
** R
** 그루비
** 스칼라
** occam
** Swift
** 하스켈

**같이 보기**
 난해한 프로그래밍 언어

**각주**

**외부 링크**

분류:프로그래밍 언어 분류