본문 바로가기

Programmer.cpp/Cplusplus.cpp

C++ 이야기를 시작하면서

1992년. C++를 처음 접하면서 나의 프로그래밍 인생은 큰 전환점을 맞이했다.

88년부터 배우기 시작했던 C언어에 익숙해질 대로 익숙해져 있던 시기에 만난 이 난해한 언어는 선배의 한 마디 조언 덕분에 정복하고 싶은 언어로 떠올랐다.


"C를 잊어야 C++를 배울 수 있다"


그 시절 나는 우직했나보다. 정말 그 말대로 C를 잊기로 결심했고, 결국 거의 6개월 만에 C언어를 잊는데 성공했다. 물론, 잊는다는게 문법이라던가 사용법을 싹 다 잊어버린다는 의미는 아니다. 문제를 접근하는 C언어만의 방식을 잊는다는 의미다. 대표적인 Functional Programming Language인 C언어는 문제를 해결하기 위해 어떤 것들을 함수화 시키는지가 주된 접근법이었다. 함수의 특성상 다분히 기능 중심의 프로그래밍이었고, C 프로그램의 설계는 이 기능을 단위화 시키는 것에 초점이 맞춰졌다. 데이터와 코드는 철저히 분리되었고, 데이터를 처리하는 함수와 역할을 수행하는 함수 또한 분리되었다. 철저한 독립성이 C 프로그램의 철학이었고, 잘 만들어진 코드의 특성이었다.

C++는 달랐다. 그 시절엔 무척이나 생소한 OOP(Object Oriented Programming)라는 개념이 바닥에 깔려있는 언어. 철저히 분리시켜왔던 데이터를 계층화 하고, 밀봉하고, 유연한 접근을 시도한다. 그것을 Object라 부르고, 이 Object들이 상호작용을 하는 것이 프로그램의 기본 골격이 된다. 애초에 C와는 구조 자체가 달랐다. 처음엔 무척이나 생소했지만 차츰 시간이 지나면서 C++의 이러한 특성(OOP의 특성이기도 한)이 매력적으로 다가왔다. 내 주변에 늘 있던 물건들, 사람들, 일거리들이 Object로 보이기 시작했고, 머리속에선 그 Object의 class가 떠오르기 시작했다.

지금에 와서는 OOP는 프로그래머들에게 매우 익숙한(?) 개념이다. OOP를 구현할 수 있는 언어 또한 많다. 하지만, C++는 그 중에서도 특히나 강력하다. OOP를 구현하면서 미칠듯한 최적화를 가능하게 해주는 (내가 아는 한) 유일한 언어다. C++의 저자인 Bjarne Stroustrup는 아마도 이러한 나의 바램을 아는 듯이 지속적으로 이 두 가지(OOP의 구현과 최적화된 성능)를 꾸준히 만족시켜주면서 새로운 업데이트들을 만들어주고있다.


많은 언어들이 그렇듯이 C++ 또한 진화하고 있다.. 92년에 접했던 첫 버전에 이어 표준 라이브러리인 STL이 등장한 C++98, 최초의 안정화된 버전이라는 C++03, C 언어의 잔재를 싹 제거하고 이제서야 C++ 다운 모습이다 라는 느낌을 들게한 C++11, 그리고 지금의 C++14 (주로 편의성 위주로 업데이트되었다), 앞으로 나올 C++17...

하지만, 실무에서 C++를 사용하는 프로그래머들에게 이 새로운 버전들은 매우 생소한가보다. 많은 C++ 마니아들이 새로운 버전에 열광하고, 자료를 공유하고 있지만, 그 보다 더 많은 프로그래머들은 C++03 이 후의 모습들은 낯설어 한다. 심지어 C++03도 낯설어 하는 경우가 많다.

바로, 이러한 이유가 이 글을 시작하게 된 계기가 되었다. C++의 새로운 모습을 낯설어하는 프로그래머들에게 소개해주고 싶었고, 그래서 나도 마음껏 코드를 쓸 수 있었으면 좋겠다는 이유에서다. (나 혼자 C++14로 코딩을 하면, 주변에 아무도 못알아보는 비극이 발생하더라) 앞으로, 시간이 허락할 때 마다 C++11 버전 이 후의 C++를 하나씩 소개해 볼까 한다. 오늘 이 글을 시작으로...


C++를 좋아하지만 아직 익숙해지지 못하고, 새로운 모습에 마냥 신기해만 하는 나의 동료들과 후배들을 위해...

written by ENIGMA

'Programmer.cpp > Cplusplus.cpp' 카테고리의 다른 글

C++ 버전별 변천사 #3 - C++11  (0) 2015.02.01
C++ 버전별 변천사 #2 - C++03  (1) 2015.01.23
C++ 버전별 변천사 #1 - C++98  (0) 2015.01.20