본문으로 건너뛰기
모던 C++LESSON 01

모던 C++이란 무엇인가: C++11 이후 달라진 작성 방식

난이도초급 → 중급 입문
예상 시간45분
선수지식C++ 변수·조건문·반복문·함수·클래스 기초

1강. 모던 C++이란 무엇인가: C++11 이후 달라진 작성 방식

이번 강의에서 해결할 문제​

C++ 기초 문법으로도 프로그램은 만들 수 있지만, 인덱스 반복·마법 숫자·수동 자원 정리가 쌓이면 코드가 무엇을 하려는지보다 어떻게 반복하는지가 더 크게 보입니다. 모던 C++은 코드를 무조건 짧게 만드는 유행이 아니라, 언어와 표준 라이브러리가 제공하는 타입·수명·알고리즘으로 실수를 줄이는 작성 방식입니다.

학습 목표​

  • C++11 이후의 대표적인 변화가 어떤 문제를 줄이는지 설명합니다.
  • 최신 문법을 쓰는 것과 현대적인 설계를 구분합니다.
  • 작은 목록 처리에 범위 기반 for와 표준 알고리즘을 적용합니다.

먼저 알아야 할 핵심 개념​

**모던 C++**은 보통 C++11 이후 추가된 언어 기능과 표준 라이브러리를 활용하는 스타일을 말합니다. 핵심은 auto를 많이 쓰는 것이 아니라 소유권은 스마트 포인터로, 값 없음은 optional로, 반복 목적은 알고리즘으로 표현하는 것입니다. 도구를 선택한 이유가 기존 방식보다 분명하지 않다면 새로운 문법도 잡음을 늘릴 수 있습니다.

가장 작은 실행 가능한 예제​

아래 코드는 피해량 목록을 출력하고 50 이상인 공격 횟수를 계산합니다.

modern_baseline.cpp
#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';
}

핵심 코드 줄별 설명​

  1. 중괄호 초기화는 목록의 초기값을 한눈에 보이게 합니다.
  2. 범위 기반 for는 인덱스가 아니라 각 damage 값에 관심이 있음을 표현합니다.
  3. count_if는 조건을 만족하는 원소 수를 세는 목적을 이름으로 드러냅니다.
  4. 람다는 damage >= 50이라는 지역 규칙을 알고리즘에 전달합니다.
  5. 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개​

  1. 모던 C++을 단순히 최신 문법 모음이라고 보면 놓치는 핵심은 무엇인가요?
  2. 피해량 예제에서 범위 기반 for가 인덱스 반복보다 나은 이유는 무엇인가요?
  3. 새로운 표현이 기존 코드보다 읽기 어려울 때 어떤 기준으로 되돌려야 하나요?

핵심 요약​

모던 C++의 목적은 짧은 코드가 아니라 의도·수명·허용 상태가 보이는 코드입니다. 표준 라이브러리가 이미 표현하는 작업을 직접 다시 구현하기 전에 적합한 도구가 있는지 확인합니다.

다음 강의 연결​

2강. C++17 컴파일러 표준 설정에서 같은 코드가 개발자와 빌드 서버에서 동일한 언어 규칙으로 해석되도록 기준을 고정합니다.

MINI QUIZ

모던 C++이란 무엇인가: C++11 이후 달라진 작성 방식 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“모던 C++이란 무엇인가: C++11 이후 달라진 작성 방식” 실습을 안전하게 진행하기 위한 판단으로 가장 알맞은 것은 무엇인가요?
  2. 문제 2“모던 C++이란 무엇인가: C++11 이후 달라진 작성 방식” 실습 중 ‘모든 반복문을 알고리즘으로 교체하기’ 상황을 발견했습니다. 본문과 일치하는 설명은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

1강. 모던 C++이란 무엇인가: C++11 이후 달라진 작성 방식 미완료 상태