2. ์ฐ์ฐ์, ์ ์ฒ๋ฆฌ ๊ตฌ๋ฌธ + ์บ๋ฆญํฐ ์ํ ์ค์
๐ฆ C++ ์ฐ์ฐ์ ์ ๋ฆฌ ํ
์ฐ์ฐ์ ์ข ๋ฅ | ์ฐ์ฐ์ | ์ค๋ช | ์์ |
์ฐ์ ์ฐ์ฐ์ | + | ๋ง์ | a + b |
- | ๋บ์ | a - b | |
* | ๊ณฑ์ | a * b | |
/ | ๋๋์ | a / b | |
% | ๋๋จธ์ง | a % b | |
๋์ ์ฐ์ฐ์ | = | ๊ฐ ํ ๋น | a = b |
+= | ๋ง์ ํ ํ ๋น | a += b // a = a + b | |
-= | ๋บ์ ํ ํ ๋น | a -= b // a = a - b | |
*= | ๊ณฑ์ ํ ํ ๋น | a *= b // a = a * b | |
/= | ๋๋์ ํ ํ ๋น | a /= b // a = a / b | |
%= | ๋๋จธ์ง ํ ํ ๋น | a %= b // a = a % b | |
์ฆ๊ฐ ์ฐ์ฐ์ | ++ | 1 ์ฆ๊ฐ | a++ ๋๋ ++a |
-- | 1 ๊ฐ์ | a-- ๋๋ --a | |
๋น๊ต ์ฐ์ฐ์ | == | ๊ฐ์ | a == b |
!= | ๋ค๋ฆ | a != b | |
< | ์์ | a < b | |
> | ํผ | a > b | |
<= | ์๊ฑฐ๋ ๊ฐ์ | a <= b | |
>= | ํฌ๊ฑฐ๋ ๊ฐ์ | a >= b | |
๋ ผ๋ฆฌ ์ฐ์ฐ์ | && | ๋ ผ๋ฆฌ AND | a && b |
|| | ๋ ผ๋ฆฌ OR | a || b | |
! | ๋ ผ๋ฆฌ NOT | !a | |
๋นํธ ์ฐ์ฐ์ | & | ๋นํธ AND | a & b |
| | ๋นํธ OR | a | b | |
^ | ๋นํธ XOR | a ^ b | |
~ | ๋นํธ NOT | ~a | |
<< | ๋นํธ ์ผ์ชฝ ์ด๋ | a << b | |
>> | ๋นํธ ์ค๋ฅธ์ชฝ ์ด๋ | a >> b | |
์ผํญ ์ฐ์ฐ์ | ?: | ์กฐ๊ฑด๋ฌธ | x = (a > b) ? a : b; |
๋ฉค๋ฒ ์ ๊ทผ ์ฐ์ฐ์ | . | ๊ฐ์ฒด ๋ฉค๋ฒ ์ ๊ทผ | obj.var |
-> | ํฌ์ธํฐ ๋ฉค๋ฒ ์ ๊ทผ | ptr->var | |
ํฌ์ธํฐ ์ฐ์ฐ์ | * | ํฌ์ธํฐ ์ญ์ฐธ์กฐ | *ptr |
& | ์ฃผ์ ์ฐ์ฐ์ | &var | |
ํ ๋ณํ ์ฐ์ฐ์ | (type) | C ์คํ์ผ ํ ๋ณํ | (int)a |
static_cast<> | ์ ์ ํ ๋ณํ | static_cast<int>(a) | |
dynamic_cast<> | ๋์ ํ ๋ณํ | dynamic_cast<Derived*>(basePtr) | |
const_cast<> | const ์์ฑ ์ ๊ฑฐ | const_cast<char*>(str) | |
reinterpret_cast<> | ํฌ์ธํฐ ๋ณํ | reinterpret_cast<int*>(ptr) | |
๊ธฐํ ์ฐ์ฐ์ | sizeof | ํฌ๊ธฐ ๊ณ์ฐ | sizeof(a) |
typeid | ํ์ ์ ๋ณด ๋ฐํ | typeid(a).name() | |
, | ์ผํ ์ฐ์ฐ์ | a = (b, c) | |
new | ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น | int* p = new int; | |
delete | ๋์ ๋ฉ๋ชจ๋ฆฌ ํด์ | delete p; | |
new[] | ๋ฐฐ์ด ๋์ ํ ๋น | int* arr = new int[10]; | |
delete[] | ๋ฐฐ์ด ๋์ ํด์ | delete[] arr; |
๐ฆ C++์ ์ฐ์ฐ์ ์ฐ์ ์์
์ฐ์ ์์ | ์ฐ์ฐ์ | ์ค๋ช | ๊ฒฐํฉ ๋ฐฉํฅ |
1 | :: | ๋ฒ์ ์ง์ ์ฐ์ฐ์ | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
2 | () [] -> . ++ -- | ํจ์ ํธ์ถ, ๋ฐฐ์ด, ๋ฉค๋ฒ ์ ๊ทผ, ํ์ ์ฆ๊ฐ/๊ฐ์ | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
3 | ++ -- + - ! ~ * & sizeof new delete typeid | ์ ์ ์ฐ์ฐ์, ๋ถํธ, ํฌ๊ธฐ ์ฐ์ฐ ๋ฑ | ์ค๋ฅธ์ชฝ → ์ผ์ชฝ |
4 | .* ->* | ๋ฉค๋ฒ ํฌ์ธํฐ ์ฐ์ฐ์ | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
5 | * / % | ๊ณฑ์ , ๋๋์ , ๋๋จธ์ง | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
6 | + - | ๋ง์ , ๋บ์ | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
7 | << >> | ๋นํธ ์ํํธ | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
8 | < <= > >= | ๋น๊ต ์ฐ์ฐ์ | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
9 | == != | ๋๋ฑ์ฑ ๋น๊ต | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
10 | & | ๋นํธ AND | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
11 | ^ | ๋นํธ XOR | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
12 | | | ๋นํธOR | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
13 | && | ๋ ผ๋ฆฌ AND | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
14 | || | ๋ ผ๋ฆฌOR | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
15 | ?: | ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์ | ์ค๋ฅธ์ชฝ → ์ผ์ชฝ |
16 | `= += -= *= /= %= &= | = ^= <<= >>=` | ๋์ ์ฐ์ฐ์ |
17 | throw | ์์ธ ์ฒ๋ฆฌ | ์ค๋ฅธ์ชฝ → ์ผ์ชฝ |
18 | , | ์ผํ ์ฐ์ฐ์ | ์ผ์ชฝ → ์ค๋ฅธ์ชฝ |
๐ฆ ์ธ๋ฏธ์ฝ๋ก (;)์ ์ญํ
๐น enter๋ ์ค์ํ์ง ์์. ์ธ๋ฏธ์ฝ๋ก (;)์ด ๊ตฌ๋ฌธ์ ๋์ ์๋ฆฌ๋ ์ญํ ์ ํจ.
๐น ์ค ๋ฐ๊ฟ ์์ด ์ฌ๋ฌ ๊ตฌ๋ฌธ์ ํ ์ค์ ์จ๋ ;๋ก ๊ตฌ๋ถ๋จ.
int data = 10 + 10; // 20
data + 20; // ์ ์ฅ๋์ง ์๊ณ ๊ฐ๋ง ๊ณ์ฐ๋จ
data = data + 20; // 40 (data += 20 ๊ณผ ๋์ผ)
๐ฆ ๋๋จธ์ง ์ฐ์ฐ์(%)
๐น % ์ฐ์ฐ์๋ ์ ์ํ ํผ์ฐ์ฐ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ.
๐น ์ค์ํ(double, float)์๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ปดํ์ผ ์๋ฌ ๋ฐ์.
int data = 10. / 3.; // 10 / 3์ผ๋ก ๊ณ์ฐ๋จ
// ๊ฒฝ๊ณ ๋ฐ์: ‘double’์์ ‘int’๋ก ๋ณํํ๋ฉฐ ๋ฐ์ดํฐ ์์ค ๊ฐ๋ฅ
int data = (int)(10. / 3.); // ๋ช
์์ ํ ๋ณํ → ๊ฒฝ๊ณ ์์
๐ฆ ์ฆ๊ฐ ์ฐ์ฐ์ (++, --)
๐น ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด ์ ์(++data) ๋ฐฉ์ ์ฌ์ฉ ์ถ์ฒ.
๐น ์ค์ํ์์๋ 1์ฉ ์ฆ๊ฐ/๊ฐ์.
๐น ํฌ์ธํฐ ์ฐ์ฐ์์๋ 1์นธ(๋จ๊ณ)์ฉ ์ด๋ (+๋ ์ผ์ชฝ, -๋ ์ค๋ฅธ์ชฝ).
์ ์ | ํ์ |
++data | data++ |
๊ฐ์ฅ ๋จผ์ ์ ์ฉ | ๊ฐ์ฅ ๋ง์ง๋ง์ ์ ์ฉ (๋์ ์ฐ์ฐ์๋ณด๋ค ๋์ค) |
๐ฆ bool ์๋ฃํ
๐น true(1) / false(0) ๊ฐ์ ๊ฐ์ง๋ฉฐ, ์๋ฐํ ๋ฐ์ง๋ฉด ์ ์ ํ์
.
๐น bool ๋ณ์์ 0์ด ์๋ ์ซ์๋ฅผ ๋์
ํ๋ฉด ์๋์ผ๋ก 1(true)๋ก ๋ณํ.
๐น 1byte ํฌ๊ธฐ์ด์ง๋ง 0๊ณผ 1๋ง ์ ์ฅ ๊ฐ๋ฅ.
bool IsTrue = 100; // 1(true) ์ ์ฅ๋จ
IsTrue = !IsTrue; // 0(false) ์ ์ฅ๋จ
๐ฆ ์ ์ด๋ฌธ
๐น if, else, switch case
๐น switch case์์๋ ๋ฐ๋์ break๋ฅผ ์ฌ์ฉํด์ผ ๋ฉ์ถค.
๐น ์ปดํ์ผ๋ฌ ์ต์ ํ ์ต์
์ ํ์ฑํํ๋ฉด ์คํ๋ ์ ์๋ ๊ตฌ๋ฌธ์ ์ ๊ฑฐ๋จ.
๐น Debug ๋ชจ๋์์๋ ์ต์ ํ๊ฐ ์ ์ฉ๋์ง ์์.
if (false) {
data++; // ์ต์ ํ ์ต์
ํ์ฑํ ์, ์ด ๊ตฌ๋ฌธ์ ์ปดํ์ผ๋ฌ์์ ์ ๊ฑฐ๋จ
}
๐ฆ ์ผํญ ์ฐ์ฐ์ (? :)
๐น if ๋ฌธ์ ๊ฐ๋จํ๊ฒ ํํ ๊ฐ๋ฅ.
int max = (a > b) ? a : b; // a๊ฐ ํฌ๋ฉด a, ๊ทธ๋ ์ง ์์ผ๋ฉด b๋ฅผ ์ ์ฅ
๐ฆ ๋นํธ ์ฐ์ฐ์
๐น ๋นํธ ์ฐ์ฐ์ ๋ง์คํฌ ์ฒ๋ฆฌ, ์ต์ ํ๋ ๋ฐ์ดํฐ ์ ์ฅ, ์ํธํ, ๊ทธ๋ํฝ ํ๋ก๊ทธ๋๋ฐ ๋ฑ์์ ํ์ฉ๋จ. ๐
์ฐ์ฐ์ | ์ค๋ช | ์์ |
& | ๋นํธ AND | a & b |
| | ๋นํธ OR | a|b |
^ | ๋นํธ XOR | a ^ b |
~ | ๋นํธ NOT | ~a |
<< | ๋นํธ ์ผ์ชฝ ์ด๋ | a << b |
>> | ๋นํธ ์ค๋ฅธ์ชฝ ์ด๋ | a >> b |
๐ฆ C++์ ๋นํธ ์ํํธ (<<, >>)
๐น << : ์ผ์ชฝ ์ด๋ (๊ฐ์ด 2^n ๋ฐฐ ์ฆ๊ฐ)
๐น >> : ์ค๋ฅธ์ชฝ ์ด๋ (๊ฐ์ด 2^n ๋ฐฐ ๊ฐ์, ๋ชซ๋ง ๋จ๊ณ ๋๋จธ์ง๋ ๋ฒ๋ ค์ง)
unsigned char byte = 10;
byte <<= 3; // 10 * 2^3 = 80 (2์ง์๋ก ๋ณํ ์ ์ค๋ฅธ์ชฝ์ 0์ด 3๊ฐ ์ถ๊ฐ๋จ)
byte >>= 3; // ๋ค์ 3์นธ ์ค๋ฅธ์ชฝ ์ด๋ํ์ฌ ์๋ ๊ฐ์ผ๋ก ๋ณต๊ตฌ๋จ
int ๋ณ์ = a;
๋ณ์ <<= m; // a * 2^m
๋ณ์ >>= m; // a / 2^m (๋ชซ๋ง ๋จ์)
๐ฆ ์ฃผ์ ๋นํธ ์ฐ์ฐ์ ํ์ฉ ์์
1๏ธโฃ ๋นํธ AND (&)
๐น ํน์ ๋นํธ๊ฐ ์ผ์ ธ ์๋์ง ํ์ธํ๊ฑฐ๋, ํน์ ๋นํธ ๋๊ธฐ
๐น ๋ ๋นํธ๊ฐ ๋ชจ๋ 1์ผ ๋๋ง 1์ด ๋จ
int a = 5; // 0101
int b = 3; // 0011
int c = a & b; // 0001 (1)
// ํน์ ๋นํธ๊ฐ 1์ธ์ง ํ์ธ
if (a & (1 << 2)) { // 2๋ฒ์งธ ๋นํธ๊ฐ ์ผ์ ธ ์๋์ง ํ์ธ
std::cout << "2๋ฒ์งธ ๋นํธ๊ฐ 1์ด๋ค." << std::endl;
}
// ํน์ ๋นํธ ๋๊ธฐ
a = a & ~(1 << 2); // 2๋ฒ์งธ ๋นํธ ๋๊ธฐ
2๏ธโฃ ๋นํธ OR (|)
๐น ํน์ ๋นํธ๋ฅผ ์ผ๊ฑฐ๋ ๊ฐ ํฉ์น ๋ ์ฌ์ฉ
๐น ๋ ๋นํธ ์ค ํ๋๋ผ๋ 1์ด๋ฉด 1์ด ๋จ
int a = 5; // 0101
int b = 3; // 0011
int c = a | b; // 0111 (7)
// ํน์ ๋นํธ ์ผ๊ธฐ
a = a | (1 << 2); // 2๋ฒ์งธ ๋นํธ ์ผ๊ธฐ
3๏ธโฃ ๋นํธ XOR (^)
๐น ํน์ ๋นํธ๋ฅผ ํ ๊ธ(๋ฐ์ )
๐น ๋ ๋นํธ๊ฐ ๋ค๋ฅผ ๋ 1์ด ๋จ
int a = 5; // 0101
int b = 3; // 0011
int c = a ^ b; // 0110 (6)
// ํน์ ๋นํธ ํ ๊ธ
a = a ^ (1 << 2); // 2๋ฒ์งธ ๋นํธ ๋ฐ์
// XOR์ ์ด์ฉํ ๋ ์ ์ค์ (์์ ๋ณ์ ์์ด ๊ตํ)
int x = 5, y = 7;
x = x ^ y;
y = x ^ y;
x = x ^ y;
4๏ธโฃ ๋นํธ NOT (~)
๐น ๋ชจ๋ ๋นํธ๋ฅผ ๋ฐ์ (1 → 0, 0 → 1)
int a = 5; // 0000 0101
int c = ~a; // 1111 1010 (2์ ๋ณด์ ํํ์ผ๋ก -6)
// ํน์ ๋นํธ ๋ง์คํฌ ๋ง๋ค๊ธฐ
int mask = ~(1 << 3); // 3๋ฒ์งธ ๋นํธ๋ง 0์ผ๋ก ๋ง๋๋ ๋ง์คํฌ
// ์์ ๊ฐ ๊ณ์ฐ (2์ ๋ณด์)
int negativeA = ~a + 1; // a์ ์์ ๊ฐ
๐ฆ ์ ์ฒ๋ฆฌ ๊ตฌ๋ฌธ (Preprocessing)
์ ์ฒ๋ฆฌ ์ง์์ด | ์ค๋ช | ์์ |
#define | ๋งคํฌ๋ก ์ ์ | #define PI 3.14 |
#undef | ๋งคํฌ๋ก ํด์ | #undef PI |
#include | ํค๋ ํ์ผ ํฌํจ | #include <iostream> |
#ifdef | ํน์ ๋งคํฌ๋ก๊ฐ ์ ์๋์์ ๋ ์ฝ๋ ์คํ | #ifdef DEBUG |
#ifndef | ํน์ ๋งคํฌ๋ก๊ฐ ์ ์๋์ง ์์์ ๋ ์ฝ๋ ์คํ | #ifndef DEBUG |
#if | ์กฐ๊ฑด๋ถ ์ปดํ์ผ | #if PI > 3 |
#else | #if, #ifdef, #ifndef๊ฐ ๊ฑฐ์ง์ผ ๋ ์คํ | #else |
#elif | #else if์ ์ ์ฌ, ์กฐ๊ฑด๋ถ ์ปดํ์ผ | #elif VERSION == 2 |
#endif | ์กฐ๊ฑด๋ถ ์ปดํ์ผ ๋ธ๋ก ์ข ๋ฃ | #endif |
#pragma | ์ปดํ์ผ๋ฌ์ ํน์ ์ง์ ์ ๋ฌ | #pragma once |
#error | ๊ฐ์ ์ปดํ์ผ ์ค๋ฅ ๋ฐ์ | #error "Unsupported compiler" |
#warning | ๊ฒฝ๊ณ ๋ฉ์์ง ์ถ๋ ฅ (GCC, Clang ์ง์) | #warning "Deprecated feature" |
## | ํ ํฐ ๊ฒฐํฉ ์ฐ์ฐ์ (Token Pasting) | #define CONCAT(a, b) a##b |
# | ๋ฌธ์์ดํ ์ฐ์ฐ์ (Stringizing) | #define STR(x) #x |
#define์ ํน์ ๊ฐ์ ์นํํ๋ค.
#define ์ผ์น๊ฐ ์นํ๊ฐ
์ฝ๋์ ์ผ์น๊ฐ์ด ์์ผ๋ฉด ๋ชจ๋ ์นํ๊ฐ์ ๋ฃ์๊ฑธ๋ก ์ปดํ์ผ ๋จ
#define๊ตฌ๋ฌธ ์ฌ์ฉํ๋ ์ด์
1. ๊ฐ๋ ์ฑ
์์
์บ๋ฆญํฐ์ ํน์ ์ํ๋ฅผ ์์๋ก ์ง์ ๋ฐ ์ฌ์ฉ
๋ฐฐ๊ณ ํ 1
์ํ 27
-> ์ฝ๋์ ‘๋ฐฐ๊ณ ํ’์ด ์์ผ๋ฉด 1๋ก ์ปดํ์ผ ๋๋๋ก ํจ.
2. ์ฝ๋ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง
#include <stdio.h>
// ์ํ ์ ์ (๋นํธ ํ๋๊ทธ ๋ฐฉ์)
#define HUNGRY 0x01 // ๋ฐฐ๊ณ ํ (0000 0001)
#define FULL 0x00 // ๋ฐฐ๋ถ๋ฆ (๋ช
ํํ ์ํ ์์)
#define THIRSTY 0x02 // ๋ชฉ๋ง๋ฆ (0000 0010)
#define HYDRATED 0x00 // ์๋ถ ์ถฉ๋ถ (๋ช
ํํ ์ํ ์์)
#define POISONED 0x04 // ์ค๋
๋จ (0000 0100)
#define HEALTHY 0x00 // ๊ฑด๊ฐํจ (๋ช
ํํ ์ํ ์์)
#define IN_COMBAT 0x08 // ์ ํฌ ์ค (0000 1000)
#define STEALTH 0x10 // ์์ ์ํ (0001 0000)
#define EXHAUSTED 0x20 // ํผ๋กํจ (0010 0000)
#define ENERGIZED 0x40 // ํ๋ ฅ ์ถฉ๋ง (0100 0000)
#define BLEEDING 0x80 // ์ถํ ์ํ (1000 0000)
#define INFECTED 0x100 // ๊ฐ์ผ๋จ (0001 0000 0000)
int main()
{
unsigned int state = 0; // ์ด๊ธฐ ์ํ: ์๋ฌด ์ํ๋ ์์
// 1. ์ํ ์ถ๊ฐ (| ์ฐ์ฐ์ ์ฌ์ฉ)
state |= HUNGRY; // ๋ฐฐ๊ณ ํ ์ถ๊ฐ
state |= THIRSTY; // ๋ชฉ๋ง๋ฆ ์ถ๊ฐ
printf("ํ์ฌ ์ํ: %X\n", state);
// 2. ์ํ ์ ๊ฑฐ (& ์ฐ์ฐ์ ์ฌ์ฉ)
state &= ~HUNGRY; // ๋ฐฐ๊ณ ํ ์ ๊ฑฐ
printf("๋ฐฐ๊ณ ํ ์ ๊ฑฐ ํ ์ํ: %X\n", state);
// 3. ํน์ ์ํ ํ์ธ (& ์ฐ์ฐ์ ์ฌ์ฉ)
if (state & THIRSTY) {
printf("๋ชฉ๋ง๋ฅธ ์ํ์
๋๋ค.\n");
}
// 4. ์ฌ๋ฌ ์ํ๊ฐ ์กด์ฌํ๋์ง ํ์ธ (& ์ฐ์ฐ์ ์ฌ์ฉ)
if ((state & (THIRSTY | POISONED)) == (THIRSTY | POISONED)) {
printf("๋ชฉ๋ง๋ฅด๊ณ ์ค๋
๋ ์ํ์
๋๋ค.\n");
}
else {
printf("๋ชฉ๋ง๋ฅด๊ฑฐ๋ ์ค๋
๋์ง ์์ ์ํ์
๋๋ค.\n");
}
// 5. ์ํ๊ฐ ์กด์ฌํ์ง ์๋์ง ํ์ธ (!= ์ฐ์ฐ์ ์ฌ์ฉ)
if (!(state & POISONED)) {
printf("์ค๋
๋์ง ์์์ต๋๋ค.\n");
}
// 6. ์ํ๋ฅผ ํ ๊ธํ๊ธฐ (^ ์ฐ์ฐ์ ์ฌ์ฉ)
state ^= IN_COMBAT; // ์ ํฌ ์ํ ํ ๊ธ (์ผ๊ฑฐ๋ ๋๊ธฐ)
printf("์ ํฌ ์ํ ํ ๊ธ ํ: %X\n", state);
// 7. ์ฌ๋ฌ ์ํ ์ค์ (| ์ฐ์ฐ์ ์ฌ์ฉ)
state |= (POISONED | BLEEDING); // ์ค๋
+ ์ถํ ์ถ๊ฐ
printf("์ค๋
๋ฐ ์ถํ ์ถ๊ฐ ํ ์ํ: %X\n", state);
return 0;
}
์บ๋ฆญํฐ์ ์ํ๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉํ ์ ์๋ ๋จ์ด ์์
1. ๊ธฐ๋ณธ์ ์ธ ์ ์ฒด ์ํ
๊ฑด๊ฐ(HEALTHY) / ์ํ(INJURED, SICK)
๋ฐฐ๊ณ ํ(HUNGRY) / ๋ฐฐ๋ถ๋ฆ(FULL)
๋ชฉ๋ง๋ฆ(THIRSTY) / ์๋ถ์ถฉ๋ถ(HYDRATED)
์กธ๋ฆผ(SLEEPY, DROWSY) / ๊ฐ์ฑ(ALERT, AWAKE)
ํผ๋ก(FATIGUED, EXHAUSTED) / ํ๋ ฅ(VIGOROUS, ENERGETIC)
๊ธฐ์ (FAINTED, UNCONSCIOUS) / ์ ์ ์ฐจ๋ฆผ(CONSCIOUS, AWARE)
์ถํ(BLEEDING) / ์ถํ ์์(STABLE)
๊ณจ์ (BROKEN BONE) / ์ ์(NORMAL)
2. ์ ์ ์ํ
์ ์ ์ด ๋๋ ทํจ(FOCUSED, CLEAR-MINDED) / ํผ๋(CONFUSED, DISORIENTED)
๊ธฐ๋ถ ์ข์(HAPPY, CHEERFUL) / ์ฐ์ธ(DEPRESSED, SAD)
๊ณตํฌ(FEARFUL, PANICKED) / ์นจ์ฐฉ(CALM, RELAXED)
๋ถ๋ ธ(ANGRY, ENRAGED) / ํ์จ(PEACEFUL, CONTENT)
์คํธ๋ ์ค ๋ฐ์(STRESSED, ANXIOUS) / ๋ฌด๋ค๋ค(INDIFFERENT, CAREFREE)
๊ด๊ธฐ(MAD, INSANE) / ์ ์ ์ (SANE, STABLE)
์ง์ค(FOCUSED) / ์ฐ๋ง(DISTRACTED)
3. ์์กด ๋ฐ ํ๊ฒฝ ์ํฅ
๋์(HOT, OVERHEATED) / ์ถ์(COLD, FREEZING)
์ค๋ (POISONED, INTOXICATED) / ์ค๋ ์์(CLEAN, DETOXED)
๊ฐ์ผ(INFECTED) / ๋ฉด์ญ(IMMUNE, CLEAN)
๋ฐฉ์ฌ๋ฅ ์ค์ผ(RADIATED) / ๋ฐฉ์ฌ๋ฅ ์์(NOT RADIATED)
์ต์ฌ ์ค(DROWNING) / ํธํก ๊ฐ๋ฅ(BREATHING, SAFE)
ํ์ง(EXHAUSTED) / ํ๋ณต๋จ(RESTED, RECOVERED)
์ด๋ ์(DARKNESS, BLINDED) / ๋ฐ์ ์(IN LIGHT, VISIBLE)
4. ์ ํฌ ๋ฐ ํ๋ ๊ด๋ จ
์ ํฌ ์ค(IN COMBAT, ENGAGED) / ์ ํฌ ์ข ๋ฃ(OUT OF COMBAT, PEACEFUL)
์คํ ์ค ์ํ(STEALTH, HIDDEN) / ๋ฐ๊ฐ๋จ(DETECTED, VISIBLE)
๋ฌด์ฅ(DISARMED, UNARMED) / ๋ฌด๊ธฐ ์ฅ์ฐฉ(ARMED, READY)
๊ธฐ์ (STUNNED, KNOCKED OUT) / ํ๋ ๊ฐ๋ฅ(ACTIVE, ALERT)
์๋ฐ๋จ(RESTRAINED, GRAPPLED) / ์์ (FREE, MOBILE)
์ ์ง๋จ(STAGGERED, INTERRUPTED) / ํ๋ ๊ฐ๋ฅ(UNSTOPPED, UNHINDERED)
๊ธฐํ ํ์ด๋ฐ(OPPORTUNE, ADVANTAGEOUS) / ๋ถ๋ฆฌํ ์ํ(DISADVANTAGED, VULNERABLE)
5. ๊ธฐํ ์ํ
๋ฒํ(ENHANCED, BUFFED) / ๋๋ฒํ(DEBUFFED, WEAKENED)
์ถ๋ณต๋ฐ์(BLESSED) / ์ ์ฃผ๋ฐ์(CURSED)
๊ดํญํ(BERSERK, RAGING) / ๋์ (COOL-HEADED)
๋์๋ฐ์(AIDED, ASSISTED) / ๊ณ ๋ฆฝ๋จ(ISOLATED, ALONE)
์๊ฐ ๋๋ฆผ(SLOWED, SLUGGISH) / ์๊ฐ ๋น ๋ฆ(HASTED, QUICKENED)
ํ์ฉ ์์
๋นํธ๋ง์คํฌ ๋ฐฉ์์ผ๋ก ์ํ๋ฅผ ์ ์ํ ๊ฒฝ์ฐ:
#define HUNGRY 1 // 00000001
#define FULL 2 // 00000010
#define THIRSTY 4 // 00000100
#define HYDRATED 8 // 00001000
#define POISONED 16 // 00010000
#define HEALTHY 32 // 00100000
#define IN_COMBAT 64 // 01000000
#define STEALTH 128 // 10000000
๋นํธ ํ๋๊ทธ ๋ฐฉ์ ์ธ์ ์ํ ์ ์ ๋ฐฉ๋ฒ.
1. ๋นํธ ํ๋๊ทธ ๋ฐฉ์ (Bit Flags)
์ฌ๋ฌ ์ํ๋ฅผ ๋์์ ์ ์ฅํ ์ ์์ (๋นํธ ์ฐ์ฐ ํ์ฉ).
๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์๊ณ , ๋น ๋ฅธ ์ฐ์ฐ์ด ๊ฐ๋ฅ.
๋ณต์กํ ์ํ ๊ด๋ฆฌ๊ฐ ํ์ํ ๋ ์ ํฉ.
#include <stdio.h>
// ์ํ ์ ์ (๋นํธ ํ๋๊ทธ ๋ฐฉ์)
#define HUNGRY 0x01 // 0000 0001
#define THIRSTY 0x02 // 0000 0010
#define POISONED 0x04 // 0000 0100
#define IN_COMBAT 0x08 // 0000 1000
int main() {
unsigned int state = 0; // ์ด๊ธฐ ์ํ (์๋ฌด ์ํ๋ ์์)
// ์ํ ์ถ๊ฐ
state |= HUNGRY | THIRSTY;
printf("ํ์ฌ ์ํ: %X\n", state);
// ์ํ ์ ๊ฑฐ
state &= ~HUNGRY;
printf("๋ฐฐ๊ณ ํ ์ ๊ฑฐ ํ ์ํ: %X\n", state);
// ์ํ ํ์ธ
if (state & THIRSTY) {
printf("๋ชฉ๋ง๋ฅธ ์ํ์
๋๋ค.\n");
}
return 0;
}
โ ์ฌ์ฉ ์ํฉ:
๊ฒ์ ์บ๋ฆญํฐ์ ๋ค์ํ ์ํ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ๋
๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๋ฉด์ ์ฌ๋ฌ ์ํ๋ฅผ ๋์์ ๊ด๋ฆฌํ ๋
2. ์ด๊ฑฐํ ๋ฐฉ์ (Enum)
์ํ๋ฅผ ์ด๊ฑฐํ์ผ๋ก ์ ์ํ์ฌ ๊ฐ๋ ์ฑ์ด ์ข์.
๋จ์ผ ์ํ ๊ด๋ฆฌ์ ์ ํฉ (๋ณตํฉ ์ํ์๋ ์ ํฉํ์ง ์์).
#include <stdio.h>
// ์ด๊ฑฐํ์ผ๋ก ์ํ ์ ์
typedef enum {
STATE_HUNGRY,
STATE_THIRSTY,
STATE_POISONED,
STATE_IN_COMBAT
} CharacterState;
int main() {
CharacterState state = STATE_HUNGRY; // ์ด๊ธฐ ์ํ: ๋ฐฐ๊ณ ํ
// ์ํ ๋ณ๊ฒฝ
state = STATE_THIRSTY;
printf("ํ์ฌ ์ํ: %d\n", state);
// ์ํ ํ์ธ
if (state == STATE_THIRSTY) {
printf("๋ชฉ๋ง๋ฅธ ์ํ์
๋๋ค.\n");
}
return 0;
}
โ ์ฌ์ฉ ์ํฉ:
ํ ๋ฒ์ ํ๋์ ์ํ๋ง ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ
์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ ์ถ์ ๋
3. ๊ตฌ์กฐ์ฒด ๋ฐฉ์ (Struct)
์ฌ๋ฌ ์ํ ๊ฐ์ ๊ฐ๋ณ ๋ณ์๋ก ์ ์ฅํ ์ ์์.
๊ด๋ฆฌ๊ฐ ์ฌ์ฐ๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋ง์์ง ์ ์์.
#include <stdio.h>
// ๊ตฌ์กฐ์ฒด๋ก ์ํ ์ ์
typedef struct {
int isHungry;
int isThirsty;
int isPoisoned;
int isInCombat;
} Character;
int main() {
Character player = { 1, 0, 0, 1 }; // ๋ฐฐ๊ณ ํ, ์ ํฌ ์ค
// ์ํ ํ์ธ
if (player.isHungry) {
printf("๋ฐฐ๊ณ ํ ์ํ์
๋๋ค.\n");
}
// ์ํ ๋ณ๊ฒฝ
player.isHungry = 0;
printf("๋ฐฐ๊ณ ํ ์ ๊ฑฐ\n");
return 0;
}
โ ์ฌ์ฉ ์ํฉ:
์ํ๊ฐ ๋ง๊ณ , ๊ฐ ์ํ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํด์ผ ํ ๋
๊ฐ๋ณ ์ํ์ ๊ฐ์ ์กฐ์ ํด์ผ ํ ๋
4. ๋ฐฐ์ด ๋ฐฉ์ (Array/Set)
์ํ๋ฅผ ๋ฐฐ์ด ๋๋ ์งํฉ(Set) ํํ๋ก ์ ์ฅ.
ํน์ ์ํ๋ฅผ ์ฝ๊ฒ ์ถ๊ฐ/์ ๊ฑฐ ๊ฐ๋ฅ.
๊ฒ์ ์ฐ์ฐ์ด ํ์ํ๋ฏ๋ก ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆด ์ ์์.
#include <stdio.h>
#include <string.h>
#define MAX_STATES 10
const char* STATES[] = { "HUNGRY", "THIRSTY", "POISONED", "IN_COMBAT" };
// ์ํ ๋ฆฌ์คํธ ๊ด๋ฆฌ
typedef struct {
char states[MAX_STATES][20]; // ๊ฐ ์ํ ๋ฌธ์์ด์ ์ ์ฅํ ๋ฐฐ์ด
int count;
} StateList;
// ์ํ ์ถ๊ฐ
void addState(StateList* list, const char* state) {
if (list->count < MAX_STATES) {
strcpy(list->states[list->count], state);
list->count++;
}
}
// ์ํ ์ถ๋ ฅ
void printStates(StateList* list) {
printf("ํ์ฌ ์ํ: ");
for (int i = 0; i < list->count; i++) {
printf("%s ", list->states[i]);
}
printf("\n");
}
int main() {
StateList player;
memset(&player, 0, sizeof(StateList)); // ๊ตฌ์กฐ์ฒด ์ ์ฒด๋ฅผ 0์ผ๋ก ์ด๊ธฐํ
addState(&player, "HUNGRY");
addState(&player, "IN_COMBAT");
printStates(&player);
return 0;
}
โ ์ฌ์ฉ ์ํฉ:
๋์ ์ผ๋ก ๋ณํ๋ ์ํ๋ฅผ ๊ด๋ฆฌํด์ผ ํ ๋
ํน์ ์ํ๋ฅผ ์ฝ๊ฒ ์ถ๊ฐ/์ญ์ ํด์ผ ํ ๋
๐ ๋น๊ต ์์ฝ
๋ฐฉ์ | ์ฅ์ | ๋จ์ | ์ฌ์ฉ ์์ |
๋นํธ ํ๋๊ทธ | ๋น ๋ฅด๊ณ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ | ํด์์ด ์ด๋ ค์ | ๊ฒ์ ์บ๋ฆญํฐ ์ํ ๊ด๋ฆฌ |
์ด๊ฑฐํ (Enum) | ๊ฐ๋ ์ฑ์ด ์ข์ | ์ฌ๋ฌ ์ํ ๋์ ๊ด๋ฆฌ ์ด๋ ค์ | ๋จ์ผ ์ํ ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ |
๊ตฌ์กฐ์ฒด (Struct) | ๊ฐ๋ณ ๋ณ์๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ | ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ฆ๊ฐ | ์ํ๋ณ ์ธ๋ถ ์กฐ์ ํ์ํ ๋ |
๋ฐฐ์ด/์งํฉ (Array/Set) | ์ํ ์ถ๊ฐ/์ญ์ ์ ์ฐ | ๊ฒ์ ์ ์๋ ์ ํ ๊ฐ๋ฅ | ๊ฐ๋ณ์ ์ธ ์ํ ๊ด๋ฆฌ |