C++ 프로그래밍 - 01 C++ 언어의 소개

Wonil Jang·2024년 8월 26일

컴퓨터과학

목록 보기
4/12
post-thumbnail

해당 포스트는 강의를 수강 후 개인적으로 이해한 부분을 글로 기록하고 해석하기 위한 목적으로 이해한 부분이 틀릴수도 있습니다. 틀린 부분에 대해서는 편하게 지적해 주시면 수정하겠습니다.

1. C++ 언어의 개요

1. C++ 언어란?

  • 1979년 Bell 연구소의 Bjarne Stroustrup이 C 언어를 확장하여 만든 프로그래밍 언어

    • C with Classes -> 1983년 C++라는 이름을 사용
  • 주요 확장 내용

    • 객체지향 프로그래밍: 클래스, 상송, 다형성, 동적 바인딩 등
    • 일반화 프로그래밍: 템플릿
    • 예외처리

2. C++ 언어의 표준

  • 국제표준화기구(ISO)의 C++ 표준화 연혁

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

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

  1. 소스 프로그램 파일
    • 처리하고자 하는 작업을 수행하는 C++프로그램 명령어들을 담고 있는 파일
    • 텍스트 에디터를 통해 작성하고 수정할 수 있다.
    • 파일의 확장자: '.cpp', '.cxx', '.C' 등을 사용함
  2. 헤더 파일
    • 각각의 소스 프로그램 파일에서 클래스, 함수의 원형, 매크로, 전역변수, 상수 등 여러 소스 파일에 공통적으로 선언되는 부분을 별도로 작성한 파일
    • 단독으로 컴파일되지 않고, #include라는 선행처리기 지시어에 의해 소스 프로그램 파일에 삽입되어 함께 컴파일
    • 파일의 확장자: '.h', '.hpp' 등을 사용함

2. C++ 프로그램의 빌드

  1. 컴파일, Compile

    • 소스 파일을 컴퓨터가 해석할 수 있는 명령으로 번역하는 과정
    • 컴파일러, Compiler
      • 소스 파일을 번역하는 작업을 하는 프로그램
  2. 목적 파일, Object file

    • 컴파일러가 하나의 번역 단위를 컴파일한 결과 만들어지는 목적 코드(Object Code)를 저장하는 파일
    • 목적 파일은 번역 단위별로 하나씩 만들어진다.
  3. 실행 파일

    • 생성된 목적 파일들을 라이브러리를 통해 하나로 연결하여 생성된 파일

    • 목적 파일을 연결하는 과정은 링크라고 한다.

      라이브러리, Library
      프로그램을 작성할 때 사용할 수 있는 클래스나 값, 함수 등을 모아 놓은 패키지, 링크 과정에 필요한 라이브러리는 링커라고 한다.

      빌드 과정에 필요한 도구

      • 소스 프로그램 및 GUI 등의 편집기
      • 컴파일러
      • 링커
      • 디버깅 도구

      위와 같은 소프트웨어 개발에 사용되는 여러 도구들을 모아 놓은 환경을 통합 개발 환경 (IDE: Integrated Development Environment)이라고 한다.

3. C++ 프로그래밍 첫걸음

  1. C++ 프로그램의 기본적인 구조

    1. 주석, Comment

      • 프로그램 내 설명문을 작성한 글
      • 프로그램의 내용을 이해하기 쉽게하는 목적
      • 컴파일러는 주석을 번역하지 않는다.

      작성 방법

      /*
        '/*'와 '*/' 사이에 문장을 작성 
      */
      
      // '//'를 사용하면 해당 행의 뒤 문자는 주석으로 간주
    2. 선행처리

      • 소소 프로그램 컴파일 전 컴파일러가 실제로 번역할 소스 프로그램을 먼저 가공하는 과정

      • 선행처리기 지시어(Preprocessor directives)로 처리를 지시

        • 선행처리기 지시어는 #으로 시작함
        • 선행처리기 지시어 문장은 한 행에 한 개의 문장을 작성함
      • 대표적인 선행처리

        • 헤더파일 삽입: #include

        • 매크로 선언 및 해제: #defin, #undef

        • 조건부 컴파일: #if, #ifdef, #ifndef

            #include <iostream> // 선행처리기 지시어
          
            int main() 
            {
              // 표준 출력 스트림으로 문장을 출력함 
              std::cout << "Hello world"
                        << std:: endl;
              return 0;
            }
      • 선행처리의 예

        • 헤더파일 삽입

          a.cpp에서 a.h라는 헤더 파일을 삽입하기위한 선행 처리가 지시 되어 있고 결과에는 a.h에 작성되어 있는 문장들은 a.cpp에 포함된다.

          헤더파일 삽입의 경우 <>를 사용하여 삽입하는 경우 표준 include 경로에 존재하는 파일을 사용하고 ""를 사용하여 삽입하는 경우 절대 경로에 위치한 파일을 찾는다.

    3. 문장

      1. C++ 프로그램의 문장
        • 하나의 문장은 단어와 연산자, 숫자, 문자, 문자열, 문장 부호, 빈칸 등을 정해진 문법에 따라 나열하여 작성
        • 문장의 끝에는 ; (세미콜론)을 기입하여 다음 문장과 구분
          std::cin >> a;
          aSquare = a * a;
      2. 블록, Block
        • 한 개 이상의 문장을 중괄호 {}안에 나열하여 묶어 놓은 것
        • 여러 개의 문장을 하나의 문장처럼 취급, 함수의 몸체를 구성하기 위해 사용
          if(a > b) {
            auto tmp = a
            a = b
            b = tmp;
          }
    4. 함수, Function

    • 함수의 구성

        #include <iostream>
        int main() 
          /* 
            함수의 머리부
            함수가 return하는 값의 자료형과 함수의 이름 
            main 함수는 프로그램의 시작점 
          */
        {
          /* 
            몸체 블록
            실제로 실행되는 내용이 담겨있는 부분
          */ 
            // 표준 출력 스트림으로 문장을 출력함 
            std::cout << "Hello world"
                      << std:: endl;
            return 0;
        }
    • std::cout 객체

      • 표준 출력 스트림 객체

      • 데이터를 문자열로 변환하여 출력함

      • 출력 연산자(삽입 연산자): <<

          std::cout << "first step"; // first step
        
          int a = 10;
          std::cout << "a의 값은 ";
          std::cout << a << "입니다." << std::endl;
          /* 
            출력 결과
            a의 값은 10입니다.
          */

        std::endl은 end of line의 뜻으로 행이 끝남을 알리는 조작어이고 이후 출력되는 문자는 개행된다.

    • std::cin 객체

      • 표준 입력 스트림 객체
      • 문자열을 입력변수의 자료형의 값으로 변환하여 입력함
      • 입력 연산자(추출 연산자): >>
      • 백색 공백 문자(빈칸, 탭, 새줄 문자)는 구분 문자로 취급함
          int a;
          char str[100];
          std::cin >> a >> str;
          /* 
            사용자 입력: 10  KNOU Computer Sci. 
            위의 데이터를 입력 받으면 `KNOU` 사이에 공백으로 구분이 되어 출력 결과는
            a = 10, str = 'KNOU'
            `KNOU` 뒤의 문장은 입력이 되지 않는다.
          */
    1. 명칭공간, Namespace

      1. 명칭공간이란?
        • 툭정한 명칭들이 인식되는 프로그램의 부분
        • 다른 영역의 명칭 선언과 무관하게 명칭공간 내에서 자유롭게 명칭을 선언하여 사용할 수 있다.
      2. 정의
          namespace nameSpace {
            int count; // 명칭을 선언하는 문장 나열 
          }
        • 명칭공간 외부에서 소속 명칭공간을 지정하여 사용
          namespace nameSpace {
            int count; // 명칭을 선언하는 문장 나열 
          }
          nameSpace::count = 0;
      • 전역 명칭공간: 특정 명칭공간에 속하지 않는 기본 명칭공간
      • std명칭공간: 표준 C++라이브러리의 명칭들이 정의되어있는 명칭공간
      1. 사용 예

          #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; 
            // 10
            std::cout << NameSpace2::a << std::endl; 
            // 20
            std::cout << ::a << std::endl; 
            // 30, 전역명칭공간 
            std::cout << a << std::endl; 
            /* 40, 지역 변수 a가 선언되어 있지 않을 경우 전역 변수 a를 가져온다. */
            std::cout << NameSpace1::b << std::endl; // 50
            return 0;
          }
        
      2. using을 이용한 명칭공간 사용

        • 특정 명칭공간이나 명칭공간 내의 특정 이름을 자주 사용하는 경우 명치공간 지정을 간소화 할 수 있음
          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;
          }
        
        • 변수가 충돌하지 않게 주의해야 한다.
profile
아 좀 신나고 싶네! XD

0개의 댓글