범용 프로그래밍 언어

범용 프로그래밍 언어(General-purpose programming language)는 하나의 특정 문제 영역이나 실행 환경에만 사용하도록 한정되지 않고, 여러 종류의 소프트웨어를 작성하는 데 사용할 수 있도록 설계되거나 발전한 프로그래밍 언어이다. 운영체제와 개발 도구 같은 시스템...

상위 분류프로그래밍 언어
분류 기준활용 범위와 목적
대응 개념도메인 특화 언어, 특수 목적 프로그래밍 언어
대표 언어C (프로그래밍 언어), C++, Java, Python, JavaScript, Go (프로그래밍 언어), Rust
주요 활용시스템 소프트웨어, 응용 프로그램, 웹 서비스, 모바일 애플리케이션, 게임, 데이터 처리, 자동화

범용 프로그래밍 언어(General-purpose programming language)는 하나의 특정 문제 영역이나 실행 환경에만 사용하도록 한정되지 않고, 여러 종류의 소프트웨어를 작성하는 데 사용할 수 있도록 설계되거나 발전한 프로그래밍 언어이다. 운영체제와 개발 도구 같은 시스템 소프트웨어부터 데스크톱 응용 프로그램, 웹 서비스, 모바일 애플리케이션, 게임, 데이터 처리와 업무 자동화에 이르기까지 서로 다른 분야의 프로그램을 같은 언어와 생태계로 개발할 수 있다.

범용성은 언어가 모든 분야에 똑같이 적합하거나 필요한 기능을 모두 언어 자체에 포함한다는 의미가 아니다. 범용 언어는 일반적인 계산, 데이터 표현, 제어 흐름, 함수와 모듈 구성처럼 여러 문제에 공통으로 필요한 기능을 제공하고, 표준 라이브러리와 외부 패키지, 프레임워크, 운영체제 인터페이스를 결합하여 각 분야에 필요한 기능을 확장한다. 같은 언어도 구현체와 라이브러리, 도구 및 사용 공동체가 발전하면서 처음 설계할 때 예상하지 않았던 분야까지 활용 범위를 넓힐 수 있다.

범용 프로그래밍 언어를 구분하는 절대적인 기술 조건은 없다. 언어의 타입 체계가 정적인지 동적인지, 기계어로 직접 컴파일되는지 가상 머신이나 인터프리터에서 실행되는지, 메모리를 수동으로 관리하는지 자동으로 관리하는지는 범용성 자체를 결정하지 않는다. C (프로그래밍 언어)C++처럼 하드웨어와 가까운 제어를 제공하는 언어, JavaC#처럼 관리형 실행 환경을 중심으로 하는 언어, PythonJavaScript처럼 동적 실행과 높은 추상화를 제공하는 언어 모두 여러 문제 영역에서 사용되며 범용 언어로 분류된다. C++ 국제 표준과 Go 언어 사양도 각 언어를 범용 프로그래밍 언어로 설명한다.[1][2]

범용 언어와 반대되는 범주로는 특정 분야의 개념과 작업을 직접 표현하도록 만든 도메인 특화 언어이 있다. SQL은 관계형 데이터베이스 질의와 데이터 조작을, HTML은 웹 문서의 구조 표현을, 정규 표현식은 문자열 패턴 기술을 중심으로 한다. 다만 두 범주의 경계는 고정되어 있지 않다. 처음에는 특정 분야를 위해 만들어진 언어가 기능과 생태계를 확장하여 다양한 프로그램에 사용되기도 하며, 범용 언어가 특정 분야에 특화된 라이브러리나 내부 언어를 제공하기도 한다.

범용 프로그래밍 언어의 가치는 서로 다른 문제를 하나의 언어로 처리할 수 있다는 데만 있지 않다. 여러 분야에서 공통으로 사용할 수 있는 컴파일러와 런타임, 표준 라이브러리, 패키지 관리 체계, 개발 도구와 교육 자료를 공유할 수 있으며, 개발자는 기존 지식과 코드를 새로운 분야에 재사용할 수 있다. 반면 실제 소프트웨어 개발에서는 언어의 범용성보다 대상 플랫폼과 성능, 안전성, 배포 방식, 기존 코드와의 호환성, 사용 가능한 라이브러리 및 개발 인력과 같은 조건이 언어 선택에 더 직접적인 영향을 준다.

역사

초기 범용 언어

고급 프로그래밍 언어의 등장

구조적 프로그래밍과 이식성

객체 지향 언어의 확산

관리형 실행 환경과 웹의 성장

현대 범용 언어

정의와 분류

범용성의 의미

분류 기준의 상대성

언어 설계와 실제 활용의 차이

튜링 완전성과 범용성

주요 구성 요소

데이터 타입과 연산

제어 흐름

함수와 추상화

모듈과 프로그램 구성

입출력과 외부 환경

오류 처리

동시성과 병렬성

언어 설계의 여러 방향

저수준 제어와 시스템 접근

고수준 추상화

정적 타입과 동적 타입

컴파일과 해석

수동 메모리 관리와 자동 메모리 관리

단일 패러다임과 다중 패러다임

실행 환경과 구현

네이티브 코드

가상 머신

인터프리터

혼합 실행 방식

외국 함수 인터페이스

플랫폼 이식성

표준 라이브러리와 생태계

표준 라이브러리

패키지와 모듈

프레임워크

개발 도구

구현체와 호환성

대표적인 범용 프로그래밍 언어

C와 C++

Java와 C#

Python과 Ruby

JavaScript와 TypeScript

Go와 Rust

Swift와 Kotlin

Lisp와 범용 함수형 언어

활용 분야

시스템 소프트웨어

데스크톱 응용 프로그램

웹과 서버

모바일 애플리케이션

게임과 실시간 소프트웨어

데이터 처리와 과학 계산

인공지능과 머신러닝

임베디드 시스템

자동화와 스크립팅

도메인 특화 언어와의 관계

범용 언어와 도메인 특화 언어

범용 언어에 내장된 특화 언어

외부 DSL과 내부 DSL

범용 언어로의 확장

프로그래밍 언어 선택

문제 영역

실행 성능과 자원 사용

안전성과 신뢰성

대상 플랫폼

라이브러리와 기존 생태계

개발 생산성과 유지보수

상호 운용성과 기존 코드

영향

장점과 한계

관련 문서

  1. ISO/IEC 14882:2024 — Programming languages — C++
  2. The Go Programming Language Specification