C++ 강의를 시작하거나 C언어가 끝나갈 때에 많은 이들이 “C++이 뭐예요? “, “C++언어는 C와 뭐가 달라요?” 라는 질문을 하더군요.
처음 강의를 했던 때에는 “C언어는 절차식으로 작성하기 적합한 프로그래밍 언어이고 C++언어는 OOP(Object Oriented Programming, 개체(객체)지향 프로그래밍)에 적합한 언어야.”라고 대답이나 “글쎄, 기본 문법은 비슷한데 클래스 문법이 있어서 실제 프로그래밍 방식은 많이 다루지.” 등의 대답을 했던 것 같아요.
그리고 점점 강의를 하다 보니 지금은 “C++ is a c with class.”라는 얘기를 먼저 해요.
이렇게 얘기를 하는 이유는 C++ 언어가 C와 무관한 언어가 아니라 C언어의 문법에 새로운 문법 사항으로 클래스가 추가되었음을 강조하기 위함이예요. 이 책도 C언어 기본 문법을 이해하고 있는 독자를 대상으로 작성하였습니다.
그렇지만 C++ 언어는 클래스를 제외하고도 C언어와 차이가 있는 문법 사항이 많이 있어요. 이 책에서는 먼저 클래스를 제외한 문법들 중에 C언어와 차이가 있는 부분을 다룰 거예요.
그리고 대부분의 내용은 클래스 문법과 개체(혹은 객체)지향 프로그래밍에 초점을 두어 기술할 거예요.
C++ 언어는 개체(혹은 객체, 앞으로 이 책에서는 Object를 개체라고 부를게요.)를 중심으로 프로그래밍할 수 있는 주요한 특징들을 갖고 있어요.
개체 지향 프로그래밍 언어(Object Oriented Programming Language)들이 갖는 공통적인 특징에는 캡슐화, 상속, 다형성 등이 있죠.
캡슐화는 프로그램에 개체들을 정의하는 과정이며 상속은 다른 형식을 기반으로 형식을 정의하면 기반 형식의 멤버를 상속받는 특징을 말해요. 이 때 상속받는 형식을 파생 형식이라 부르죠. 그리고 다형성은 기반 형식의 변수로 파생 형식의 개체를 참조할 수 있는 특징을 말해요. 특히 기반 형식에 정의한 기능을 파생 형식에서 새롭게 정의했을 때 변수의 형식이 아닌 실제 개체의 형식에 정의한 기능을 수행할 수 있는 특징은 다형성의 장점이라 할 수 있죠.
물론 OOP의 특징인 캡슐화와 상속, 다형성은 문법과 함께 별도의 실습을 진행할 거예요.
그리고 난 후에 프로그램의 설계에서 나타날 수 있는 클래스와 클래스의 관계를 살펴볼 거예요.
이러한 OOP에 관한 사항이 이 책의 주요 부분이고 이후에 연산자 중복 정의에 관한 사항과 예외 처리 및 템플릿 문법을 다룰 거예요.
그리고 마지막으로 기본적인 개발 방법론에 적용하여 프로그래밍 실습을 할 거예요.
이처럼 이 책은 많은 부분에서 이러한 OOP의 특징에 대한 문법사항과 이들을 효과적으로 사용하는 방법들에 대해서 다룰거예요. 또한 프로그램을 개발공정에 따라 구현에 치중하지 않고 설계에 대한 부분도 다루고요.
참고로 이 책에서는 템플릿에 대해서는 다루지만 표준 템플릿 라이브러리에 대해서는 다루지 않습니다.