1. 구문(Syntax)의 개념
구문은 프로그래밍 언어로 문장을 작성하는 규칙, 약속을 말한다. 또한, 프로그래밍 언어의 구조를 정의하는 문법 규칙으로 볼 수도 있다.
C++ 언어는 그것이 제공하는 기능에 대한 구문을 가지고 있다. 다른 언어는 그 사용법을 명시하는 제각기 다른 구문을 가지고 있는 경우가 있지만, C++ 프로그램은 모든 프로그램에서 따르는 기본 구문 규칙을 가지고 있다. 그렇기에 그 기본 구문에 대한 이해를 마친다면 C++에 대한 이해도가 높아질 것이다.
2. C++의 기본 구문
위의 이미지는 헤더 파일, 메인 함수, 네임스페이스 선언 등이 포함된 기본적인 C++ 프로그램을 보여준다. 이제 이것에 대해 하나씩 파보는 시간을 가져 본다.
① 헤더 파일
헤더 파일에는 우리가 프로그램에서 사용하고 있는 함수와 매크로의 정의가 포함되어 있다. 이 파일들은 C++ 프로그램의 상단에 정의되어 있다.
그림의 1번 행에서 우리는 #include <iostream> 문을 사용하여 컴파일러에게 입력과 출력에 사용한 cin 및 cout 메서드의 정의를 저장하는 iostream 헤더 파일 라이브러리를 포함하도록 지시했다. 여기서 #include는 헤더 파일을 가져오는 전처리기 명령어다.
구문:
#include <library_name>
② 네임스페이스
C++의 네임스페이스는 식별자를 정의하는 범위 또는 영역을 제공하는 데 사용된다. 고유한 이름만 식별자로 사용할 수 있으므로 두 식별자 간의 이름 충돌을 피하기 위해 사용되는 것으로 이해할 수 있다.
그림의 2번 행에서는 모든 표준 라이브러리 함수가 정의되는 표준 네임스페이스가 될 것임을 지정하기 위해 namespace std 문을 사용한 것이다.
구문:
using namespace std;
③ 메인 함수
함수는 C++ 프로그램의 기본 구성 요소로 특정 작업을 수행하기 위한 명령을 포함한다. 함수 정의는 본문에 있는 명령 외에도 반환 유형과 매개 변수에 대한 정보도 포함한다.
그림의 3번 행에서 메인 함수를 int main()으로 정의했다. 메인 함수는 C++ 프로그램에서 가장 중요한 부분이라고도 할 수 있다. 프로그램 실행은 항상 메인 함수에서 시작되기 때문이다. 그렇기에 C++문을 해석할 때 보통 일단 메인 함수부터 찾고 시작하는 경우가 많다. 다른 모든 함수는 메인 함수에서 호출된다. C++에서 메인 함수는 실행 상태를 나타내는 값을 반환해야 한다.
구문:
int main() {
... code ....
return 0;
}
④ 블록
블록은 {} 괄호 안에 포함된 그룹이다. 블록은 식별자의 범위를 정의하며, 일반적으로 함수 및 제어문 본문을 둘러싸는 데 사용된다.
그림에서 메인 함수의 본체는 {} 안에 포함된 4번 라인부터 9번 라인까지이다.
구문:
{
// Body of the Function
return 0;
}
⑤ 세미콜론
위 코드의 각 문장에는 세미콜론 기호(;)가 따라붙는다. 이는 프로그램의 문장의 각 행을 종료하는 데 사용된다. 컴파일러는 이 세미콜론을 보면 해당 행의 연산을 종료하고 다음 행으로 이동한다.
구문:
any_statement ;
⑥ 식별자
변수, 함수 및 기타 사용자 정의 데이터 유형의 이름을 지정하기 위해 식별자를 사용한다. 식별자는 대문자 및 소문자 알파벳 문자, 밑줄 및 숫자로 구성될 수 있다. 단, 첫 번째 문자는 밑줄 또는 알파벳이어야 한다. 각 언어마다 식별자에 대한 규칙과 제한이 있으니 이에 대해서도 알아보면 좋을 것이다.
예시:
int num1 = 24;
int num2 = 34;
여기서 num1, num2가 식별자고, int는 데이터 타입이다.
⑦ 키워드
C++ 프로그래밍 언어에는 C++ 프로그램에서 특별한 의미로 사용되는 용어들이 있다. 당연하게도 이것들은 식별자에는 사용할 수 없다.
예를 들어 int, return, using이라는 단어는 C++ 프로그램에서 사용되는 키워드이다. 그렇기에 이들은 모두 C++ 언어에서 미리 정의된 의미를 가지고 있다.
C++에는 총 95개의 키워드가 있다. 그중 유명한 몇몇 키워드는 다음과 같다.
int void if while for auto bool break
this static new true false case char class
⑧ cout 출력
그림의 7번 행에서는 C++에서 기본 출력 방식인 cout 방식을 사용하여 표준 출력 스트림에서 두 숫자의 합을 출력했다(stdout).
구문:
cout << result << endl;
이것으로 기본 구문에 대한 정리를 하고, 실제 예시로 이해를 높여 보자.
// C++ program to demonstrate the basic syntax
// Header File Library
#include <iostream>
// Standard Namespace
using namespace std;
// Main Function
int main()
{
// Body of the Function
// Declaration of Variable
int num1 = 24;
int num2 = 34;
int result = num1 + num2;
// Output
cout << result << endl;
// Return Statement
return 0;
}
출력:
58
3. C++에서의 객체 지향 프로그래밍
C++ 프로그래밍 언어는 절차 지향 프로그래밍과 객체 지향 프로그래밍을 모두 지원한다. 위에서 기술한 예시는 절차 지향 프로그래밍 패러다임을 기반으로 한다. 그래서 이번에는 C++에서의 객체 지향 프로그래밍에 대해 다른 예시를 들어 이해하는 시간을 갖는다.
① 클래스
클래스는 개체의 템플릿이다. 예를 들어, 동물은 클래스이고 개는 동물 클래스의 개체이다. 클래스에는 고유 속성(데이터 멤버)과 동작(멤버 함수)이 있다. 클래스 이름의 첫 글자는 항상 대문자로 표시되며, 클래스를 만들기 위해 클래스 키워드를 사용한다.
그림의 3번 라인에서는 Calculate라는 이름의 클래스를 선언했고, 그것의 바디는 3번 라인에서 7번 라인으로 확장된다.
구문:
class class_name{
// class body
};
② 데이터 멤버 & 멤버 함수
클래스의 속성 또는 데이터는 데이터 멤버에 의해 정의되며, 이러한 데이터 멤버에 대해 작동하는 기능을 멤버 함수라고 한다.
예시:
class Calculate{
public:
int num1 = 50; // data member
int num2 = 30; // data member
// member function
int addition() {
int result = num1 + num2;
cout << result << endl;
}
};
위의 예시에서 num1과 num2는 데이터 멤버이고, addition()는 이 두 데이터 멤버에 대해 작업하고 있는 멤버 함수이다. 여기 public이라는 키워드가 있는데, 이는 액세스 수식어이다. 액세스 수식어는 이러한 데이터 멤버 & 멤버 함수에 액세스할 수 있는 사람을 결정한다. 여기서 액세스 수식어는 public이기 때문에 이러한 데이터 멤버 & 멤버 함수가 누구나 액세스할 수 있음을 의미하는 것이다.
③ 개체
개체는 클래스의 인스턴스이다. 클래스 자체는 메모리가 할당되지 않은 템플릿에 불과하다. 그렇기에 클래스에 정의된 데이터와 메서드를 사용하려면 해당 클래스의 개체를 만들어야 한다.
이들은 C++에서 변수를 선언하는 것과 유사한 방식으로 선언된다.
구문:
class_name object_name;
객체의 데이터 및 메서드에 액세스하기 위해 점 연산자(.)를 사용한다. 이제 코드를 실행하여 프로그램의 출력을 확인해 보는 과정을 갖자.
#include <iostream>
using namespace std;
class Calculate{
// Access Modifiers
public:
// data member
int num1 = 50;
int num2 = 30;
// memeber function
int addition() {
int result = num1 + num2;
cout << result << endl;
}
};
int main() {
// object declaration
Calculate add;
// member function calling
add.addition();
return 0;
}
출력:
80
'C++' 카테고리의 다른 글
C++ 키워드(Keywords) 총정리 (1) | 2024.02.16 |
---|---|
C++ 식별자(Identifiers) 총정리 (0) | 2024.02.15 |
C++ 나쁜(?) 습관, 네임 스페이스 STD (1) | 2024.02.13 |
C++ 전처리기(#) 총정리 (1) | 2024.02.12 |
C++ 주석 총정리 (1) | 2024.02.11 |