모던 C++ 학습 로드맵 — 무엇을 먼저, 무엇을 나중에
C++ 입문부터 모던 C++까지의 학습 순서를 초급·중급·고급으로 묶고, 각 주제를 필수·나중·선택으로 표시한 로드맵. 순서의 근거, 선행 지식, 자주 막히는 지점을 함께 정리한다.
이 로드맵을 만든 이유
C++는 배울 주제가 넓은 데다 서로 얽혀 있어서, 문법을 목차 순서대로 하나씩 훑으면 조각들이 연결되지 않습니다. 참조자를 모르면 복사 생성자가 안 잡히고, 이동 시맨틱을 모르면 스마트 포인터가 왜 그렇게 생겼는지 감이 안 옵니다.
그래서 “무슨 주제가 있나”를 나열하는 대신, 무엇을 먼저 배우고 무엇을 나중으로 미뤄도 되는지에 대한 판단을 담았습니다. 각 주제에는 세 가지 표시를 붙였습니다.
- [필수] — 이걸 건너뛰면 다음 단계가 막힙니다. 순서대로 확실히 잡고 갑니다.
- [나중] — 중요하지만 급하지 않습니다. 실무나 다음 단계에서 필요해질 때 돌아와도 됩니다.
- [선택] — 특정 상황(라이브러리 저자, 고성능 코드)에서만 필요합니다. 개념만 알고 넘어가도 무방합니다.
세부 문법은 각 단계 끝의 레퍼런스로 연결합니다. 이 글의 목적은 개별 설명이 아니라 전체 지도와 우선순위입니다.
한눈에 보기
| 단계 | 상세 글 | 우선순위 |
|---|---|---|
| 초급 | ① 참조자와 동적 할당 | 필수 |
| 중급 | ② 클래스와 자원 관리 (RAII) | 필수 |
| 고급 | ③ 값과 소유권 — 이동·스마트 포인터 | 필수 · 뼈대 |
| 고급 | ④ STL — 컨테이너·알고리즘 | 필수 |
| 고급 | ⑤ 템플릿 | 필수 |
| 고급 | ⑥ 동시성 — 스레드·비동기 | 나중 |
| 고급 | ⑦ 모던 문법·표준 라이브러리 | 필수 |
| 마지막 | ⑧ 빌드 — 컴파일·링킹·CMake | 필수 |
[필수]만 세로로 따라가면 하나의 완결된 경로입니다. 아래는 각 단계를 왜 그 순서·우선순위로 두는지 풀어 쓴 것입니다.
① 초급 — C++로 사고하기
📖 상세 글: C++로 사고하기 ① 참조자와 동적 할당
C를 알면 문법 상당수는 익숙합니다. 이 단계의 목표는 암기가 아니라 C와 다른 C++의 사고방식입니다.
- [필수] 참조자(reference) — 포인터와 다른 별칭 개념. 이후 거의 모든 주제(복사·이동·연산자 오버로딩)의 기반이라 여기서 확실히 잡습니다.
- [필수] 동적 할당
new/delete— C의malloc/free와 무엇이 다른지, 왜 생성자·소멸자와 묶이는지.
자주 막히는 지점: 참조자를 “포인터의 다른 문법”으로 오해하는 것. 참조자는 재바인딩이 안 되고 널이 될 수 없다는 점이 다릅니다.
통과 기준: 참조자와 포인터의 차이를 한 문장으로 말할 수 있으면 다음 단계로.
② 중급 — 객체지향
📖 상세 글: 객체지향 ② 클래스와 자원 관리
C++의 핵심 정체성인 클래스입니다. 가장 길고, 이후 모든 고급 주제의 토대가 됩니다.
- [필수] 클래스 기초 — 함수 오버로딩, 생성자,
this - [필수] 자원 관리 3종 — 복사 생성자·소멸자·대입 연산자가 왜 함께 등장하는지(얕은 복사 문제). RAII의 씨앗이 여기서 심어집니다.
- [필수]
const와static— 멤버 함수·변수에 붙는 의미 구분 - [필수] 상속과 다형성 — 가상 함수, 오버라이딩, 가상 소멸자가 왜 필요한지
- [나중] 연산자 오버로딩 — 내 타입을 내장 타입처럼. 개념은 초반에, 첨자·타입변환·증감 같은 세부는 필요할 때.
- [나중] 입출력 —
iostream, 파일(fstream), 문자열 스트림(stringstream)
자주 막히는 지점: 얕은 복사로 인한 이중 해제, 그리고 기반 클래스에 가상 소멸자를 안 붙여서 생기는 자원 누수.
통과 기준: 복사 생성자·소멸자·연산자 오버로딩을 갖춘 커스텀
String클래스를 직접 구현할 수 있으면 통과.
고급 — 모던 C++
C++11 이후의 본체입니다. 실무의 어려움 대부분이 이 구간에 몰려 있습니다. 성격별로 묶었고, 묶음마다 우선순위가 다릅니다.
③ 값과 소유권 (가장 먼저)
📖 상세 글: 값과 소유권 ③ 이동 시맨틱과 스마트 포인터
모던 C++의 뼈대입니다. 고급 단계에서 이 묶음을 최우선으로 두길 권합니다. 순서대로 배우면 자연스럽게 이어집니다.
- [필수] 우측값 레퍼런스(rvalue reference) — 임시 객체를 가리키는 참조
- [필수] 이동 시맨틱(
std::move, 완벽한 전달) — 복사 대신 자원을 넘기기. 성능과 직결 - [필수] 스마트 포인터 —
unique_ptr(유일 소유),shared_ptr/weak_ptr(공유 소유).new/delete를 직접 안 쓰게 되는 이유 - [나중] 함수를 객체로 — 람다,
std::function,std::bind
자주 막히는 지점: std::move가 “옮긴다”고 오해하는 것. 실제로는 이동 가능하다고 표시만 하고, 실제 이동은 이동 생성자가 합니다.
④ STL
📖 상세 글: STL ④ 컨테이너와 알고리즘
- [필수] 컨테이너 —
vector,map,unordered_map을 먼저.list/deque는 필요할 때. - [필수] 알고리즘 —
sort,find,accumulate등 반복문을 대체하는 표준 함수 - [나중] 문자열 —
string, 그리고 복사 없는 뷰string_view
⑤ 제네릭 프로그래밍
📖 상세 글: 제네릭 ⑤ 템플릿
- [필수] 템플릿 — 타입을 인자로 받는 함수·클래스
- [나중] 가변 길이 템플릿(variadic template)
- [선택] 템플릿 메타 프로그래밍(TMP) — 라이브러리를 직접 만들 게 아니면 개념만 알고 넘어가도 됩니다.
⑥ 동시성 (필요해질 때)
📖 상세 글: 동시성 ⑥ 스레드와 비동기
멀티스레드 프로그램을 짤 일이 생기기 전엔 통째로 미뤄도 됩니다.
- [나중] 스레드 기초
std::thread, 동기화 뮤텍스·조건 변수 - [나중] 비동기
future,promise,async - [선택] 저수준
atomic과 메모리 순서, 스레드풀 직접 구현
⑦ 모던 문법과 표준 라이브러리
📖 상세 글: 모던 문법 ⑦ auto·constexpr와 표준 라이브러리
- [필수] 유니폼 초기화,
constexpr,auto/decltype - [선택] 메타프로그래밍 도구 —
type_traits, SFINAE,enable_if. 라이브러리 저자용. - [나중] 표준 라이브러리 —
chrono(시간),optional/variant/tuple,filesystem,regex. 필요할 때 사전처럼 찾아 씀.
⑧ 마지막 — 코드에서 실행 파일까지
📖 상세 글: 빌드 ⑧ 컴파일·링킹과 CMake
문법을 넘어 프로젝트를 빌드하는 관점입니다. 규모가 커지면 반드시 마주칩니다.
- [필수] 컴파일과 링킹 — 소스가 실행 파일이 되기까지. 링커 에러를 이해하는 열쇠입니다.
- [필수] 빌드 시스템(Make & CMake) — 여러 파일로 나뉜 프로젝트 빌드. 여기에 cpplint·clang-format 같은 도구도 붙습니다.
- [선택] 실무 스타일 — 표준 라이브러리의 디자인 패턴, 대규모 팀의 C++ 사용 관례
이 로드맵을 쓰는 법
- [필수]만 따라가도 하나의 완결된 경로가 됩니다. [나중]·[선택]은 실무에서 필요해질 때 돌아오세요.
- 진도는 “봤다”가 아니라 각 단계의 통과 기준을 직접 구현할 수 있는지로 판단합니다.
- 고급 단계에서 순서가 헷갈리면, 값과 소유권 → STL → 나머지로 잡으면 무난합니다.
Reference
주제별 상세 설명은 아래에서. 하나에 얽매이지 말고 교차로 보는 걸 권합니다.
- 씹어먹는 C++ 강좌 (modoocode) — 한글로 된 가장 촘촘한 강좌. 초급~고급 전 구간.
- cppreference — 표준 라이브러리·문법의 1차 레퍼런스. 정확하지만 건조함.
- learncpp.com — 영어권의 대표 입문 강좌. 예제 중심.
- Effective Modern C++ (Scott Meyers) — 값과 소유권·모던 문법 구간을 깊게 이해하고 싶을 때.