우선 C++에 대해서 보수 학습을 고민하게 된 것은 처음에도 이야기 했던데로 내가 C를 학습했었고 Object Oriented Paradigm/Programming(OOP)을 접하게 되면서 C++이 C를 기반으로 OOP를 접목한 언어로 소개 받았기 때문이다. 1998년 경으로 기억한다. 이 당시에는 어렴풋한 기억이지만 이 Template 개념이 없었다. 이후 Template이 적용된 C++ 코드를 보았었고, 이 후에 C++에서도 여러 버전이 만들어 지고 있다는 사실을 알게 되었다.


마지막으로 C++에 대한 보수 교육을 하기로 마음 먹게 된 이유는 내 업무에 이 부분이 아직도 많이 활용되기 때문이다. 내 업무는 Android 어플리케이션에서 동영상과 음악 파일을 재생하게 하는 Multimedia Framework이다. Android의 경우, Application이 Java로 이루어 있다. 하지만, Linux Kernel위에 여러 Service와 Framework를 이루는 기본적인 언어는 C++이다. 이 부분이 예전 부터 사용되어 오고 있는 Open Source 레거시 코드(Legacy Code)들이 있기 때문이기도 하다. 또 다른 이유는 하드웨어 (Hardware, HW)와 연동하는 코드들의 경우, 성능을 이유로 C/C++로 작성되는 경우가 많다.


이와 같은 이유로 C++에 대해서 공부하기로 했고, 우선 학습 방법은 기존 부터 가지고 있던 윤성우 저자의 "열혈 C++ 프로그래밍 개정판"이었다. 이 책은 내가 보기에는 C++03 기준으로 설명하고 있는 것으로 보여진다. 책의 서문이나 내용 중에서 이에 대해서 명확하게 하고 있지는 않다. 발행일이 2011년도인 것으로 보아도 C++11의 내용을 담기에는 어려움이 있어 보인다. 그렇더라도, 아직 내가 보는 코드들에서 C++11까지 이해해야 할 정도가 아니기 때문에 이책으로도 충분히 필요한 내용은 포함된다고 생각했다. 이 부분도 일독을 마친 후에 나중에 알고 되고 추가 공부할 내용을 알게 된 점에 대해서도 분명히 한다.



학습 내용

책을 일독하고, 2번 정도 Sample Code를 살펴 보면서 알게 된 것은 사람들이 많이 이야기 하고 있는 Standard Template Library(STL)과 Lambda등에 대한 내용은 책에서 다루고 있지 않다는 부분이었다. 그래서, 인터넷등을 통해 알게 된 다른 자료까지 학습한 내용을 포함하여 정리해 보면 다음과 같다.


1. Procedural Programming Paradigm 

이 부분은 컴퓨터 언어의 개요서를 보게 되면 일반적으로 가장 먼저 다루게 되는 부분이다. 하지만, 이 책[1]에서는 C를 안다는 가정으로 시작한다. 나는 오랫 동안 사용한 언어가 C여서 크게 문제 될 부분은 없었다. 혹시라도 C를 잘 모르는 거나, 컴퓨터 언어를 처음 배우는 사람은 다른 C++책을 보는 것이 좋겠다. 


2. Objected Oriented Paradigm/Programming (OOP)

이 책에서는 Encapsulation에서 시작하여 OOP를 설명하면서, 상속(Inheritance), 다형성(Polymorphism)까지 설명하고 있다. C++이 다른 객체 지향 언어와 다르게 혼동을 주고 있는 virtual keyword에 대해서도 Chapter를 하나 할해하여 설명하고 있다. Chapter 11까지의 내용이 여기에 포함된다.


3. Template

구지 분리할 필요는 없지만, OOP와 Template를 분리하는 것은 내가 이 부분에 대한 이해가 낮기 때문이다. 책에서는 2개의 Chapter를 할당하여 개념 설명, Class Template, Class Template Specialization, Template Parameter (템플릿 인자)등을 설명하고 있다. Chapter 13, 14 이다.


4. Standard Template Library (STL)

책에서는 이 부분을 설명하지 않고 있다. 하지만, 알고리즘 등을 설명하는 등의 여러 웹싸이트 등에서 설명할 때, STL을 가정하고 코딩을 하는 경우가 종종 있기 때문에 이 부분에 대해서는 알아 둘 필요가 있다. 좋은 자료로 처음 찾은 것은 Topcoder의 Tutorial이었다. 현재 내가 봤던 Tutorial은 찾기가 어려워 현재 검색되는 Tutorial[2-3] 최신 관련 링크를 추가해 둔다.


5. Lambda와 C++11 관련 내용

특히 여기서는 Lambda에 관한 내용을 [4-6]으로 학습했다. 전반적인 C++11 내용은 [7]에도 잘 요약되어 있다. 이 부분은 특별히 필요한지 공감이 되지는 않아서 우선 다 살펴 보지는 않았다.


기존에 이해한 내용에 대해서 상기하는 부분과 이해가 부족한 부분에 대한 학습 그리고 STL, Lambda에 대한 학습은 쭉 살펴 본 상태이다. 하지만, 계속 쓰지 않으면 잊게 되어 코드를 시간 날 때 타이핑해보거나 다시 살펴 볼 생각이다. 여라가지 항목에 관련해서 하나씩 정리도 가능하다. C의 레거시 항목은 포인터도 다른 언어에서는 c++에서 Reference라는 개념이 도입되면서, 대부분의 언어에서는 사용하지 않지만, Object Pointer만이 아닌 Function의 Pointer등도 Lambda등과 같이 고민해 보면 흥미로울 듯 하다. 다른 항목 중, 추가로 작성 해보고 싶은 내용은 나에게는 신규 항목인 Template 부터 Lambda까지는 따로 글을 써서 정리해 보는 것도 재미 있을 것 같다. 특히, C++, Java, Python에서 공통되는 부분도 있어 글을 써보면 매우 흥미로울 것 같다.


참고자료

[1] 윤성우, "열혈 C++ 프로그래밍", Orange Media 2011

[2] "Power up C++ with the Standard Template Library: Part 1", https://www.topcoder.com/community/data-science/data-science-tutorials/power-up-c-with-the-standard-template-library-part-1/

[3] "Power up C++ with the Standard Template Library: Part 2", https://www.topcoder.com/community/data-science/data-science-tutorials/power-up-c-with-the-standard-template-library-part-2/

[4] "씹어먹는 C++ 토막글 ② - 람다(lambda) 함수", http://itguru.tistory.com/196

[5] http://ciere.com/cppnow12/lambda.pdf (링크 깨진 듯 합니다.)

[6] http://pages.cs.wisc.edu/~gerald/cs368/resources/Lambda.pdf

[7] "C++ 11 특징 및 사용 예제 정리", https://duragon.gitbooks.io/c-11/content/

+ Recent posts