[모던 C++] 모던 c++ 소개
모던 C++은 단순히 문법 몇 개가 추가된 것이 아니라, C++를 현대적으로 사용하는 방식을 총칭한다. RAII와 스마트 포인터를 통한 안전한 자원 관리, auto와 lambda를 통한 간결한 코드, move semantics와 동시성 지원을 통한 성능 최적화를 제공한다. 올드 C++과 모던 C++의 차이를 표로 비교해 확인해보자.
모던 c++의 탄생 배경
C++은 오랜 역사를 가진 강력한 언어이지만, C++98과 C++03 시절에는 메모리 관리와 코드 안정성 문제로 많은 어려움을 겪는다. 이러한 한계를 극복하기 위해 C++11부터 언어가 대대적으로 개선되었고, 이를 기점으로 “모던 C++”이라는 별칭이 붙는다.
모던 C++은 단순히 몇 가지 문법이 추가된 것이 아니라, 더 안전하고 간결하며 성능 친화적인 프로그래밍 방식을 제시한다. 본 글에서는 모던 C++의 개념과 철학을 정리하고, 올드 C++과 비교하여 어떤 점이 달라졌는지 살펴본다.
모던 c++의 특징
모던 c++는 c++11부터 대대적으로 언어가 개선되면서 붙은 별칭으로, 단순히 문법이 몇개가 추가된 정도가 말 그대로 c++를 현대적으로 쓰는 방식을 총칭한다. 대표 특징은 다음과, 같다.
- RAII, 스마트 포인터를 활용한 안전한 자원 관리
- auto, decltype, constexpr 등을 활용한 더 강력한 타입 추론 & 컴파일 타임 계산
- 람다, 함수형 스타일 사용 -> 코드 간결화
- move semantics -> 성능 최적화
- 동시성 지원 (thread, async, future, atomic 등)
쉽게 말하면, C++98/03 시절 방식(new/delete, raw pointer, 매크로 남발)을 벗어나 C++11 이후 기능(smart pointer, auto, lambda 등)을 적극 활용하는 게 “모던 C++”이다.
OLD C++ vs Modern C++
| 구분 | 올드 C++ (C++98/03) | 모던 C++ (C++11 ~ C++20) |
|---|---|---|
| 메모리 관리 | new / delete 직접 관리 → 메모리 누수 위험 |
unique_ptr, shared_ptr, weak_ptr → 자동 관리 (RAII) |
| 타입 추론 | 모든 타입을 명시해야 함 | auto, decltype → 컴파일러가 타입 추론 |
| 상수/매크로 | #define 매크로, const 제한적 |
constexpr, enum class → 타입 안전 & 컴파일 타임 계산 |
| 반복문 | 전통적인 for, while | range-based for, 구조적 바인딩 (auto [a, b] = pair) |
| 함수형 프로그래밍 | 함수 포인터, functor만 가능 | 람다(lambda), std::function, std::bind |
| 성능 최적화 | 복사 중심, move 없음 | move semantics, rvalue reference (T&&) |
| 템플릿 | 기본 템플릿 기능, SFINAE 한정적 | variadic templates, type traits, concepts |
| 표준 라이브러리 | STL 중심 (vector, map) |
optional, variant, any, filesystem, ranges |
| 동시성 | OS API 직접 사용 (pthread 등) | std::thread, std::async, std::future, std::atomic |
| 코드 스타일 | 장황하고 위험 요소 많음 | 간결하고 안전, 유지보수 용이 |
위 표에서 한 눈에 보이는 것과 같이, 올드 C++은 개발자가 직접 모든 걸 책임지는 언어였다면, 모던 C++은 컴파일러와 표준 라이브러리가 더 많은 안전장치와 기능을 제공해준다.
Next
