Home [C++ 프로그래밍] 1강 - C++ 언어의 소개
Post
Cancel

[C++ 프로그래밍] 1강 - C++ 언어의 소개

💡해당 게시글은 방송통신대학교 이병래 교수님의 'C++ 프로그래밍' 강의를 개인 공부 목적으로 메모하였습니다.



학습 개요


  • C++ 프로그래밍 언어의 기본적인 형식에 대하여 학습
  • 프로그램을 구성하는 소스 파일의 종류와 선행 처리, 명칭 공간, main 함수 등 기초적인 C++ 프로그램을 작성하는 방법 알 수 있게 됨



학습 목표d


  • C++ 프로그램을 구성하는 소스 파일의 용도 설명할 수 있음
  • 선행 처리, 문장, 함수 등 C++ 언어의 기본 요소들로 구성된 최소한의 프로그램을 작성할 수 있음
  • 통합 개발 환경을 통해 프로그램을 작성하고 빌드하여 실행 프로그램을 만들 수 있음



주요 용어


  • 소스 파일
    • 프로그래밍 언어의 문법에 따라 작성된 프로그램을 저장하고 있는 파일
  • 헤더 파일
    • 여러 소스 파일에 공통적으로 선언되는 내용을 담고 있는 파일로 그 헤더 파일의 내용이 필요한 소스 프로그램 파일에 삽입 된 후 컴파일 됨
  • 빌드(build)
    • 프로그램의 소스 파일을 실행 가능한 프로그램 파일로 변환하는 것을 의미함
    • 컴파일이 필요한 소스 파일들을 컴파일하고, 그 결과와 라이브러리 등을 링크하는 처리가 이루어짐
  • 통합 개발 환경(integrated development environment, IDE)
    • 컴퓨터 프로그램을 만드는데 필요한 소스 파일 편집기, 컴파일러, 링커, 디버깅 도구 등 소프트웨어 개발에 필요한 도구를 모아 놓은 소프트웨어임
  • 선행 처리기 지시어(preprocessor directives)
    • C++ 프로그램을 컴파일하기 전에 소스 프로그램을 가공하여 컴파일러가 실제로 번역할 소스 프로그램을 만드는 선행 처리를 지시하는 명령어
  • 스트림(stream)
    • 시간에 따라 순서대로 입력되거나 출력 되는 일련의 데이터
  • 백색 공백 문자(whitespace character)
    • 컴퓨터에서 수평 또는 수직 방향의 공간을 표현하는 문자로 공백 문자, 탭, 새줄 문자 등이 이에 해당 됨
  • 명칭 공간(name space)
    • 특정한 명칭들이 인식 되는 프로그램의 부분
    • 다른 영역에 선언된 명칭과 무관하게 명칭 공간 내에서 자유롭게 명칭을 선언하여 사용할 수 있게 함



강의록


C++ 언어의 개요

C++언어

  • 1979년 Bell 연구소의 Bjarne Stroustrup이 C 언어를 확장하여 만든 프로그래밍 언어
    • C with Classes
  • 주요 확장 내용
    • 객체 지향 프로그래밍
      • 클래스, 상속, 다형성, 동적 바인딩 등
    • 일반화 프로그래밍
      • 템플릿
    • 예외 처리

C++ 언어의 표준

  • 국제 표준화 기구(ISO)의 C++ 표준화 연혁
    • 1983년부터 C++라는 이름을 사용함

    Untitled

C++ 프로그램의 작성 및 빌드

C++ 프로그램의 소스 파일

  • 소스 프로그램 파일
    • 처리하고자 하는 작업을 수행하는 C++ 프로그램 명령어들을 담고 있는 파일
    • 파일의 확장자
      • .cpp
      • .cxx
      • .C
  • 헤더 파일
    • 클래스, 함수의 원형, 매크로, 전역 변수, 상수 등 여러 소스 파일에 공통적으로 선언되는 내용을 담고 있는 파일
    • 단독으로 컴파일 되지 않고, #include라는 선행 처리기 지시어에 의해 소스 프로그램 파일에 삽입 되어 함께 컴파일 됨
    • 확장자
      • .h
      • .hpp

C++ 프로그램의 빌드

  • 프로젝트 빌드 과정

    Untitled

    1. 소스 파일(.cpp) -컴파일(번역)→ 목적 파일(.obj)
    2. 목적 파일(.obj) +(링크)+ 라이브러리 = 실제 동작 가능한 실행 프로그램 파일(.exe)
  • 필요한 도구

    • 통합 개발 환경(IDE)
      • 소스 프로그램 및 GUI 등의 편집기
      • 컴파일러
      • 링커
      • 디버깅 도구

C++ 프로그래밍 첫걸음

C++ 소스 프로그램

  • FirstStep.cpp

    1
    2
    3
    4
    5
    6
    7
    8
    
      #include <iostream>
        
      int main()
      {
        // 표준 출력 스트림으로 문장을 출력함 -> 주석
        std::cout << "나의 첫 번째 C++ 프로그램" << std::endl;
        return 0;
      }
    

주석

  • C++에서 주석(comment)을 작성하는 방법
    1. /**/사이에 문장을 작성

      1
      2
      3
      4
      5
      6
      
       /* a와 b의 값 중에서
       	 더 큰 값을 출력한다. */
       if (a > b)
         std::cout << a << std::endl;
       else
         std::cout << b << std::endl;
      
    2. //를 기입하면 그 행의 나머지는 주석임

      1
      2
      3
      4
      5
      6
      
       // a와 b의 값 중에서
       // 더 큰 값을 출력한다.
       if (a > b)
         std::cout << a << std::endl;
       else
         std::cout << b << std::endl;
      

선행 처리

  • 선행 처리의 지시

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      #include <iostream> 
      // 선행 처리기 지시어
        
      int main()
      {
        // 표준 출력 스트림으로 문장을 출력함
        std::cout << "나의 첫 번째 C++ 프로그램" << std::endl;
        return 0;
      }
    
    • #include <iostream>
      • 선행 처리기 지시어
  • 선행 처리

    • C++ 프로그램을 컴파일하기 전에 소스 프로그램을 가공하여 컴파일러가 실제로 번역할 소스 프로그램을 만드는 것
    • 선행 처리기 지시어(preprocessor directives)로 처리를 지시함
      • 선행 처리기 지시어는 #로 시작함
      • 선행 처리기 지시어 문장은 한 행에 한 개의 문장 작성함
    • 대표적인 선행 처리
      • 헤더 파일 삽입
        • #include

          image.png

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          
            #include <iostream>
            /*
              "" → 내가 만든 헤더 파일을 include 할 때
              <> →  표준 라이브러리에서 제공하는 헤더 파일을 include 할 때
            */
                          
            int main()
            {
              // 표준 출력 스트림으로 문장을 출력함
              std::cout << "나의 첫 번째 C++ 프로그램" << std::endl;
              return 0;
            }
          

          Untitled

      • 매크로 선언 및 해제
        • #define
        • #undef
      • 조건부 컴파일
        • #if
        • #ifdef
        • #ifndef

문장

  • C++ 프로그램의 문장
    • 하나의 문장은 단어와 연산자, 숫자, 문자, 문자열, 문장 부호, 빈칸 등을 정해진 문법에 따라 나열하여 작성함
    • 문장의 끝에는 세미 콜론(;)을 기입해 다음 문장과 구분함

      1
      2
      
        std::cin >> a;
        aSquare = a * a;
      
  • 블록(block)
    • 한 개 이상의 문장을 중괄호({}) 안에 나열하여 묶어 놓은 것
    • 여러 개의 문장을 하나의 문장처럼 취급하거나 함수의 몸체 구성하기 위해 사용 됨

      1
      2
      3
      4
      5
      
        if (a > b) {
          auto tmp = a;
          a = b;
          b = tmp;
        }
      

함수

  • 함수의 구성

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      #include <iostream>
        
      int main() // 머리부
        
      // 몸체 블록
      {
        // 표준 출력 스트림으로 문장을 출력함
        std::cout << "나의 첫 번째 C++ 프로그램" << std::endl;
        return 0;
      }
    
    • main()
      • 프로그램 시작 점

입 출력 스트림

  • std::out객체
    • 표준 출력 스트림 객체
    • 데이터를 문자열로 변환하여 출력함
    • 출력 연산자(삽입 연산자)
      • <<
      1
      2
      3
      
        std::cout << "나의 첫 번째 C++ 프로그램";
              
        // "나의 첫 번째 C++ 프로그램"
      
      1
      2
      3
      4
      5
      
        int a = 10;
        std::cout << "a의 값은 ";
        std::cout << a << "입니다." << std::endl;
              
        // "a의 값은 10입니다."
      
  • std::cin객체
    • 표준 입력 스트림 객체
    • 문자열을 입력 변수의 자료형의 값으로 변환하여 입력
    • 입력 연산자(추출 연산자)
      • >>
      • 백색 공백 문자(빈칸, 탭, 새줄 문자)는 구분 문자로 취급
      1
      2
      3
      4
      
        int a;
        char str[100];
        std::cin >> a >> str;
        std::cout << "c = " << c << ", str = " << str << std::endl;
      
      • 사용자 입력
        • 10 KNOU Computer Sci
      • 입력 결과
        • a = 10, str = KNOU

명칭 공간

  • 명칭 공간
    • 특정한 명칭들이 인식 되는 프로그램의 부분
      • 다른 영역의 명칭 선언과 무관하게 명칭 공간 내에서 자유롭게 명칭을 선언하여 사용 가능
    • 명칭 공간의 정의

      1
      2
      3
      
        namespace myNSpc { // 명칭 공간의 이름 : myNSpc
          int count; // 명칭을 선언하는 문장 나열
        }
      
    • 명칭 공간 외부에서는 소속 명칭 공간을 지정해 사용해야 함

      1
      
        myNSpc::count = 0;
      
    • 동일한 명칭이라도 서로 다른 명칭 공간에서 정의되었다면 별개의 것으로 구분
      • 여러 프로그래머가 작성한 프로그램을 결합해 완성된 프로그램 만들 경우 각자 필요한 명칭을 독립적으로 만들어 사용 가능
    • 전역 명칭 공간
      • 특정 명칭 공간에 속하지 않는 기본 명칭 공간
    • std 명칭 공간
      • 표준 C++ 라이브러리의 명칭들이 정의되어 있는 명칭 공간
  • 명칭 공간 사용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
      #include <iostream>
        
      namespace NameSpace1 { int a = 10; }
      namespace NameSpace2 { int a = 20; }
      int a = 30;
      namespace NameSpace1 { int b = 50; }
        
      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;
      }
        
      /*
      10
      20
      30
      40
      50
      */
    
  • using이용한 명칭 공간 사용
    • 특정 명칭 공간이나 명칭 공간 내의 특정 이름을 자주 사용하는 경우 명칭 공간 지정을 간소화 할 수 있음
      • std::coutcout
    1
    
      using namespace std;
    
    1
    2
    
      using std::cout;
      using std::endl;
    
  • 명칭 공간 사용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
      #include <iostream>
      using namespace std;
        
      namespace NameSpace1 { int a = 10; }
      namespace NameSpace2 { int a = 20; }
      int a = 30;
      namespace NameSpace1 { int b = 50; }
      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;
      }
    
    • FirstStep.cpp

      1
      2
      3
      4
      5
      6
      7
      8
      9
      
        #include <iostream>
        using namespace std;
              
        int main()
        {
          // 표준 출력 스트림으로 문장을 출력함
          cout << "나의 첫 번째 C++ 프로그램" << endl;
          return 0;
        }
      

실습 가이드

Visual Studio Community 설치

  1. Visual Studio 홈페이지 접속 → Community 2022 선택 → 다운로드

    Untitled

  2. C++를 사용한 데스크톱 개발 체크 → 설치 → 로그인
  3. 새프로젝트 만들기 → 빈 프로젝트

    Untitled

    Untitled

  4. 프로젝트 구성 작성 → 만들기

    Untitled

    • 프로젝트 이름 작성
    • 프로젝트 저장 폴더 지정
    • 솔루션(프로젝트를 담는 그릇) 이름 작성
  5. 생성된 솔루션, 프로젝트 확인

    Untitled

  6. 프로젝트 마우스 우클릭 → 추가 → 새항목

    Untitled

  7. C++ 파일 선택 → 소스 파일명 입력 → 추가

    Untitled

    Untitled

C++ 프로그램의 작성 및 빌드

  1. 소스 프로그램 입력

    Untitled

    • 파일명 옆 *표시
      • 수정된 파일이라는 뜻
  2. 상단 창 → 빌드 → FirstSetp 빌드

    Untitled

  3. 콘솔 창 로그 확인

    Untitled

    • 프로젝트 빌드 성공

프로그램 실행

  1. 상단 창 → 디버깅 → 디버깅 시작/디버깅 하지 않고 시작

    Untitled

  2. 명령창 확인해 프로그램 실행 확인

    Untitled



연습 문제


  1. 헤더 파일에 대한 올바른 설명은? a. 선행 처리기 지시어 #include에 의해 소스 프로그램 파일에 삽입된다.

    • 헤더 파일은 클래스, 함수의 원형, 매크로, 전역 변수, 상수 등 여러 소스 파일에 공통적으로 선언되는 내용을 담고 있는 파일임
    • 헤더 파일은 단독으로 컴파일 되지 않고, #include명령으로 지시 되는 위치에 선행 처리기에 의해 소스 프로그램에 삽입되어 함께 컴파일 됨
    • 일반적으로 사용되는 파일 이름의 확장자는 .h
  2. 다음 중 C++ 프로그램을 실행 가능한 프로그램으로 변환하는 것과 관련한 설명으로 올바른 것은?

    a. 통합 개발 환경(IDE)은 소스 프로그램의 편집기, 컴파일러, 링커, 디버깅 도구 등 소프트웨어 개발에 필요한 도구를 통합 제공하는 프로그램이다.

    • C++ 문법에 따라 작성한 프로그램을 소스 코드라고 하며, 컴파일러는 이를 목적 코드로 변환하는 역할을 함
    • 프로그래머가 작성한 프로그램은 링커(linker)를 이용하여 프로그램에서 사용한 라이브러리의 함수 등과 연결하는 링크 과정을 거쳐 실행 파일이 됨
    • 프로그램 개발에 필요한 이러한 도구들을 모아 통합 환경으로 제공하는 프로그램을 통합 개발 환경(IDE)이라고 함
  3. 위 지문 중 프로그램에서 (다)의 x에 10을 저장하기 위해 빈칸에 넣을 내용은?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     #include <iostream>
        
     namespace A{int x;} // 가
     namespace B{int x;} // 나
     int x; // 다
        
     int main()
     {
       int x; // 라
       // __________ = 10;
     }
    

    a. ::x

    • main()함수 내의 지역변수 x가 아닌 전역 명칭 공간을 지정하기 위해서는 ::을 첨부한다.



정리 하기


  • C++ 언어는 C 언어에 객체 지향 프로그래밍, 일반화 프로그래밍, 예외 처리 등의 기능을 추가하여 확장된 프로그래밍 언어임
  • C++ 프로그램은 .cpp라는 확장자를 갖는 소스 프로그램 파일과 .h라는 확장자를 갖는 헤더 파일이라는 두 가지 종류의 소스 파일에 작성함
  • 선행 처리기 지시어를 이용하여 소스 파일의 컴파일에 앞서 헤더 파일의 삽입, 매크로 선언, 조건부 컴파일 등의 선행 처리를 함
  • C++ 프로그램은 함수로 구성되며, 콘솔에서 동작하는 응용 프로그램의 경우 일반적으로 main()이라는 함수부터 프로그램 실행이 시작됨
  • 명칭 공간 이용 시 프로그램을 구성하는 영역 별로 다른 영역과의 충돌 우려 없이 자유롭게 명칭 선언해 사용 가능

[데이터 정보 처리 입문] 15강 - 파이썬을 활용한 자료 분석 2

[C++ 프로그래밍] 2강 - C++ 언어의 기초