모던 C++이란 무엇인가: C++11 이후 달라진 작성 방식
1강. 모던 C++이란 무엇인가: C++11 이후 달라진 작성 방식
이번 강의에서 해결할 문제
C++ 기초 문법으로도 프로그램은 만들 수 있지만, 인덱스 반복·마법 숫자·수동 자원 정리가 쌓이면 코드가 무엇을 하려는지보다 어떻게 반복하는지가 더 크게 보입니다. 모던 C++은 코드를 무조건 짧게 만드는 유행이 아니라, 언어와 표준 라이브러리가 제공하는 타입·수명·알고리즘으로 실수를 줄이는 작성 방식입니다.
학습 목표
- C++11 이후의 대표적인 변화가 어떤 문제를 줄이는지 설명합니다.
- 최신 문법을 쓰는 것과 현대적인 설계를 구분합니다.
- 작은 목록 처리에 범위 기반
for와 표준 알고리즘을 적용합니다.
먼저 알아야 할 핵심 개념
**모던 C++**은 보통 C++11 이후 추가된 언어 기능과 표준 라이브러리를 활용하는 스타일을 말합니다. 핵심은 auto를 많이 쓰는 것이 아니라 소유권은 스마트 포인터로, 값 없음은 optional로, 반복 목적은 알고리즘으로 표현하는 것입니다. 도구를 선택한 이유가 기존 방식보다 분명하지 않다면 새로운 문법도 잡음을 늘릴 수 있습니다.
가장 작은 실행 가능한 예제
아래 코드는 피해량 목록을 출력하고 50 이상인 공격 횟수를 계산합니다.
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
const std::vector<int> damages{30, 55, 80};
for (const int damage : damages) {
std::cout << damage << ' ';
}
const auto criticalCount = std::count_if(
damages.begin(), damages.end(),
[](const int damage) { return damage >= 50; });
std::cout << "\ncritical: " << criticalCount << '\n';
}
핵심 코드 줄별 설명
- 중괄호 초기화는 목록의 초기값을 한눈에 보이게 합니다.
- 범위 기반
for는 인덱스가 아니라 각damage값에 관심이 있음을 표현합니다. count_if는 조건을 만족하는 원소 수를 세는 목적을 이름으로 드러냅니다.- 람다는
damage >= 50이라는 지역 규칙을 알고리즘에 전달합니다. criticalCount의 정확한 반복자 차이 타입은 중요하지 않아auto로 받습니다.
실행 결과와 값 변화
30 55 80
critical: 2
기준을 70으로 바꾸면 80만 조건을 만족해 critical: 1이 됩니다. 목록의 순회 코드와 조건 계산 코드가 분리되어 있어 바뀐 규칙을 찾기 쉽습니다.
단계별 실습
실습 목표
아이템 가격 목록에서 비싼 아이템 수를 계산합니다.
시작 전 상태와 실행 방법
예제를 C++17 콘솔 프로젝트에 붙여 넣고 MSVC /std:c++17 또는 g++·clang++ -std=c++17로 실행합니다.
1단계: 최소 코드 작성
prices{100, 250, 500}를 만들고 범위 기반 for로 출력합니다.
2단계: 값 또는 조건을 바꿔 결과 비교
count_if 조건을 200 이상과 400 이상으로 바꾸어 결과가 각각 왜 달라지는지 기록합니다.
3단계: 작은 기능 확장
std::sort로 가격을 오름차순 정렬한 뒤 다시 출력합니다.
4단계: 스스로 해결하기
가격이 300 미만인 원소의 합을 계산하세요. 힌트: 처음에는 범위 기반 for로 풀어도 됩니다.
막혔을 때
count_if를 찾을 수 없다는 오류가 나면 <algorithm>을 포함했는지 확인합니다. 람다의 매개변수 타입이 목록 원소 타입과 맞는지도 확인하세요.
흔한 실수와 해결 방법
- 새 문법을 한 줄에 몰아넣기: 읽는 사람이 추론해야 할 정보가 늘면 중간 변수와 명시적 타입을 사용합니다.
- 모든 반복문을 알고리즘으로 교체하기: 여러 상태를 복잡하게 갱신한다면 명확한 반복문이 더 나을 수 있습니다.
- 표준 설정 없이 기능 사용하기: 팀과 빌드 서버가 같은 C++ 표준을 사용하도록 먼저 고정합니다.
게임 개발 연결
게임의 점수·피해량·아이템 목록은 컨테이너와 알고리즘을 자주 사용합니다. Unreal의 TArray와 Algo도 이름과 API는 다르지만 반복의 목적을 코드에 드러낸다는 설계 방향은 같습니다.
이해 점검 질문 3개
- 모던 C++을 단순히 최신 문법 모음이라고 보면 놓치는 핵심은 무엇인가요?
- 피해량 예제에서 범위 기반
for가 인덱스 반복보다 나은 이유는 무엇인가요? - 새로운 표현이 기존 코드보다 읽기 어려울 때 어떤 기준으로 되돌려야 하나요?
핵심 요약
모던 C++의 목적은 짧은 코드가 아니라 의도·수명·허용 상태가 보이는 코드입니다. 표준 라이브러리가 이미 표현하는 작업을 직접 다시 구현하기 전에 적합한 도구가 있는지 확인합니다.
다음 강의 연결
2강. C++17 컴파일러 표준 설정에서 같은 코드가 개발자와 빌드 서버에서 동일한 언어 규칙으로 해석되도록 기준을 고정합니다.
모던 C++이란 무엇인가: C++11 이후 달라진 작성 방식 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.