먼저 C++을 공부하기 전에 역사부터 알아보려고 한다. 개인적으로 역사를 알아야만 C++언어의 탄생 배경과 이유에 대해 알 수 있고 이는 C++를 활용하는데 중요한 역할을 할것이라 생각하기 때문이다. 그리고 C++의 역사를 알기 위해선 C의 역사가 빠질 수가 없기에 이번 포스트에선 C와 C++의 역사에 대해 정리할 것이다.
C언어의 역사
C언어는 1972년 Dennis Ritchie에 의해 만들어졌다. C언어 이전엔 하드웨어마다 다른 기계어가 있었고 이것에 대응되는 어셈블리어(저급 언어)를 사용해야 했다. 이것은 하나의 컴퓨터에서 작성된 프로그램을 다른 하드웨어의 컴퓨터에서 실행하기 위해서는 다른 어셈블리어를 통해서 완전히 새로 만들어야된다는 것을 뜻했다. C언어의 목표는 UNIX 운영 체제와 더불어 컴퓨터 하드웨어에 상관없이 사용할 수 있게 만드는 것이었다. C언어가 하드웨어에 의존적이지 않은 대신 컴퓨터 하드웨어는 C언어를 곧바로 이해할 수 없다. 따라서 C언어를 컴퓨터가 이해할 수 있는 저급 언어로 번역하기 위해 컴파일러라는 별도의 프로그램이 필요하게 되었다. 이렇게 하드웨어에 상관없이 사용할 수 있는 특징을 이식성이라고 부른다.
C언어의 이식성과 더불어 또 다른 특징으로 구조화가 있다. 구조적인 프로그래밍이 탄생한 배경은 다음과 같다. 컴퓨터가 발달하고 프로그램이 커지면서 제어해야되는 실행경로가 엄청나게 많아졌다. 하지만 초기 절차적 언어들은 이에 맞게 대응하지 못했고 코드가 엄청나게 복잡해졌다. 순서도를 본적이 있다면 알겠지만 실행단위가 커질수록 점점 더 복잡하게 얽히면서 프로그램을 파악하기가 쉽지 않다. 시각적으로 표현한 순서도조차 파악하기 어려운데 코드로 작성된 프로그램을 보고 파악한다는 것은 불가능에 가까웠다. 따라서 구조적으로 규율을 만들어서 프로그램을 작성하기 위해 구조적 프로그래밍이 등장한다.
구조적 프로그래밍에서는 프로그램을 작은 단위로 쪼개어서 프로그램을 작성한다. 예를 들어 C언어의 경우 이 작은 단위는 함수이다. 이렇게 프로그램에서 시작하여 점점 단위를 쪼개서 작성하는 것을 탑다운(Top-Down)방식이라고 부른다. 함수는 기본적으로 입력-프로세스-출력의 형태로 각각의 실행단위를 가지고 있다. 이렇게 프로그램의 기본 단위인 함수들을 통해서 큰 프로그램을 보다 쉽게 이해할 수 있게 되었다.
C++언어의 역사
구조적 프로그래밍이 등장하고 나서도 프로그램이 더더욱 커질수록 상황은 나빠졌다. 그리고 이런 상황을 해결하기 위해 객체지향 프로그래밍(OOP)이라는 것이 등장한다. OOP에서는 구조적 프로그래밍에서 탑다운 방식을 사용하는 것과 달리 바텀업(Bottom-Up)방식을 사용한다. 이 방식에서는 제일 먼저 프로그램에서 사용될 클래스 설계를 하게된다. 또한 OOP는 기존에 작성한 코드를 재활용할 수 있게 만들어 작업시간을 줄일 수 있고 허용되지 않은 접근으로부터 데이터들을 보호할 수도 있다.
그리고 또 다른 패러다임이 있는데 바로 일반화 프로그래밍이다. 일반화 프로그래밍은 데이터 유형에 의존하지 않고 독립적으로 사용하기위해 필요한 접근법이다. 일반화 프로그래밍에선 지정되지 않은 데이터 유형에대한 함수를 한번 작성하고 이를 다양한 데이터 유형에서 활용할 수 있다. C++의 경우에는 템플릿을 이용하여 일반화 프로그래밍을 할 수 있다.
C++의 이름을 보면 C에 ++가 붙어있다. 여기서 ++는 C언어의 증가연산자에 해당되는데 증가연산자는 변수에 1을 더하는 연산자이다. 즉, C에서 기능을 확장한 언어라는 것을 잘 나타낸다. 여기서 ++가 의미하는 것은 C언어에 OOP와 일반화 프로그래밍을 더한것이라고 볼 수 있다. 요약하자면 C++는 C로부터의 절차적 프로그래밍, OOP, 일반화 프로그래밍 세가지의 특징을 모두 가지고 있다는 것이다.
이렇게 범용성을 통해 C++가 널리 퍼지고 성장하면서 일상 언어의 사투리와 마찬가지로 사용하는 지역마다 약간씩 차이가 생기는 문제가 생겼다. 이를 다루기 위해 ANSI (American National Standards Institute)는 1990년에 C++ 표준을 개발하기위한 위원회를 만들었다. 또한 ISO (International Organization for Standardization)도 참여하여 C++ 표준을 개발하기 위해 노력하고 있다.
C++는 현재까지도 많은 사람들이 이용하고 있는 언어이다. C++의 장점은 성능하락이 거의 없는 프로그램을 만들 수 있다는 점이고 단점으로는 배워야할 것들이 너무 많다는 것이다. 앞으로 공부하며 얻은 지식들을 블로그에 정리하여 올리는 식으로 부디 중간에 그만두지 않고 끝까지 끝낼 수 있으면 좋겠다