3. 첫 C++ 프로그램과 기본 문법
처음 보는 C++ 코드는 낯설게 느껴지기 쉽습니다. 꺾쇠 괄호도 보이고, std:: 같은 이상한 표시도 보이고, 줄 끝마다 세미콜론도 붙어 있습니다. 하지만 다행히도, 이 낯섦은 오래가지 않습니다. 가장 작은 프로그램 하나만 제대로 읽어도 C++ 코드의 생김새가 머릿속에 잡히기 때문입니다. 그래서 많은 언어의 첫걸음은 늘 Hello, World!입니다.1
이 장의 목표는 아주 분명합니다. 화면에 문장을 하나 출력해 보면서, C++ 프로그램이 어떤 부품으로 이루어져 있는지 눈에 익히는 것입니다. 오늘 이 모양만 익숙해져도 다음 장부터 만나는 변수, 조건문, 함수가 훨씬 덜 무섭게 느껴질 것입니다.
가장 먼저 만나는 C++ 코드
아래 코드를 천천히 살펴봅시다.
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}실행하면 콘솔 화면에 다음과 같이 출력됩니다.
Hello, World!코드는 짧지만, 사실 초보자가 알아야 할 핵심이 꽤 많이 들어 있습니다. 이 코드는 마치 작은 도시 지도 같습니다. 길은 짧지만, 앞으로 어디로 가야 하는지 방향을 알려 줍니다.
코드는 위에서 아래로 읽되, 역할은 나눠서 이해하기
이제 한 줄씩 뜯어봅시다.
#include <iostream>: 필요한 도구를 가져오기
첫 줄의 #include <iostream>은 표준 입출력 기능을 쓰기 위해 필요한 헤더를 포함하라는 뜻입니다. 여기서 헤더는 쉽게 말해 "이 프로그램이 사용할 기능의 소개서"쯤으로 생각하면 됩니다. iostream을 포함해야 std::cout 같은 출력 도구를 사용할 수 있습니다.2
앞에 붙은 #include는 전처리기 지시문입니다. 이름이 조금 어렵지만, 지금은 "컴파일하기 전에 필요한 파일을 먼저 챙겨 오는 문장"이라고 이해하면 충분합니다.2
만약 이 줄이 없다면, 컴파일러는 std::cout이 무엇인지 모를 수 있습니다. 요리를 하려는데 냄비를 꺼내지 않은 셈입니다.
main 함수: 프로그램이 출발하는 문
다음 줄의 int main()은 프로그램이 시작되는 특별한 함수입니다. 운영체제가 프로그램을 실행하면, 가장 먼저 이 main 함수부터 들어갑니다. 그래서 main은 흔히 프로그램의 진입점이라고 불립니다.3
int main() {
return 0;
}여기서 int는 이 함수가 정수를 돌려준다는 뜻입니다. 그리고 return 0;은 프로그램이 정상적으로 끝났다는 신호입니다.3
초보자 입장에서는 이렇게 기억하면 좋습니다.
main은 프로그램의 시작점이다.int는 정수를 반환한다는 뜻이다.return 0;은 "문제 없이 종료했습니다"라는 표시다.
참고로 현대 C++에서는 main 함수 끝에 도달하면 return 0;이 생략된 것으로 처리됩니다. 그래도 처음에는 적어 두는 편이 더 읽기 쉽고, 프로그램이 어떻게 끝나는지도 분명하게 보여 줍니다.3
중괄호 { }: 코드의 영역 표시
main 뒤에 붙은 중괄호는 함수의 시작과 끝을 나타냅니다.
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}중괄호 안에 들어 있는 코드가 바로 main 함수가 할 일입니다. 밖에서 시작해 안으로 들어오고, 안의 문장들을 순서대로 실행한 뒤 다시 나갑니다.
이 구조는 앞으로 계속 반복됩니다. 함수, 조건문, 반복문 모두 중괄호로 자기 영역을 표시합니다. 그래서 중괄호는 C++에서 "여기부터 여기까지 한 덩어리입니다"라고 알려 주는 울타리 같은 존재입니다.
std::cout: 화면에 출력하기
이제 가장 눈에 띄는 줄을 봅시다.
std::cout << "Hello, World!" << std::endl;이 문장은 화면에 글자를 출력하라는 뜻입니다. cout은 출력 스트림이고, 보통 콘솔 화면으로 내용을 보냅니다.2
그런데 왜 그냥 cout이 아니라 std::cout일까요? 여기서 std가 등장합니다.
네임스페이스: 이름이 부딪히지 않게 하는 구역
C++에는 네임스페이스(namespace)라는 개념이 있습니다. 이것은 이름을 정리해 두는 구역입니다. 비슷한 이름이 많아질 때 충돌을 막아 주는 일종의 폴더라고 생각하면 이해하기 쉽습니다.4
표준 라이브러리의 많은 기능은 std라는 네임스페이스 안에 들어 있습니다. 그래서 cout을 쓸 때는 "이 cout은 std 소속입니다"라고 적어 주는 것입니다.
std::cout가운데의 ::는 범위 지정 연산자입니다. "어느 소속인지 알려 주는 표시"라고 생각하면 됩니다. 즉, std::cout은 std 안에 있는 cout이라는 뜻입니다.4
초보자에게는 두 가지 스타일이 보일 수 있습니다.
첫 번째는 지금처럼 std::를 매번 붙이는 방식입니다.
#include <iostream>
int main() {
std::cout << "안녕하세요" << std::endl;
return 0;
}두 번째는 using namespace std;를 써서 std::를 생략하는 방식입니다.
#include <iostream>
using namespace std;
int main() {
cout << "안녕하세요" << endl;
return 0;
}둘 다 동작합니다. 다만 처음 배울 때는 std::cout처럼 소속을 드러내는 방식이 개념을 이해하기 더 좋습니다. 나중에 코드가 길어지면 using을 어디까지 쓸지 판단하는 감각도 생기게 됩니다.4
<<는 무엇일까
std::cout 옆의 <<는 출력할 데이터를 오른쪽에서 왼쪽으로 흘려보낸다고 생각하면 편합니다.
std::cout << "Hello, World!";이 코드는 문자열 "Hello, World!"를 cout으로 보내서 화면에 보여 달라는 뜻입니다. 숫자도, 문자도, 나중에 배울 변수도 같은 방식으로 출력할 수 있습니다.
예를 들어 이런 식입니다.
std::cout << "나이: " << 20 << std::endl;문자열과 숫자를 이어서 출력할 수도 있습니다. <<는 C++에서 꽤 자주 만나게 되는 친숙한 친구가 될 것입니다.
std::endl과 줄바꿈
코드 끝에 붙은 std::endl은 줄바꿈을 해 줍니다.
std::cout << "Hello, World!" << std::endl;이 문장은 문장을 출력한 뒤 다음 줄로 내려갑니다. 처음에는 std::endl을 써도 좋고, 나중에는 "n"이라는 줄바꿈 문자를 쓰는 방법도 배우게 됩니다. 지금 단계에서는 "출력 후 줄을 바꿔 준다" 정도로 기억하면 충분합니다.
세미콜론 ;: 문장의 끝을 알려 주는 마침표
C++에서 세미콜론은 정말 중요합니다. 세미콜론은 문장이 끝났다는 신호입니다.6
std::cout << "Hello, World!";
return 0;위의 두 줄은 각각 하나의 문장이고, 끝에 세미콜론이 있습니다. 세미콜론이 없으면 컴파일러는 문장이 어디서 끝나는지 헷갈려 합니다.
std::cout << "Hello, World!"
return 0;이렇게 쓰면 오류가 납니다. 초보자가 가장 자주 하는 실수 중 하나가 바로 이 세미콜론 빼먹기입니다.
여기서 아주 중요한 감각 하나를 익혀 둡시다. C++에서 줄바꿈은 보기 좋게 만드는 역할이 크고, 실제 문장의 끝은 세미콜론이 정합니다.6
그래서 이런 코드도 문법상 가능합니다.
int main() { std::cout << "Hello, World!"; return 0; }물론 이렇게 쓰면 사람 눈에는 불친절합니다. 컴파일러는 괜찮아도, 미래의 나는 괴로워집니다. 그러니 코드는 늘 여러 줄로 보기 좋게 정리하는 습관을 들이는 것이 좋습니다.
주석: 컴퓨터가 아니라 사람을 위한 메모
C++에는 주석(comment)도 있습니다. 주석은 코드에 설명을 적어 두는 메모입니다. 컴파일러는 주석을 무시합니다.5
한 줄 주석은 //를 사용합니다.
// 화면에 문장을 출력한다
std::cout << "Hello, World!" << std::endl;여러 줄 주석은 /* ... */를 사용합니다.
/*
이 프로그램은
Hello, World!를 출력한다.
*/주석은 프로그램의 동작을 바꾸지 않지만, 사람의 이해를 크게 도와줍니다. 특히 처음 배우는 동안에는 "이 줄은 무엇을 하는가"를 짧게 적어 보는 습관이 꽤 도움이 됩니다.
다만 주석은 코드를 대신해 주지 않습니다. 코드 자체도 읽기 쉽게 쓰고, 꼭 필요한 설명만 덧붙이는 것이 좋습니다. 좋은 주석은 "무엇을"보다 "왜"를 설명할 때 더 빛납니다.5
초보자가 자주 헷갈리는 포인트
처음에는 아래 부분들이 특히 자주 헷갈립니다.
#include <iostream>은 출력 기능을 쓰기 위한 준비다.main은 프로그램이 시작되는 특별한 함수다.std::cout은 화면 출력,;는 문장 종료다.
여기에 하나만 더 덧붙이면, std::는 장식이 아니라 소속 표시입니다. 낯설어 보여도 겁먹을 필요는 없습니다. 오히려 "누구 집 물건인지 알려 주는 이름표"라고 생각하면 꽤 친절한 문법입니다.
코드를 조금씩 바꿔 보자
배운 내용을 손에 붙이려면, 코드를 아주 조금씩 바꿔 보는 것이 좋습니다. 아래처럼 연습해 보세요.
#include <iostream>
int main() {
std::cout << "안녕하세요!" << std::endl;
std::cout << "저는 C++를 배우는 중입니다." << std::endl;
return 0;
}이 코드를 직접 입력하고 실행해 보면 좋습니다. 그리고 다음처럼도 바꿔 보세요.
출력 문장을 자기소개로 바꿔 보기
한 줄 출력 대신 두 줄 출력으로 늘려 보기
코드 위에 주석 한 줄 추가해 보기
이 작은 수정들이 의외로 중요합니다. 단순히 눈으로 읽는 것과, 손으로 쳐서 실행해 보는 것은 학습 효과가 꽤 다릅니다.
읽을 줄 알면, 다음 장이 쉬워진다
이 장에서 꼭 가져가야 할 핵심은 "C++ 코드의 생김새"입니다. 아직 모든 문법을 이해할 필요는 없습니다. 하지만 아래 정도는 자신 있게 말할 수 있어야 합니다.
Hello, World! 프로그램 하나 안에는 이미 C++의 기본 풍경이 들어 있습니다. 헤더를 포함하고, main 함수에서 시작하고, std::cout으로 출력하고, 문장은 세미콜론으로 끝나며, 주석은 사람을 위한 설명이라는 점입니다.
이제부터 만나는 새 문법들은 이 틀 안에 하나씩 들어오게 됩니다. 변수도 main 안에 놓일 것이고, 조건문도 중괄호 안에서 움직일 것이며, 함수도 이 구조를 바탕으로 늘어날 것입니다. 즉, 오늘 배운 것은 사소한 인사가 아니라 C++ 문법 세계의 현관문입니다.
참고
1Understanding First C++ Program
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.