ice rabbit programming

[C++] 첫 글, 개요와 계기 본문

Development/C++

[C++] 첫 글, 개요와 계기

판교토끼 2020. 5. 10. 23:05

C#의 첫 글에서 언급했듯이, 필자는 학부생 시절 C++을 주로 사용했고, 입사 후에는 C#을 주로 사용하고 있어 바쁘게 배우고 있다.

4학년 2학기에 1학년 C++ 기초 수업을 학부생 조교로 참여해서 그 때의 경험을 정리할 겸 글을 쓰려 했는데, 겨우 5개월 정도밖에 되지 않았는데도 C++를 사용하지 않으니 많이 까먹게 된 느낌이 든다.

확실히 이전에 학부 강의, PS, OpenCV, QT 등을 제외하면 C++로 어떤 프로그램이나 시스템을 만든 경험은 없기 때문인 것 같다. 그래서 더 잊기 전에 리마인드도 하고, 배웠던 지식들을 기록해두자는 마음에서 기초적인 내용부터 정리해 보려고 한다.

OpenCV, QT, Server, 언리얼 등 광범위하게 사용되고 있고 해마다 조사하는 언어별 점유율 순위에서도 항상 TOP 5에 드는 꾸준한 언어이기도 하다. 그래서 거의 접한 적이 없는 Java 대신에 C++의 학습 계속 유지하려는 생각이다.

실무 사용 - C#
Web 필수 - JavaScript
떠오르는 강력한 언어 - Python, GoLang
기존 - C++

위와 같은 그림을 그리고 있다. 잘 될지는 미지수이지만

현재 함께 글을 올리고 있는 C#, JavaScript와 달리 C++은 강의를 들으면서 정리하는 것이 아닌 학부 시절 습득한 필자 본인의 지식에 100% 의존하기 때문에, 커리큘럼(?)과 같은 순서가 이상할 수도 있고, 모던 C++에 대한 지식이 부족할 수도 있다. 하지만 혹시 이 글을 읽게 되는 분들은 1년차 주니어 개발자이니 너그럽게 이해해 주셨으면 한다.


C++, 들어가며

C++을 사용하면서 개인적으로 두 가지 느낀 점이 있다.
첫 번째로는 C와 문법은 비슷하게 생겼지만 많이 다르다는 점, 두 번째로는 C와 Java의 중간 같다는 느낌이었다.

이름에서 보듯이 C++은 C에서 파생되었기 때문에 문법이 꽤 유사하다. C에서 물려받은 점도 많아서, High Level의 언어임에도 포인터를 사용하는 등 시스템 프로그래밍을 위해 Low Level의 성질을 가지고 있다는 점은 동일하다. 

하지만 C는 절차 지향 언어, C++은 객체 지향 언어라는 점에서 큰 차이를 보이게 된다. 역시 class의 유무로 압축할 수 있겠다. C++는 객체 지향 언어이기 때문에, 객체 지향적 특성인 추상화(abstraction), 캡슐화(encapsulation), 상속(inheritance), 다형성(polymorphism)을 중심으로 이루어져 있다.

언어마다 많이 쓰는 IDE가 있지만, C/C++/C# - Visual Studio만큼 지분을 가지고 있는 IDE도 흔치 않다고 생각한다. Dreams Park - Microsoft Imagine에서 학생들에게 무료로 제공하던 정책을 지나 이제는 Community 버전은 MS에 가입만 하면 무료로 제공하기 때문에, 누구나 사용할 수 있다. 노트북 등 저사양에서 돌리기에는 조금 무거울 수도 있는데, 사용할 패키지만 선택하면 용량을 크게 줄일 수 있다.

서론은 이쯤하고, 첫 글에서는 기본 중에서도 핵심이라 볼 수 있는 배열과 포인터에 대해서 써보려고 한다.