범용 프로그래밍 언어
범용 프로그래밍 언어(General-purpose programming language)는 하나의 특정 문제 영역이나 실행 환경에만 사용하도록 한정되지 않고, 여러 종류의 소프트웨어를 작성하는 데 사용할 수 있도록 설계되거나 발전한 프로그래밍 언어이다. 운영체제와 개발 도구 같은 시스템...
| 상위 분류 | 프로그래밍 언어 |
|---|---|
| 분류 기준 | 활용 범위와 목적 |
| 대응 개념 | 도메인 특화 언어, 특수 목적 프로그래밍 언어 |
| 대표 언어 | C (프로그래밍 언어), C++, Java, Python, JavaScript, Go (프로그래밍 언어), Rust |
| 주요 활용 | 시스템 소프트웨어, 응용 프로그램, 웹 서비스, 모바일 애플리케이션, 게임, 데이터 처리, 자동화 |
범용 프로그래밍 언어(General-purpose programming language)는 하나의 특정 문제 영역이나 실행 환경에만 사용하도록 한정되지 않고, 여러 종류의 소프트웨어를 작성하는 데 사용할 수 있도록 설계되거나 발전한 프로그래밍 언어이다. 운영체제와 개발 도구 같은 시스템 소프트웨어부터 데스크톱 응용 프로그램, 웹 서비스, 모바일 애플리케이션, 게임, 데이터 처리와 업무 자동화에 이르기까지 서로 다른 분야의 프로그램을 같은 언어와 생태계로 개발할 수 있다.
범용성은 언어가 모든 분야에 똑같이 적합하거나 필요한 기능을 모두 언어 자체에 포함한다는 의미가 아니다. 범용 언어는 일반적인 계산, 데이터 표현, 제어 흐름, 함수와 모듈 구성처럼 여러 문제에 공통으로 필요한 기능을 제공하고, 표준 라이브러리와 외부 패키지, 프레임워크, 운영체제 인터페이스를 결합하여 각 분야에 필요한 기능을 확장한다. 같은 언어도 구현체와 라이브러리, 도구 및 사용 공동체가 발전하면서 처음 설계할 때 예상하지 않았던 분야까지 활용 범위를 넓힐 수 있다.
범용 프로그래밍 언어를 구분하는 절대적인 기술 조건은 없다. 언어의 타입 체계가 정적인지 동적인지, 기계어로 직접 컴파일되는지 가상 머신이나 인터프리터에서 실행되는지, 메모리를 수동으로 관리하는지 자동으로 관리하는지는 범용성 자체를 결정하지 않는다. C (프로그래밍 언어)와 C++처럼 하드웨어와 가까운 제어를 제공하는 언어, Java와 C#처럼 관리형 실행 환경을 중심으로 하는 언어, Python과 JavaScript처럼 동적 실행과 높은 추상화를 제공하는 언어 모두 여러 문제 영역에서 사용되며 범용 언어로 분류된다. C++ 국제 표준과 Go 언어 사양도 각 언어를 범용 프로그래밍 언어로 설명한다.[1][2]
범용 언어와 반대되는 범주로는 특정 분야의 개념과 작업을 직접 표현하도록 만든 도메인 특화 언어이 있다. SQL은 관계형 데이터베이스 질의와 데이터 조작을, HTML은 웹 문서의 구조 표현을, 정규 표현식은 문자열 패턴 기술을 중심으로 한다. 다만 두 범주의 경계는 고정되어 있지 않다. 처음에는 특정 분야를 위해 만들어진 언어가 기능과 생태계를 확장하여 다양한 프로그램에 사용되기도 하며, 범용 언어가 특정 분야에 특화된 라이브러리나 내부 언어를 제공하기도 한다.
범용 프로그래밍 언어의 가치는 서로 다른 문제를 하나의 언어로 처리할 수 있다는 데만 있지 않다. 여러 분야에서 공통으로 사용할 수 있는 컴파일러와 런타임, 표준 라이브러리, 패키지 관리 체계, 개발 도구와 교육 자료를 공유할 수 있으며, 개발자는 기존 지식과 코드를 새로운 분야에 재사용할 수 있다. 반면 실제 소프트웨어 개발에서는 언어의 범용성보다 대상 플랫폼과 성능, 안전성, 배포 방식, 기존 코드와의 호환성, 사용 가능한 라이브러리 및 개발 인력과 같은 조건이 언어 선택에 더 직접적인 영향을 준다.