C++ 핵심 문법과 객체 지향 기초 이해하기
C++ 프로그램을 고려할 때, 이는 서로 메서드를 호출하며 소통하는 객체들의 집합으로 정의할 수 있습니다. 이제 클래스, 객체, 메서드, 인스턴스 변수가 무엇인지 간단히 살펴보겠습니다.
객체(Object) − 객체는 상태와 행동을 가집니다. 예: 개는 색상, 이름, 품종이라는 상태와 꼬리 흔들기, 짖기, 먹기라는 행동을 가집니다. 객체는 클래스의 인스턴스입니다.
클래스(Class) − 클래스는 그 타입의 객체가 지원하는 행동/상태를 기술하는 템플릿/청사진으로 정의할 수 있습니다.
메서드(Methods) − 메서드는 기본적으로 행동입니다. 클래스는 여러 메서드를 포함할 수 있습니다. 로직이 작성되고, 데이터가 조작되며, 모든 행동이 실행되는 곳이 바로 메서드입니다.
인스턴스 변수(Instance Variables) − 각 객체는 고유한 인스턴스 변수 세트를 가집니다. 객체의 상태는 이 인스턴스 변수들에 할당된 값들에 의해 생성됩니다.
C++ 프로그램 구조
Hello World를 출력하는 간단한 코드를 살펴보겠습니다.
Live Demo
#include <iostream>
using namespace std;
// main() is where program execution begins.
int main() {
cout << "Hello World"; // prints Hello World
return 0;
}
위 프로그램의 각 부분을 살펴보겠습니다.
C++ 언어는 여러 헤더를 정의하며, 여기에는 프로그램에 필요하거나 유용한 정보가 들어 있습니다. 이 프로그램에는 <iostream> 헤더가 필요합니다.
using namespace std; 줄은 컴파일러에게 std 네임스페이스를 사용하도록 지시합니다. 네임스페이스는 C++에 비교적 최근에 추가된 기능입니다.
// main() is where program execution begins. 줄은 C++에서 사용 가능한 한 줄 주석입니다. 한 줄 주석은 //로 시작해 줄 끝에서 끝납니다.
int main() 줄은 프로그램 실행이 시작되는 메인 함수입니다.
cout << "Hello World"; 줄은 화면에 "Hello World" 메시지를 출력합니다.
return 0; 줄은 main() 함수를 종료하고 호출 프로세스에 값 0을 반환합니다.
C++ 프로그램 컴파일 및 실행
파일 저장, 컴파일, 실행 방법을 단계별로 살펴보겠습니다.
텍스트 에디터를 열고 위 코드를 추가합니다.
파일을 hello.cpp로 저장합니다.
명령 프롬프트를 열고 파일을 저장한 디렉터리로 이동합니다.
g++ hello.cpp를 입력하고 엔터를 눌러 코드를 컴파일합니다. 오류가 없으면 다음 줄로 넘어가며 a.out 실행 파일이 생성됩니다.
a.out을 입력해 프로그램을 실행합니다.
창에 Hello World가 출력되는 것을 볼 수 있습니다.
$ g++ hello.cpp
$ ./a.out
Hello World
g++가 경로에 있고, hello.cpp 파일이 있는 디렉터리에서 실행 중인지 확인하세요.
C/C++ 프로그램은 메이크파일로도 컴파일할 수 있습니다. 자세한 내용은 '메이크파일 튜토리얼'을 참조하세요.
C++의 세미콜론과 블록
C++에서 세미콜론은 문장 종료자입니다. 즉, 각 개별 문장은 세미콜론으로 끝나야 하며, 이는 하나의 논리적 엔티티의 끝을 나타냅니다.
예를 들어 다음은 세 개의 서로 다른 문장입니다.
x = y;
y = y + 1;
add(x, y);
블록은 여는 중괄호와 닫는 중괄호로 둘러싸인 논리적으로 연결된 문장들의 집합입니다. 예를 들어:
{
cout << "Hello World"; // prints Hello World
return 0;
}
C++은 줄 끝을 종료자로 인식하지 않습니다. 따라서 문장을 줄의 어디에 두든 상관없습니다. 예를 들어:
x = y; y = y + 1; add(x, y);
는 다음과 동일합니다.
x = y;
y = y + 1;
add(x, y);
C++ 식별자
C++ 식별자는 변수, 함수, 클래스, 모듈 또는 기타 사용자 정의 항목을 식별하는 데 사용되는 이름입니다. 식별자는 A-Z, a-z 또는 밑줄(_)로 시작하며, 그 뒤에 0개 이상의 문자, 밑줄, 숫자(0-9)가 올 수 있습니다.
C++은 식별자 내에서 @, $, % 같은 구두점 문자를 허용하지 않습니다. C++은 대소문자를 구분하는 프로그래밍 언어입니다. 따라서 Manpower와 manpower는 C++에서 서로 다른 두 식별자입니다.
허용되는 식별자 예시:
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal
C++ 키워드
다음 목록은 C++의 예약어입니다. 이 예약어들은 상수, 변수 또는 기타 식별자 이름으로 사용할 수 없습니다.
| asm | else | new | this |
| auto | enum | operator | throw |
| bool | explicit | private | true |
| break | export | protected | try |
| case | extern | public | typedef |
| catch | false | register | typeid |
| char | float | reinterpret_cast | typename |
| class | for | return | union |
| const | friend | short | unsigned |
| const_cast | goto | signed | using |
| continue | if | sizeof | virtual |
| default | inline | static | void |
| delete | int | static_cast | volatile |
| do | long | struct | wchar_t |
| double | mutable | switch | while |
| dynamic_cast | namespace | template | |
삼중자(Trigraphs)
일부 문자는 삼중자 시퀀스(trigraph sequence)라는 대체 표현을 가집니다. 삼중자는 단일 문자를 나타내는 3문자 시퀀스로, 항상 두 개의 물음표로 시작합니다.
삼중자는 문자열 리터럴, 문자 리터럴, 주석, 전처리기 지시문 등 어디에 나타나든 확장됩니다.
자주 사용되는 삼중자 시퀀스:
| 삼중자 | 대체 문자 |
| ??= | # |
| ??/ | \ |
| ??' | ^ |
| ??( | [ |
| ??) | ] |
| ??! | | |
| ??< | { |
| ??> | } |
| ??- | ~ |
모든 컴파일러가 삼중자를 지원하는 것은 아니며, 혼란스러운 성격 때문에 사용을 권장하지 않습니다.
C++의 공백(Whitespace)
공백만 포함하거나 주석이 있는 줄을 빈 줄(blank line)이라 하며, C++ 컴파일러는 이를 완전히 무시합니다.
공백(Whitespace)은 C++에서 빈칸, 탭, 개행 문자, 주석을 설명하는 용어입니다. 공백은 문장의 한 부분을 다른 부분과 분리하며, 컴파일러가 문장의 한 요소(예: int)가 어디에서 끝나고 다음 요소가 어디서 시작하는지 식별할 수 있게 합니다.
문장 1
int age;
위 문장에서 컴파일러가 int와 age를 구별하려면 최소한 하나의 공백 문자(보통 스페이스)가 필요합니다.
문장 2
fruit = apples + oranges; // Get the total fruit
위 문장 2에서 fruit와 = 사이, =와 apples 사이에는 공백 문자가 필요하지 않지만, 가독성을 위해 원한다면 포함해도 무방합니다.