세상에는 컴퓨터가 발전함에 따라 다양한 프로그래밍 언어들이 나왔습니다. Java, 파이썬, PHP등등 다양한 언어중, 이번 게시물에선 1972년 AT&T 벨 연구소에서 개발된 가장 기초적인 프로그래밍 언어인 C언어에 대해서 자세히 알아보도록 하겠습니다.

프로그래밍 언어
컴퓨터는 사람들과는 달리 자기들만의 언어를 이용해야 합니다. 그 언어들이 바로 프로그래밍 언어라고 불리는데, 컴퓨터에게 명령을 내리고, 알고리즘을 구현하며, 데이터를 처리하기 위해 사용되는 언어입니다. 다양한 종류의 프로그래밍 언어가 있으며, 이번 게시물에선 C언어를 소개하는 만큼, 다른 언어들은 간단히 알아보도록 하겠습니다.
Java는 독립적인 특성을 가지고 있어 한 번 작성하면 어디서든 실행할 수 있습니다. Java를 한마디로 표현하자면 “이식성”이라고 표현하는것이 가장 정확하며, 주로 웹 애플리케이션, 엔터프라이즈 급 시스템, 안드로이드 앱 개발에 사용됩니다.
Python은 초보자에게 친숙한 문법으로, 주로 웹 개발이나 데이터 과학, 인공 지능 등 다양한 분야에서 사용됩니다. 가독성이 높고, 많은 라이브러리와 프레임워크를 가지고 있습니다.
JavaScript는 웹 개발에 필수적인 언어로, 웹 브라우저 내에서 실행되며 브라우저를 보다 동적으로 만들어 줍니다. 주로 Node.js 같은 플랫폼을 통해 서버 개발에도 사용됩니다.
Ruby는 웹 애플리케이션 개발에 주로 사용되는 프로그래밍 언어로, 빠른 개발을 가능하게 하는 프레임워크와 도구를 가지고 있다는게 특징입니다.
PHP는 웹 개발과 밀접한 관련이 있는 언어입니다. 워드프레스에서 플러그인이나 CMS 백엔드 개발에 주로 사용됩니다.
Swift는 애플의 iOS와 macOS 애플리케이션 개발을 위해 설계된 언어입니다.
Kotlin는 안드로이드 앱 개발을 위한 공식 언어 중 하나입니다.
C언어
C언어는 오래된 컴퓨터 프로그래밍 언어로, 1972년 AT&T 벨 연구소에서 Dennis Ritchie에 의해 개발됬습니다. 이 언어는 UNIX 운영 체제의 개발을 위해 만들어졌으며, 이후 다양한 운영 체제와 소프트웨어 개발에 널리 사용되었습니다.
특징
저수준 언어와 고수준 언어의 특성
컴퓨터와 좀더 가까운 언어를 저수준 언어라 하고, 인간과 좀더 가까운 언어를 고수준 언어라고 합니다. C언어는 이러한 특징들 동시에 가지고 있습니다. 저수준 언어의 특징으로는 포인터를 통해 메모리 주소에 직접 접근이 가능하다는 점입니다. 이로인해 효율적인 메모리 관리가 가능하고, 하드웨어와 직접적인 상호작용을 통해 운영체제나 임베디드 시스템과 같은 프로그래밍에 적합하며 이렇게 작성된 코드는 직접 기계어로 컴파일러가 변환하기 때문에 실행 속도가 빠르고 효율적이라는 특징이 있습니다.
이렇게 저수준 언어의 특징을 가지면서도 고수준 언어의 특징 또한 가지고 있는데, 먼저 함수나 루프, If 조건문 등을 사용하여 코드를 구조화시킬 수 있습니다. 이로인해 가독성과 유지보수성을 높일 수 있으며, 다양한 표준 라이브러리를 제공하여 입출력이나 처리, 연산등을 쉽게 수행 가능합니다.
높은 이식성
작성된 프로그래밍 언어는 다양한 환경에서 별다른 수정을 거치지 않고도 실행이 가능합니다. 이는 해당 언어가 처음 만들어질때부터 설계된 철학중 하나이기도 합니다.
먼저, ANSI라는 미국 표준 협회에 의해 처음으로 표준화가 되었고, 이후 여러 차례의 표준화 과정을 거치면서 다양한 플랫폼에서의 호환성이 보장되었습니다.
또한 다양한 운영 체제와 하드웨어 아키텍처들을 위한 C컴파일러가 따로 존재하며, 각기 다른 환경에서 C 코드를 실행 가능한 바이너리로 변환시켜줍니다. 이는 곧 C 프로그램을 거의 모든 시스템에서 실행할 수 있도록 만들어줍니다.
마지막으로 표준 라이브러리는 고정적이지 않고 특정 하드웨어의 기능에 의존하지 않는, 범용적인 기능을 제공합니다.
높은 점유율
C언어와 Java는 오랜 기간 동안 프로그래밍 언어 순위에서 상위권을 유지하고 있으며, 특히 C, C++, C#들은 점유율 면에서 압도적인 1위를 차지하고 있습니다. 또한 MSVC 2019 버전부터는 Windows에서도 C11/C17 표준을 정식으로 지원하기 시작했으며, Linux와 macOS는 각각 GCC와 LLVM/Clang 컴파일러를 통해 C언어를 잘 지원하며, 특히 macOS는 Objective-C 지원을 통해 완전히 지원됩니다. 이 언어를 공부하고자 한다면 GCC나 LLVM/Clang을 사용하는 것이 좋으며, MSVC 2019 이후 버전을 사용하는 것이 좋습니다.
C++과의 관계
두 언어의 관계는 매우 밀접하다고 볼 수 있습니다. C언어는 1972년에 개발되어 프로그래밍 언어의 기초 중 하나로 자리 잡았으며, 단순성, 효율성, 그리고 낮은 수준의 하드웨어 접근 능력 때문에 널리 사용되었습니다. 반면, C++는 1980년대 초에 Bjarne Stroustrup에 의해 처음으로 개발되었는데, C언어를 기반으로 하면서 객체지향 프로그래밍(OOP)과 같은 새로운 프로그래밍 패러다임을 도입했습니다.
C++는 ‘C with Classes’라는 이름으로 시작되었을 정도로 C언어의 확장 개념과도 같습니다. C++는 C언어의 모든 기능을 포함하면서, 다양한 기능을 추가하여 이 언어를 사용하는 프로그래머가 좀 더 복잡한 시스템을 더 효율적으로 개발할 수 있도록 도와줘왔고, 결론적으로 C++는 프로그램의 구조화와 관리를 용이하게 하는 객체지향적 접근 방식을 C언어의 효율성과 결합한 것으로 말할 수 있습니다.
정리하자면, C++는 C언어의 기능을 포함하고 확장한 프로그래밍 언어로서, C언어가 제공하는 저수준의 프로그래밍 능력과 효율성 위에, C++는 객체지향 프로그래밍과 제네릭 프로그래밍을 통한 더 높은 수준의 추상화를 추가한 것이라 할 수 있습니다.

역사
등장 이전
1950년대
초기 컴퓨터 프로그램은 어셈블리 언어로 작성되었습니다. 이는 기계어와 거의 차이가 없는 수준의 저수준 언어로, 매우 복잡하고 오류가 자주 발생하였습니다.
1957년에 John Backus와 그의 팀이 개발한 Fortran은 과학 계산용 고급 언어로 최초의 고급 프로그래밍 언어 중 하나입니다.
1958년에 John McCarthy가 개발한 Lisp는 주로 인공지능 연구에 사용되었습니다.
1960년대
COBOL은 1960년에 비즈니스 데이터 처리용 언어로 개발되었으며, Grace Hopper 등이 개발에 참여하였습니다.
ALGOL은 1960년에 개발된 언어로, 알고리즘 표현에 적합하며 구조적 프로그래밍의 개념을 도입한 언어입니다.
PL/I은 1964년에 IBM이 개발한 다목적 프로그래밍 언어입니다.
BCPL은 1967년에 Martin Richards가 개발한 언어입니다.
등장 이후
1970년대
C 언어는 1972년에 Dennis Ritchie가 벨 연구소에서 개발한 언어입니다. Unix 운영 체제 개발을 위해 만들어졌으며, 이후 많은 시스템 소프트웨어와 응용 프로그램에 사용되었습니다.
Pascal은 Niklaus Wirth가 교육용으로 개발한 구조적 프로그래밍 언어입니다.
1980년대
- C++는 1983년에 Bjarne Stroustrup가 C 언어에 객체 지향 프로그래밍 개념을 도입하여 개발한 언어입니다.
- Objective-C는 Brad Cox가 C 언어에 객체 지향 개념을 추가하여 개발했습니다.
- Ada는 미국 국방부가 시스템 프로그래밍을 위해 개발한 언어입니다.
1990년대
Java는 1995에 Sun Microsystems의 James Gosling이 개발한 언어로, 플랫폼 독립성을 강조했습니다.
Python은 Guido van Rossum이 개발한 인터프리터 언어로, 간결하고 읽기 쉬운 문법이 특징입니다.
2000년대 이후:
C#은 2000년에 Microsoft에서 개발한 언어로, .NET 프레임워크와 함께 사용됩니다.
Swift는 2014년에 Apple에서 Objective-C를 대체하기 위해 개발된 언어입니다.