Post

C & C++ 기초 개념 정리(1)

C & C++ 기초 개념 정리(1)

프로그래밍 패러다임

프로그래밍 언어는 크게 저수준(Low-level) 언어고수준(High-level) 언어로 나뉨

Low-level vs. High-level Language

  • 저수준 언어: 기계어(Machine Code), 어셈블리어(Assembly)
  • 고수준 언어: C, C++, Java, Python 등

프로그래밍 스타일

  • 절차형 프로그래밍(Procedural Programming): 함수, 루틴 중심 (e.g. C, Fortran)
  • 객체 지향 프로그래밍(Object-Oriented Programming, OOP): 객체와 클래스를 활용 (e.g. C++, Java)
  • 함수형 프로그래밍(Functional Programming): 수학적 함수 개념 적용 (e.g. Lisp, Haskell)
  • 논리 프로그래밍(Logic Programming): 규칙과 사실 기반 (e.g. Prolog)

C++에서 OOP를 사용하는 이유

  • C++은 더 나은 C: 기존 C 언어의 성능을 유지하면서 객체 지향 개념 추가
  • 데이터 추상화, OOP, 제너릭 프로그래밍 지원
    제너릭 프로그래밍(Generic Programming): 데이터 타입에 의존하지 않고 재사용 가능한 코드를 작성하는 프로그래밍 기법
  • 광범위한 활용: 시스템 프로그래밍, 게임 개발, 임베디드 시스템 등

C++ 기초 문법

Identifier and Variable

  • 식별자(Identifier): 변수, 함수, 클래스 등의 이름
    • 예약어(Keyword)는 변수 이름으로 사용 불가
    • C++는 대소문자를 구별함
  • 변수(Variable)
    • 프로그램을 위한 데이터를 저장할 메모리 장소
    • 변수가 사용되기 전 반드시 선언되어야함

Data Type

타입종류메모리(byte)표현 범위
short정수형2$-2^{15} \sim 2^{15} -1$
int정수형4$-2^{31} \sim 2^{31} -1$
long정수형4$-2^{31} \sim 2^{31} -1$
float실수형4대략 $10^{-38} \sim 10^{38}$
double실수형8대략 $10^{-308} \sim 10^{308}$
long double실수형10대략 $10^{-4932} \sim 10^{4932}$
char문자형1모든 ASCII 문자
bool논리형1true, false

Data Assignment

1
2
3
4
int myValue = 0; // 변수 선언과 초기화
int a, b;
a = 5; // 실행 중 데이터 할당
b = a * 2;
  • 선언과 동시에 값을 초기화할 수 있다.
  • 값을 초기화해주지 않으면 Undefined 상태로 남아있게 된다.
  • 실행 중 데이터를 할당해줄 수 있으며, 우항의 값이 좌항에 할당된다. 따라서 좌항의 값이 변수, 우항의 값은 표현이어야한다.
1
2
3
4
5
6
count += 2; // count = count + 2;
total -= discount; // total = total - discount;
bonus *= 2; // bonus = bonus * 2;
time /= rushFactor; // time = time / rushFactor;
chage %= 100; // change = change % 100;
amount *= cnt1 + cnt2; // amount = amount * (cnt1 + cnt2);

위와 같이 연산과 동시에 이뤄지는 데이터 할당을 짧게 표현할 수 있다.

  • 데이터 할당의 호환성
    • type mismatches
      어떤 값을 다른 형태의 타입 변수에 담을 수 없음
      e.g. int var = 1.9 -> var2가 할당됨(implicit conversion)
    • literals
      2, 4.3, 'A', "Hello" -> const로 처리(프로그램 내 값의 변화 불가능)

Escape Sequence

표현할 수 없는 기능, 문자 등을 표현해주는 시퀀스

시퀀스기능
\n커서 위치 줄바꿈
\r커서 위치를 현재 라인의 앞으로
\t커서 위치를 수평 탭의 다음 위치로
\a경고음
\\\ 문자 사용
\'’ 문자 사용
\"” 문자 사용
\v커서 위치를 수직 탭의 다음 위치로
\b커서 위치를 한 스페이스 전으로(Backspace)
\f커서 위치를 다음 페이지 앞으로

Arithmetic Precision

  • 계산의 정밀도(Precision)
    • 계산의 정밀도는 자료형마다 다르다
    • 서로 다른 자료형끼리 연산이 되면 가장 높은 정밀도의 데이터타입을 따른다.
    • 계산은 차례차례 순서를 따른다
1
2
3
4
5
6
7
8
17 / 5; // 3
17.0 / 5; //3.4

int var1 = 1;
int var2 = 2;
var1 / var2; // 0

1/2/3.0/4 // 1/2 == 0 -> 0/3.0 == 0.0 -> 0.0/4 == 0.0 

Type Casting

  • Implicit Conversion: 컴파일러가 자동 변환
  • Explicit Conversion: (타입)값 형식으로 변환
    1
    2
    3
    
    int num = 10;
    double result1 = (double)num / 3; // Explicit Conversion
    double result2 = num / 3.0; // Implicit Conversion
    

    Shorthand Operators

  • Post-Increment
    var++: 현재 변수에 담긴 값을 사용하고, 그 다음 변수의 값을 증가시킴
  • Pre-Increment
    ++var: 현재 변수에 담긴 값을 증가시키고, 그 값을 사용
    1
    2
    3
    4
    5
    
    int a = 1;
    int b = 2;
    int c = 3;
    cout << (a++) * b << endl; // 2
    cout << (++a) * c << endl; // 9
    
  • Decrement 연산자(--) 역시 마찬가지

    Console Input/Output

  • C++ 라이브러리 <iostream>에 정의된 I/O 객체
    1
    2
    
    #include <iostream>
    using namespace std; // or using std::cin; ...
    
  • cout
    • 출력 개체
    • 출력할 수 있는것: variables, constants, literals, expressions cout << var << "Hello";
  • 줄바꿈
    • \n을 통해 출력의 줄을 바꿀 수 있다.
      cout << "Hello\n";
    • 혹은 endl 객체 사용
      cout << "Hello" << endl;
  • cin
    • 입력 개체
    • 오직 변수만이 이 객체로 입력을 받을 수 있음 cin >> num;

      Programming Style

  • Comments
    • //
      해당 기호 뒤의 내용들은 주석처리
    • /* */
      해당 기호 사이의 내용들은 주석처리
  • Identifier naming
    • 알파벳 대소문자 혹은 underscore(_)로 시작해야함
    • const에 대해서 모두 대문자로 하는 것이 관행
    • 의미있는 이름 쓰기

      Namespaces

  • 사전 정의된 Indentifier의 그룹
  • using namespace std
    표준 라이브러리에서 제공하는 기능(cout, cin, string 등)을 포함

해당 포스트는 서울대학교 전기정보공학부 정교민 교수님의 프로그래밍방법론 25-1학기 강의를 정리한 내용입니다.

This post is licensed under CC BY 4.0 by the author.