프로그래밍 언어
위키백과 ― 우리 모두의 백과사전.
프로그래밍 언어는 컴퓨터 시스템을 구동시키는 소프트웨어를 작성하기 위한 언어이다. 일반적으로 말할 때에는 프로그래밍 언어를 지원하는 소프트웨어, 곧 소프트웨어를 작성하기 위한 소프트웨어를 가리키는 때가 많고, 이때에는 프로그래밍 언어와 소프트웨어를 구분하지 않고 소프트웨어를 프로그래밍 언어로 보기도 한다.
예를 들면, 델파이는 프로그래밍 언어인 오브젝트 파스칼을 지원하는 소프트웨어를 작성하기 위한 소프트웨어일 뿐이지만, 델파이를 별개의 프로그래밍 언어로 보는 때가 더 많다.
[편집] 프로그래밍 언어의 구조
이 문단의 내용은 출처가 분명하지 않습니다.
참고하신 문헌이나 신뢰할 수 있는 출처를 주석 등으로 표기해 주십시오. 검증되지 않은 내용은 의심받거나 삭제될 수 있습니다. (토론)
컴퓨터 프로그램은 데이터(data)와 명령어(instruction), 이렇게 두 부분으로 나뉜다. 데이터는 일련의 바이트 형식으로 저장된다. 프로그래밍 언어는 이런 바이트들을 유용한 형태로 정리한다. 사용자는 필요에 따라 데이터를 다음과 같이 선언(declaration)할 수 있다.
int MyData; // 정수형 데이터
이와 같이 선언하면, 컴퓨터 메모리의 한 영역을 'MyData'라는 이름의 정수(integer) 타입으로 저장한다. 메모리의 어느 영역에 데이터를 저장할 것인가는 컴파일러가 결정한다. 일반적으로 사용자는 컴파일러의 내부가 어떻게 동작하는지 몰라도 프로그램을 만들 수 있다. 'MyData'는 간단한 변수(variable)이고, 한 개의 정수만 변수에 담을 수 있다. 여러 개의 변수를 만들고 싶으면 아주 간단하게 배열(array)을 만들 수 있다.
int MyArray[100]; // 100개의 정수형 변수 선언
소프트웨어 엔지니어링의 발달로 보다 복잡한 데이터 타입들이 필요해 졌다. 예를 들어, 사각형을 만드는 데 필요한 데이터 타입을 정의한다고 하자. 한 사각형을 정의하려면 너비, 높이, 색과 같은 여러 정보가 동시에 필요하다. 따라서, 위와 같은 변수나 배열의 선언만으로는 이런 정보들을 잘 정의하기가 어렵다. C 언어와 같은 고급 언어(high-level language)는 보다 정교한 데이터 타입의 선언을 지원하여 여러 가지 다른 형식의 데이터 선언들을 한데 엮은 새로운 데이터 타입을 만들 수 있다.
struct rectangle { int width; // 사각형의 너비를 픽셀 단위로 저장 int height; // 사각형의 높이를 픽셀 단위로 저장 color_type color; // 사각형의 색 정보를 저장 };
이러한 데이터들을 활용하기 위해서는 컴퓨터에게 지시를 내려야 한다. 컴퓨터는 현재 실행하고 있는 지시의 내용과 다음에 실행할 지시의 위치만 알고 있다. 컴퓨터 언어는 컴퓨터의 하드웨어를 직접 제어하는 초기의 어셈블리와 같은 언어에서부터 시작하여 현재에는 C 언어과 같은 고급 언어(high-level language)로 발전되어 왔다. 프로그램 언어가 상위 레벨로 발전될 수록 프로그램은 좀더 인간의 언어에 가까운 형태가 된다. 이에 따라 프로그램 언어의 학습과 프로그램의 구현이 보다 수월해진다.
프로그래머는 상위 레벨의 지시문으로 프로그램을 작성하면 컴파일러가 이 지시문을 컴퓨터가 이해할 수 있는 기계어로 번역한다. 지시문들을 한데 묶어 놓은 것들을 함수(function)이라 한다. 함수는 특정한 동작을 일반적인 형태로 정의해 놓은 지시문의 집합이다. 똑같은 동작이 필요하면 지시문을 다시 작성할 필요없이 함수의 매개변수를 이용하여 계속 사용할 수 있다.
예를 들어, C 언어는 검색, 정렬, 입출력에 관련된 다양하고 풍부한 표준 함수(standard functions)들을 제공한다. 이런 표준 함수가 제공되는 덕분에 사용자는 해당 함수를 만드는 데 드는 노력을 절약할 수 있다. 연결된 함수들을 한데 묶어 놓은 것은 모듈(module)이라 하고, 모듈들의 상호 연결로 하나의 프로그램이 구성된다. 그리고 이러한 모듈들을 재사용 할 수 있게 모아둔 것을 라이브러리(library)라 한다.
[편집] 주요 프로그래밍 언어의 목록
[편집] 같이 보기
|
|
|
|---|---|
| 산업용 | 델파이 · 루비 · 리스프 · 비주얼 베이직 · 스몰토크 · 어셈블리 · 얼랑 · 에이다 · 오브젝티브-C · 자바 · 자바스크립트 · 코볼 · 파이썬 · Perl · 포트란 · ABAP · AWK · C · C++ · C# · PHP · PL/SQL · SAS · sh · VB.NET |
| 교육용 | 로고 · 스킴 · 에펠 · 파스칼 · 프롤로그 · 하스켈 · ML |
| 역사적 의미가 있는 언어 |
베이직 · 시뮬라 · 알골 · 클리퍼 · 파워빌더 · APL · MUMPS · PL/I |
|
|
|
|---|---|
| 수학적 기초 | 수리논리학 · 집합론 · 정수론 · 그래프 이론 · 형 이론 · 범주론 · 수치 해석 |
| 계산 이론 | 오토마타 이론 · 계산 가능성 이론 · 계산 복잡도 이론 · 양자 계산 이론 |
| 알고리즘 & 자료 구조 | 알고리즘 · 자료 구조 · 계산 기하학 |
| 프로그래밍 언어 & 컴파일러 | 구문 분석 · 컴파일러 · 인터프리터 · 프로그래밍 언어 · 구조적 프로그래밍 · 객체 지향 프로그래밍 |
| 병행,병렬 & 분산 시스템 | 병행 컴퓨팅 · 분산 컴퓨팅 · 병렬 컴퓨팅 · 그리드 컴퓨팅 · 클라우드 컴퓨팅 · IaaS · PaaS · SaaS |
| 소프트웨어 공학 | 요구 분석 · 소프트웨어 설계 · 컴퓨터 프로그래밍 · 형식수법 · 소프트웨어 테스트 · 소프트웨어 개발 |
| 시스템 아키텍처 | 컴퓨터 아키텍처 · 마이크로아키텍처 · 운영 체계 |
| 통신 & 네트워크 | 컴퓨터 오디오 · 라우팅 · 네트워크 토플로지 · 암호학 |
| 데이터베이스 | 데이터 마이닝 · RDBMS · SQL |
| 인공 지능 | 자동추론 · 전산언어학 · 컴퓨터 비전 · 진화 연산 · 기계 학습 · 자연 언어 처리 · 로봇학 |
| 컴퓨터 그래픽 | 시각화 · 영상 처리 |
| 인간과 컴퓨터 상호 작용 | Computer accessibility · 사용자 인터페이스 · 착용 컴퓨터 · 유비쿼터스 컴퓨팅 · 가상현실 |
| 계산과학 | 인공생명 · 생물정보학 · 인지과학 · 계산화학 · 계산론적 신경과학 · 계산물리학 · 수치 해석 · Symbolic mathematics |
| 정보보호 | 암호학 · 물리보안 · 소프트웨어 보안 · 인터넷 보안 · 네트워크 보안 · 해킹 · 크래킹 |

