โ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ์ด๋ ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ๊ธฐ
๐ด C++ ์์ธ ๊ฐ์ด๋ โ
"ํ๋์จ์ด ๋ฐ๋ก ์์์ ์ด๋น ์์ต ๋ฒ์ ์ฐ์ฐ์ ์คํํ๋ ์ ๋ ์ฑ๋ฅ์ ๊ฐ์์ด์ ์ปดํจํฐ ๊ณตํ์ ๋ฟ๋ฆฌ"
๐ก 1. 30๋ ์ฐจ ์ ๋ฐฐ์ ์ฌ์ด ์ค๋ช โ
์ต์ ์ธ๊ณต์ง๋ฅ ๋ฒ์ญ๊ธฐ, ํ๋ คํ ๊ทธ๋ํฝ์ ์๋ํ๋ ๋ํ 3D ๊ฒ์, ์์จ์ฃผํ ์๋์ฐจ ์ผ์ ๋ฑ ๋จ 0.001์ด์ ๋๋ ์ด๋ ํ์ฉํ์ง ์๋ "๊ทน๋จ์ ์ค์๊ฐ ๊ณ ์ฑ๋ฅ ์ฐ์ฐ" ์ด ํ์ํ ๊ณณ์๋ ์์ธ ์์ด C++ ์ด ์ฐ์ ๋๋ค.
C++์ ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ํ๋์จ์ด ๋ถํ์ ๊ฐ๋ฐ์๊ฐ ํ ๋ ํ ๋ ์ง์ ์ง๋ฐฐํ๊ณ ํต์ ํ๋ ๋งค์ฐ ๊ฐ๋ ฅํ ์ธ์ด์ ๋๋ค. ๋ค๋ฅธ ์ธ์ด๋ค์ฒ๋ผ ๋ค์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชฐ๋ ์ฒญ์ํด์ฃผ๋ ๋น์(๊ฐ๋น์ง ์ปฌ๋ ํฐ)๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์ฐ์ฐ ๋ญ๋น๊ฐ ์ ํ ์์ต๋๋ค. ๊ทธ๋งํผ ๋ฌธ๋ฒ์ด ๋ณต์กํ๊ณ , ํฌ์ธํฐ(Pointer)๋ผ๋ ์ ๋ช ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ ์ด ๊ฐ๋ ์ ๋ฐ๋์ ๋ง์คํฐํด์ผ ํฉ๋๋ค. ์ฝ๋ฉ ์ค์๋ฅผ ํ๋ฉด ์ปดํจํฐ ์ ์ฒด๊ฐ ๋ธ๋ฃจ์คํฌ๋ฆฐ์ ๋์ฐ๊ฑฐ๋ ํ๊ธฐ๋ ๋ฑ ๊ฐํนํ ํผ๋๋ฐฑ์ด ์ค์ง๋ง, ์ปดํจํฐ ๊ณตํ์ ๋ฐ๋ฐ๋ฅ ํ๋์จ์ด๊ฐ ์๋ํ๋ ๋ฐฉ์์ ๊น์ด ์ดํดํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ฐ๋ฐ์์ ๊ทผ์ก ๊ฐ์ ์ธ์ด์ ๋๋ค.
- ๋น์ ํ์๋ฉด: ์คํ ๋งค๋ด์ผ ์ฅ์น๊ฐ ํ๋๋ ์๊ณ ๋ณ์ ๊ธฐ์ด์ ์กฐํฅ ์ฅ์น ํ๋๊น์ง ์ด์ ์์ ๋ฌผ๋ฆฌ์ ๊ฐ๊ฐ์ผ๋ก ์๋ฒฝํ๊ฒ ์ ์ดํด์ผ ํ๋ ์ผ์ฑ์ ์ธ F1 ํฌ๋ฎฌ๋ฌ ๋ ์ด์ฑ ์นด์ ๊ฐ์ต๋๋ค.
๐ ๏ธ 2. ์ด๋์ ์ฃผ๋ก ์ฐ์ด๋์? โ
- ์ด๊ณ ์ฑ๋ฅ 3D ๊ฒ์ ์์ง: ์ธ๋ฆฌ์ผ ์์ง(Unreal Engine), ๋ํ PC/์ฝ์ 3D ๊ฒ์ ๊ทธ๋ํฝ ์์ง ๋ฐ ๋ฌผ๋ฆฌ ์์ง ๊ฐ๋ฐ.
- ์์คํ ์ํํธ์จ์ด & OS: ์๋ฒ ๋๋ ์ฅ์น, ์ด์์ฒด์ (Windows ์ฝ์ด ๋ฑ), ์์จ์ฃผํ ์ผ์ ๋ฐ์ดํฐ ์ด๊ณ ์ ์ค์๊ฐ ์ ์ด.
- ์ธ๊ณต์ง๋ฅ(AI) ์ฝ์ด ์ฐ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ํ์ด์ฌ ๋ฐ์์ ํ ์ํ๋ก์ฐ๋ ํ์ดํ ์น ๋ฑ ๋ฌด๊ฑฐ์ด ๋ฅ๋ฌ๋ ์ฐ์ฐ์ ์ค์ ๋ก ์ฒ๋ฆฌํ๋ ๋ท๋จ ํ๋์จ์ด ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
โ๏ธ 3. ์ฅ์ ๊ณผ ๋จ์ (์ ๋ฐฐ์ ์์ง ํ๋ง๋) โ
- ์ฅ์ (ํ์ ์ถ์ข
์ ๋ถํํ๋ ์ฑ๋ฅ):
- ๊ทนํ์ ํ๋์จ์ด ์๋ ์ ์ด: ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ์ชผ๊ฐ๊ณ ๋ค์ค๋ฆฌ๋ฉฐ CPU ์ฝ์ด๋ฅผ ์ต๋๋ก ๊ตด๋ฆด ์ ์๋ ๋ฌด์๋ฌด์ํ ํผํฌ๋จผ์ค๋ฅผ ๊ฐ์ง๋๋ค.
- ๊น์ ๊ธฐ๋ณธ๊ธฐ ์ฒด๋: ํฌ์ธํฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ณต๋ถํ๋ฉฐ ์ปดํจํฐ ์์คํ ์ ์ง์ง ์๋ ์๋ฆฌ๋ฅผ ๋ง์คํฐํ ์ ์์ต๋๋ค.
- ๋จ์ (์ด๋ฒํ ๋์ด๋์ ๋๋ฒ๊น
):
- ๋ฉ๋ชจ๋ฆฌ ๋ฆญ(Leak)์ ์ํ: ๋์ ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํด์ ํ์ง ์์ผ๋ฉด ์ปดํจํฐ ๋จ์ ์ข๋จน๋ ๋ฌด์๋ฌด์ํ ๋์ ํ์์ด ๋ฐ์ํฉ๋๋ค.
- ๊ธฐ๊ดดํ๊ฒ ๋ณต์กํ ๋ฌธ๋ฒ: ํ ํ๋ฆฟ(Template), ๋ค์ค ์์ ๋ฑ ์ญ์ฌ์ ์ผ๋ก ๋์ ๋ ๋ฌธ๋ฒ ์ฒด๊ณ๊ฐ ๊ฐ์ฅ ๊ฑฐ๋ํ๊ณ ๋ํดํฉ๋๋ค.
๐ 4. ์ด๋ณด์๋ฅผ ์ํ ์ฒซ๊ฑธ์ ์ฝ๋ โ
C++์์ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์ค์ '์ฃผ์๊ฐ'์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ(Pointer) ๊ธฐ๋ณธํ์ ๋๋ค.
#include <iostream>
int main() {
int normalValue = 99;
// 1. ํฌ์ธํฐ ๋ณ์ *ptr์ ๋ณ์์ '๊ฐ'์ด ์๋๋ผ ์ค์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ '์ฃผ์'๋ฅผ ์ ์ฅํฉ๋๋ค.
int* ptr = &normalValue; // & ๊ธฐํธ๋ ์ฃผ์๊ฐ์ ์ถ์ถํฉ๋๋ค.
std::cout << "๋ณ์์ ์ค์ ๊ฐ: " << normalValue << std::endl;
std::cout << "๋ณ์๊ฐ ์์นํ ๋จ(RAM) ๋ฉ๋ชจ๋ฆฌ ์ฃผ์: " << ptr << std::endl;
// 2. ์ฃผ์์ ์ง์ ์ ๊ทผํด์ ๊ฐ์ ๋ฎ์ด์๋๋ค.
*ptr = 300;
std::cout << "ํฌ์ธํฐ๋ฅผ ํตํด ๋ฐ๋ ๋ณ์ ๊ฐ: " << normalValue << std::endl;
return 0;
}๐ฏ 5. ์ด๋ณด์ ์ถ์ฒ ๊ณต๋ถ ๋ฐฉํฅ โ
- ๋ฐ๋์ C์ธ์ด์ ํฌ์ธํฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋จผ์ ์ดํดํ๊ณ C++ ๊ฐ์ฒด ์งํฅ ๋ฐ ์ต์ ์ค๋งํธ ํฌ์ธํฐ ๊ฐ๋ ์ผ๋ก ๋์ด๊ฐ์ ์ผ ๊ธธ์ ์์ง ์์ต๋๋ค.
- ๋๊ตฌ์ ๋์์ ์ ๊ทน ๋ฐ์ผ์ญ์์ค. ๋๋ฒ๊ฑฐ(Debugger) ์ฌ์ฉ๋ฒ์ ์ตํ์ ๋ผ์ธ๋ฐ์ด๋ผ์ธ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ํ๋ฅผ ์ถ์ ํด๋ณด๋ ํ๋ จ์ด ์๋ช ์ ์ ๋๋ค.
- ์ฝ์ ์ฐฝ์์ ๋์๊ฐ๋ ๊ฐ๋จํ ๊ฐ๊ณ๋ถ, ์ฃผ์๋ก ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ ๊ฐ์ ํ ์คํธ ๊ธฐ๋ฐ ๋๊ตฌ๋ฅผ ์ง์ ์ง๋ณด๋ฉฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ํ๊ดดํ๋ ๋ผ์ดํ์ฌ์ดํด์ ์ฐ์ตํ์ญ์์ค.