1장 C++ 언어의 소개

 

목차

    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;
    }

    주석

    • 프로그램 내에 설명문을 넣은 것
    • 활용 방법
      1. /* */ 사이에 주석 작성, 여러 행에 걸쳐 주석을 작성할 때 편리하다
      2. //를 사용하면 그 행의 나머지는 주석으로 간주

    선행처리

    • 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