경일게임아카데미 멀티 디바이스 메타버스 플랫폼 개발자 양성과정 20220615 ~ 0616 2022/04/04~2022/12/13

Jinho Lee·2022년 6월 15일
0

경일 메타버스 20220615 11주차 3일 수업내용. 프로그래밍 기초 with C++

프로그래밍에 대한 이해

  • 프로그래밍(Programming) :
    컴퓨터가 우리의 목적을 달성할 수 있도록 필요한 절차를 기술하는 것.

  • 프로그래밍 언어(Programming Language) :
    사람 대신에 컴퓨터에게 내 생각을 전달할 수 있는 도구.

  • 문법(Syntax) :
    프로그래밍 언어의 일정한 규칙.
    문법을 지키지 않으면 컴퓨터와 소통할 수 없다.

  • 코드(Code) :
    문법에 맞춰 적어놓은 명령어.

  • 코딩(Coding) :
    코드를 작성하는 것.

  • 프로그래밍과 코딩의 차이 :
    프로그래밍은 목적을 달성할 수 있게 논리적인 절차를 기술하는 것이며, 코딩은 이 절차를 바탕으로 명령어로 옮기는 것이다.

  • 프로그래밍 언어의 구성

    • 코어(Core) : 문법을 의미.

    • 라이브러리(Library) :
      문법을 이용해 많은 사람들이 편하게 프로그래밍 할 수 있도록 도와준다.

컴퓨터의 동작 원리

  • 구성 요소 : 메모리, 입출력 장치, CPU

  • CPU(Central Processing Unit) :
    우리가 입력한 명령어의 처리를 담당하는 부품.

  • 입력과 출력
    입력(Input) : 컴퓨터로 데이터를 주는 것.
    출력(Output) : 컴퓨터가 우리에게 데이터를 주는 것.

  • 비트(Bit) :
    컴퓨터가 사용하는 모든 데이터는 비트(Bit)로 저장된다.
    Binary와 Digit의 합성어로, 2가지 상태를 나타낼 수 있는 수.
    비트에 저장할 수 있는 데이터는 무엇이든지 상관 없다.

  • 메모리(Memory) :
    비트가 저장되는 공간. 다시 말해 우리의 데이터가 저장되는 공간.
    각 메모리마다 주소(Address)가 있다.

  • 프로세스(Process)

    • 프로그램을 실행하면 프로세스(Process)라는 것이 된다.

    • 프로세스는 프로그램을 실행하기 위한 여러 가지 데이터를 관리

    • 프로세스의 4가지 영역

      • 코드(Code) : 명령어가 저장되는 공간이다.

      • 데이터(Data) : 정적 데이터가 저장되는 공간이다.

      • 힙(Heap) : 동적 할당 영역이다.

      • 스택(Stack) : 정적 할당 영역이다.

      • 정적(Static) :
        보통 프로그램 실행 전에 무언가를 한다는 것이다.

      • 동적(Dynamic) :
        보통 프로그램 실행 시간에 무언가를 한다는 것이다.

프로그래밍 도구

  • 텍스트 에디터
    코드를 작성. 메모장, Vim, Visual Studio Code 등.

  • 컴파일러

    • 컴파일(Compile) :
      코드를 컴퓨터가 실제로 이해할 수 있는 명령어로 바꾸는 과정

    • 컴파일러(Compiler) :
      컴파일을 하는 프로그램.

  • 디버거

    • 버그(Bug) : 오류.

    • 디버거(Debugger) :
      버그를 고칠 수 있도록 여러 가지 기능을 제공

  • IDE
    통합 개발 환경(Integrated Development Environment).

    프로그램을 개발하기 위한 여러 가지 도구를 하나의 프로그램으로 만든 것.

C++의 기본 개념

  • 헤더 파일(Header File) :
    라이브러리가 들어있는 코드 모음.

  • 라이브러리(Library) :
    프로그래밍 하는 데 사용되는 여러 가지 유용한 유틸리티 모음.

  • 전처리기(Preprocessor) :
    #include - 무언가를 포함.

  • 주석(Comment) :
    프로그래머끼리 정보를 남길 수 있는 도구.
    우리가 작성하는 프로그램에는 아무 영향을 끼치지 않는다.

  • main 함수 :
    모든 프로그램의 시작점(Entrypoint) main.
    main 함수는 딱 하나만 존재.

  • 구문(Statement) :
    컴퓨터에게 명령어를 내리는 것.
    구문은 세미콜론(;)으로 구분한다.

  • 반환문 return

빌드

  • 빌드(Build) :
    코드를 바탕으로 프로그램을 만드는 과정.

  • 전처리(Preprocessing) :
    컴파일 이전에 일어나는 일들을 말한다.

  • 컴파일(Compile, Compilation) :
    우리가 작성한 코드를 어셈블리어로 변환하는 과정을 말한다.

  • 어셈블(Assemble) :
    어셈블리어를 CPU가 이해할 수 있는 기계어로 변환하는 과정을 말한다. 어셈블 이후에는 목적 파일(Object File)이 생성된다.

  • 링크(Link, Linking) :
    각 목적 파일을 연결해 하나로 묶어 실행 파일(Executable File)로 만드는 과정이다.

  • 프로그래밍 언어와 빌드 과정
    https://st-lab.tistory.com/176?category=872072

오류에 대한 이해

  • 컴파일 오류(Compile Error) :
    가장 찾기 쉬운 오류로 문법 오류가 발생한 것이다.

  • 링크 오류(Link Error) :
    링크 과정에서 발생한 오류,
    어떤 이름에 대한 충분한 정보가 없을 때 발생한다.

  • 런타임 오류(Runtime Error) :
    실행 시간에 발생한 오류로 버그가 발생한 것을 의미한다.

객체

  • 메모리를 다루기 위해 사용하는 것.

  • 타입(Type) :
    데이터를 저장하기 위해 메모리를 얼마나 사용할 것인지,
    그리고 어떤 데이터인지 지정하는 것.

  • 이름 :
    어떤 데이터인지 잘 나타내도록 명명해야 한다.
    이를 위해 코딩 컨벤션(Coding Convention)이라는 것이 있다.

    • 명명 규칙

      1. 키워드(Keyword)를 쓸 수 없다.

        1. 키워드 :
          프로그래밍 언어에서 특수한 의미를 가지는 이름, 단어.
      2. 숫자로 시작할 수 없다.

      3. 대소문자를 구별한다.

제어문

  • 프로그램의 실행 흐름변화를 줄 수 있는 구문.

  • 분기문 :
    실행 흐름에 분기를 만들어주는 구문.

    • if

    • switch

    • 진리값(Truth Value) :
      비트가 모두 0이면 거짓, 아니면 참

  • 반복문 :
    반복하는 구문

    • for :
      반복 횟수가 정해져 있을 때

    • while :
      반복 횟수가 정해져 있지 않을 때

    • do-while :
      조건을 나중에 평가해야 할 때

배열

  • 똑같은 성질을 가진 다수의 데이터를 다루기 위한 것

  • 다차원 배열 :
    메모리를 논리적으로 구분하여 사용할 수 있다.

함수

  • 일련의 과정에 이름을 붙인 것.

  • 함수 쓰는가? ⇒ 모듈화(Modulation)

    • 모듈(Module) :
      프로그램을 기능별로 분할한 논리적인 일부분 ⇒ 절차 중 한 단계

    • 프로그램을 여러 개의 모듈로 나누는 것을 모듈화라고 한다.

  • 모듈화 필요한가?

    1. 모듈을 재사용할 수 있다.
      즉, 코드의 중복을 줄일 수 있다.

    2. 관리 단위를 줄일 수 있다.
      즉, 유지보수가 편해진다.

  • 범위(Scope) :
    객체가 유효한 영역

    • 블록 범위 :
      객체가 만들어진 순간부터 블록이 끝날 때까지

    • 파일 범위 :
      객체가 만들어진 순간부터 프로그램 끝까지

  • 함수로 모듈화를 진행하면서 다른 함수의 객체에 접근해야 하는데, 접근할 수가 없음.

  • 간접 참조 : 어떤 객체를 경유해서 원하는 객체에 접근하는 것

    • 포인터

    • 레퍼런스

    • 부수적 효과 :
      함수에 인자를 전달할 때 크기가 큰 객체가 있다면
      간접 참조를 통해서 비용을 절감할 수 있다.
      ⇒ call by reference

      • 직접 참조를 통한 인자 전달
        ⇒ call by value

        • 비용 ⇒ 실행 시간, 메모리 공간

        • 전달되는 값은 스택에 복사하여 저장, 매개변수를 초기화함.

레퍼런스에 sizeof를 사용하면, 레퍼런스가 가리키는 타입의 크기가 나온다.
⇒ 이는 sizeof 함수의 동작 방식 때문.
레퍼런스의 크기 (주소값)은 8바이트가 맞다. (x64기준)
https://en.cppreference.com/w/cpp/language/sizeof

  • 기호 상수 :
    상수에 이름을 붙인 것. 다시 말해 이름이 있는 상수

    • 기호 상수를 쓰는 이유

      1. 가독성

      2. 재사용

    • const

    • #define

    • 열거형 enum

사용자 정의 타입

  • 클래스

    • 클래스는 사용자 정의 타입으로 아래와 같은 멤버(Member)를 가질 수 있다.
      멤버는 클래스의 구성 요소를 의미한다.

    • 데이터와 기능을 정의할 수 있다.

      • 데이터 멤버

        • 데이터를 저장한다.
          다시 말해 객체다.
        • 필드(Field)라고도 한다.
      • 멤버 함수

        • 타입의 기능 부분이다.
        • 메소드(Method)라고도 한다.
      • 내부 타입(Nested Type)

        • 클래스 안에 다른 클래스 / 열거형 / 타입 별칭을 지정할 수 있다.
      • 멤버 템플릿

        • 템플릿을 작성할 수 있다.
    • 객체가 좀 더 많은 일을 할 수 있게 된다.

  • 템플릿

    • 타입을 인자로 전달할 수 있다.

    • 타입에 관계 없이 일반적인 설계를 할 수 있다.

  • 표준 라이브러리

    • 입출력 라이브러리

      • 파일 입출력 : 파일을 만들거나 삭제하거나 조작할 수 있다.

        • 표준파일 입출력 : 콘솔 입출력
      • 문자열 입출력

    • 문자열 라이브러리

    • 알고리즘 라이브러리

      • 랜덤
    • 시간 라이브러리

    • 컨테이너 / 컬렉션 라이브러리 : 자료구조

    • 수학 라이브러리

0개의 댓글