목차
C++ 언어는 C 언어의 문법적 토대 위에 객체지향 프로그래밍을 비롯한 진보된 프로그래밍 기법을 지원할 수 있도록 만들어진 언어이다. 비야네 스트롭스트룹에 의해 탄생한 이후 지속적인 표준화 과정을 통해 현재의 C++로 발전하였다. C++로 프로그램을 작성하기 위해서는 소스 파일을 작성하고 이를 실행 파일로 번역하는 기본적인 절차를 알아야 한다. 이 장에서는 기본적인 C++프로그램의 구성을 이해하고, 간단한 프로그램을 통해 프로그램 개발에 쓰이는 도구를 활용해 볼 수 있는 경험을 해 보는 기회를 가지려고 한다.
💡 학습 목표
1. C++의 기본적인 특성을 설명할 수 있다.
2. C++ 소스 프로그램 파일과 헤더 파일의 용도를 설명할 수 있다.
3. 선행처리의 개념을 설명할 수 있다.
4. 명칭공간을 이용하여 자유롭게 명칭을 만들어 사용할 수 있다.
1. C++언어의 개요
C와 C++
- C++은 1979년 AT&T 벨 연구소의 Bjarne Stroustrup이 C언어를 확장하여 만든 객체지향 프로그래밍 언어이다.
(초기에는 C with Classes → 1983년부터 C++ 이름 사용) - C는 절차적 프로그래밍 언어이지만, C++은 객체지향 프로그래밍을 지원하기 위한 부분이 포함된다.
절자척 프로그래밍 :
적절한 단위로 정의된 처리 절차를 함수로 표현한다. 또한 함수가 처리해야 할 데이터를 적절히 표현할 수 있는 데이터 구조를 만들 수 있다.
주요 확장 내용
- 객체지향 프로그래밍 : 클래스, 상속, 다형성, 동적 바인딩 등
- 일반화 프로그래밍 : 템플릿
- 예외처리
C++의 표준
- 국제표준화기구 (International Organazation for Standardization, ISO)는 1989년부터 C++에 대한 표준화 작업에 착수하였다.
1989 | International Organazation for Standardization, ISO | C++에 대한 표준화 작업 착수 | |
1988 | C++98 | ISO/IEC 14882:1998 | 첫번째 C++ 표준 |
2003 | C++03 | ISO/IEC 14882:2003 | |
2007 | C++TR1 | ISO/IEC 19768:2007 | 정규표현식, 스마트 포인터, 해시테이블, 난수발생기 등 포함 (std::tr1) |
2011 | C++11 | ISO/IEC 14882:2011 | 여러 구조 및 성능 개선 |
2014 | C++14 | ISO/IEC 14882:2014 | |
2017 | C++17 | ISO/IEC 14882:2017 | |
2020 | C++20 | ISO/IEC 14882:2020 |
2. C++ 프로그램의 작성 및 빌드
소스 프로그램의 작성
C++ 프로그램의 소스 파일
- 처리하고자 하는 작업을 수행하는 C++ 프로그램 명령어들을 담고 있는 파일
- .cpp, .cxx, .C 등의 확장자
C++ 헤더 파일
- 여러 소스 파일에 공통적으로 선언되는 내용을 담고 있는 파일
(클래스, 함수의 원형, 매크로, 전역변수, 상수 등) - 단독으로 컴파일되지 않고, #include라는 선행처리기 지시어에 의해 소스 프로그램 파일에 삽입되어 함께 컴파일된다.
- .h, .hpp 등의 확장자
선언과 정의
선언이란?
- 컴파일러에게 프로그램 중에 사용할 이름과 그 형식을 알리는 것
- 만일 이러한 선언이 그 이름에 대한 실체가 만드어지게 할 경우 정의라고 한다.
int i; // 변수 i를 정의하는 문장
extern int j; // 선언문, 저장공간이 할당되지는 않음
int g(int a); // 함수 원형의 선언문
int f(int x, int y) // 함수 f를 정의하는 문장
{
return g(x) * y;
}
- 하나의 이름에 대한 선언은 정의가 아니라면 여러 번 반복될 수 있다.
- 반면 정의는 단 한 번만 할 수 있다.
extern int j;
extern int j; // j의 재선언
int j;
int j; // 에러 : j의 중복 정의
프로그램의 빌드
- 컴파일 : 소스 파일의 프로그램을 컴퓨터가 이해할 수 있는 명령으로 번역하는 과정
- 컴파일러 : 번역하는 작업을 하는 프로그램
- 목적 코드 : 컴파일러가 하나의 번역 단위를 컴파일한 결과 만들어지는 코드 → 파일 : 목적 파일
- 라이브러리 : 프로그램을 작성할 때 사용할 수 있는 클래스나 값, 함수 등을 모아 놓은 것
- 링크 : 목적 파일과 라이브러리를 연결하여 실행 파일을 만드는 것 → 도구 : 링커
- 빌드 : 컴파일과 링크를 통해 실행 파일을 만드는 과정
통합개발환경
- 컴파일, 링크, 디버깅 등과 같이 소프트웨어 개발에 사용되는 여러 가지 도구들을 모아 놓은 것
- C++ IDE : 비주얼 스튜디오, 볼랜드 C++Builder, Dev C++, Xcode
(나는 JetBrains의 CLion 이용)
3. C++ 프로그래밍 첫걸음
#include <iostream>
int main()
{
std::cout << "나의 첫 번째 C++ 프로그램"
<< std::endl;
return 0;
}
주석
- 프로그램 내에 설명문을 넣은 것
- 활용 방법
- /* */ 사이에 주석 작성, 여러 행에 걸쳐 주석을 작성할 때 편리하다
- //를 사용하면 그 행의 나머지는 주석으로 간주
선행처리
- C++ 소스 프로그램은 컴파일되기 전에 먼저 선행처리 과정을 거친다.
- 선행처리 지시어 : 선행처리기가 어떤 작업을 할 것인가를 지시하는 명령
- #으로 시작, 한 행에 한 문장
- 대표적인 선행처리 지시어
- #include : 헤더 파일을 소스 프로그램에 결합
- #define : 매크로 선언
- #if, #ifdef, #ifdef 등 : 조건부 컴파일
문장
- 하나의 문장은 단어와 연산자, 숫자, 문자, 문자열, 문장 부호, 빈칸 등을 정해진 문법에 따라 나열하여 작성
- 문장의 끝에는 세미콜론(;)을 기입하여 다음 문장과 구분한다
- 여러 개의 문장을 {}로 묶은 것을 블록이라고 한다.
- 여러 개의 문장을 하나의 문장처럼 취급하거나 함수의 몸체를 구성하기 위해 사용된다.
함수
- C++ 프로그램의 가장 기본적인 구성단위 중 하나
- 함수 머리부와 몸체 블록으로 구성된다.
- main() 함수
- 프로그램의 시작점에 해당되는 함수
- return 명령을 실행하면 프로그램이 끝난다.
정상 종료시 0 반환 - 필요에 따라 임의의 정수 반환 가능
입출력 스트림
- 문자 형태의 입출력을 위해 표준 라이브러리의 입출력 스트림을 사용할 수 있다.
- 헤더 파일 <iostream>을 include해야 한다.
- 출력 : 표준 출력 스트림 std::cout과 삽입 연산자 <<를 사용한다.
- 입력 : 표준 입력 스트림 std::cin과 추출 연산자 >>를 사용한다.
명칭공간
#include <iostream>
namespace NameSpace1 { int a = 10;}
namespace NameSpace2 { int a = 20;}
int a = 30;
namespace NameSpace1 { int b = 30;}
int main()
{
int a = 40;
std::cout << NameSpace1::a << std::endl;
std::cout << NameSpace2::a << std::endl;
std::cout << ::a << std::endl;
std::cout << a << std::endl;
std::cout << NameSpace1::b << std::endl;
return 0;
}
- 명칭공간이란 특정한 이름들이 인식되는 프로그램의 부분을 의미한다.
- 표준 C++ 라이브러리의 명칭들은 'std'라는 명칭공간에 정의되어 있다.
- 특정 명칭공간에 정의된 명칭은 '명칭공간::명칭' 형태로 표기한다.
- '::명칭' 형식의 표기는 특정 명칭공간에 속하지 않는 전역 명칭공간에 정의된 명칭을 나타낸다.
- 'using namespace' 구문은 특정 명칭공간을 기본 명칭공간에 포함시켜, 명칭공간을 표기하지 않고 명칭을 사용할 수 있게 한다.
#include <iostream>
using namespace std;
namespace NameSpace1 { int a = 10;}
namespace NameSpace2 { int a = 20;}
int a = 30;
namespace NameSpace1 { int b = 30;}
int main() {
int a = 40;
cout << NameSpace1::a << endl;
cout << NameSpace2::a << endl;
cout << ::a << endl;
cout << a << endl;
cout << NameSpace1::b << endl;
return 0;
}
'방통대정리 > C++프로그래밍' 카테고리의 다른 글
C++ 프로그래밍 목차 (0) | 2024.10.14 |
---|