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 | 논리형 | 1 | true , 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
->var
에2
가 할당됨(implicit conversion) - literals
2, 4.3, 'A', "Hello"
->const
로 처리(프로그램 내 값의 변화 불가능)
- type mismatches
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
- Comments
//
해당 기호 뒤의 내용들은 주석처리/* */
해당 기호 사이의 내용들은 주석처리
- Identifier naming
- 사전 정의된 Indentifier의 그룹
using namespace std
표준 라이브러리에서 제공하는 기능(cout
,cin
,string
등)을 포함
해당 포스트는 서울대학교 전기정보공학부 정교민 교수님의 프로그래밍방법론 25-1학기 강의를 정리한 내용입니다.
This post is licensed under CC BY 4.0 by the author.