ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ โโ๋ณด์, ์ ๋ขฐ์ฑ, ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด ์๊ฒฉํ ํ ์คํธ์ ๊ฒ์ฆ์ ์๊ตฌํฉ๋๋ค. ๊ธฐ์กด์ ํ ์คํธ ๋ฐฉ๋ฒ์ ๊ตฌ์ฒด์ ์ธ ์ ๋ ฅ๊ณผ ๋ฏธ๋ฆฌ ์ ์๋ ํ ์คํธ ์ฌ๋ก์ ์์กดํ์ง๋ง, ์ข ์ข ๋ชจ๋ ์คํ ๊ฒฝ๋ก๋ฅผ ํ์ํ์ง ๋ชปํด ์จ๊ฒจ์ง ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ์ง ๋ชปํฉ๋๋ค. ์ฌ๋ณผ๋ฆญ ์คํ์ ๋ชจ๋ ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ ๊ฒฝ๋ก๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๋ถ์ํ์ฌ ์ ์ ์ฝ๋ ๋ถ์์ ํ๋ช ์ ์ผ์ผ์ผ ๊ฐ๋ฐ์๊ฐ ๋ฒ๊ทธ, ๋ณด์ ๊ฒฐํจ, ๊ทธ๋ ์ง ์์ผ๋ฉด ์์์ฐจ๋ฆฌ์ง ๋ชปํ ์ ์๋ ๋๋ฌํ ์ ์๋ ์ฝ๋๋ฅผ ๊ฐ์งํ ์ ์๋๋ก ํฉ๋๋ค.
๊ตฌ์ฒด์ ์ธ ๊ฐ์ ์ฌ๋ณผ๋ฆญ ๋ณ์๋ก ๋์ฒดํจ์ผ๋ก์จ ์ฌ๋ณผ๋ฆญ ์คํ์ ์ฌ๋ฌ ์คํ ์๋๋ฆฌ์ค๋ฅผ ๋์์ ํ์ํ์ฌ ๋ ํฐ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ด ๊ธฐ์ ์ ์๋ํ๋ ํ ์คํธ ์์ฑ, ์ทจ์ฝ์ฑ ํ์ง ๋ฐ ์ํํธ์จ์ด ๊ฒ์ฆ์ ํนํ ์ ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ์๋ ๋ถ๊ตฌํ๊ณ ์ฌ๋ณผ๋ฆญ ์คํ์ ๊ฒฝ๋ก ํญ๋ฐ, ๋ณต์กํ ์ ์ฝ ์กฐ๊ฑด ํด๊ฒฐ ๋ฐ ํ์ฅ์ฑ ๋ฌธ์ ์ ๊ฐ์ ๊ณผ์ ์ ์ง๋ฉดํฉ๋๋ค. ์ ์ ๋ถ์ ๋๊ตฌ๊ฐ ์งํํ๋ฉด์ AI ๊ธฐ๋ฐ ์ต์ ํ, ํ์ด๋ธ๋ฆฌ๋ ์คํ ๋ชจ๋ธ ๋ฐ ์ ์ฝ ์กฐ๊ฑด ํด๊ฒฐ ๊ฐ์ ์ฌํญ์ ํตํฉํจ์ ๋ฐ๋ผ ์ฌ๋ณผ๋ฆญ ์คํ์ ์ํํธ์จ์ด ํ์ง๊ณผ ๋ณด์์ ํฅ์์ํค๋ ๋ฐ ์์ด์๋ ์ ๋ ๋๊ตฌ๊ฐ ๋๊ณ ์์ต๋๋ค.
๋ฐ๊ฒฌํ๋ค SMART TS XL
๊ฐ์ฅ ๋น ๋ฅด๊ณ ํฌ๊ด์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ๊ฒฌ ๋ฐ ์ดํด ํ๋ซํผ
Click Here์ ์ ์ฝ๋ ๋ถ์์์์ ์ฌ๋ณผ๋ฆญ ์คํ ์ดํด
์์ง์ ์คํ์ ์ ์
์์ง์ ์คํ์ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ ์ ์ฝ๋ ๋ถ์ ์ฌ๊ธฐ์ ๊ตฌ์ฒด์ ์ธ ์ ๋ ฅ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๋์ , ํ๋ก๊ทธ๋จ์ ์ฌ๋ณผ๋ฆญ ๋ณ์๋ก ์คํํฉ๋๋ค. ์ด๋ฌํ ๋ณ์๋ ์ ๋ ฅ์ด ์ทจํ ์ ์๋ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฐ์ ๋ํ๋ ๋๋ค. ์คํ์ด ์งํ๋จ์ ๋ฐ๋ผ ์ฌ๋ณผ๋ฆญ ์คํ์ ์กฐ๊ฑด๋ฌธ๊ณผ ์ฐ์ฐ์ ํตํด ์ด๋ฌํ ๋ณ์์ ๋ถ๊ณผ๋ ์ ์ฝ ์กฐ๊ฑด์ ์ถ์ ํ์ฌ ๊ถ๊ทน์ ์ผ๋ก ์ฌ๋ฌ ์คํ ๊ฒฝ๋ก๋ฅผ ๋์์ ํ์ํ ์ ์๋๋ก ํฉ๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ๋ฒ๊ทธ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋๋ฏ๋ก ์ํํธ์จ์ด ๊ฒ์ฆ ๋ฐ ๋ณด์ ๋ถ์์ ํนํ ์ ์ฉํฉ๋๋ค. ์ทจ์ฝ์ , ๊ทธ๋ฆฌ๊ณ ์ ํต์ ์ธ ํ ์คํธ์์ ๋์น ์ ์๋ ์์ง ์ผ์ด์ค. ํ๋ก๊ทธ๋จ์ ํ ์คํธํ๊ธฐ ์ํด ์๋์ผ๋ก ์ ๋ ฅ์ ์ ๊ณตํ๋ ๋์ , ์ฌ๋ณผ๋ฆญ ์คํ์ ๋ชจ๋ ์คํ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๋ถ์ํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ฐ ๊ฒฐ์ ์ง์ ์ ๋ํ ์ ์ฝ ์กฐ๊ฑด์ ์์ฑํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์์ C++ ํจ์๋ฅผ ์๊ฐํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์ง#include <iostream>
void checkValue(int x) {
if (x > 10) {
std::cout << "x is greater than 10" << std::endl;
} else {
std::cout << "x is 10 or less" << std::endl;
}
}
๊ตฌ์ฒด์ ์ผ๋ก ์คํํ๋ฉด, ์ฐ๋ฆฌ๊ฐ ํธ์ถํ๋ฉด checkValue(5), ์ฐ๋ฆฌ๋ ๋ ๋ฒ์งธ ์ง์ ๋ง ํ์ํฉ๋๋ค.x <= 10). ๊ทธ๋ฌ๋ ์์ง์ ์คํ์์๋ x ๋ ๊ธฐํธ ๋ณ์๋ก ์ฒ๋ฆฌ๋๊ณ ๋ ๋ถ๊ธฐ๊ฐ ๋ชจ๋ ํ์๋์ด ๋ ๊ฐ์ ์ ์ฝ ์กฐ๊ฑด ์ธํธ๊ฐ ์์ฑ๋ฉ๋๋ค.
x > 10x <= 10
์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์ ํ ์คํธ ์ฌ๋ก๋ฅผ ๋ง๋ค๊ฑฐ๋ ๋๋ฌํ ์ ์๋ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์์ง์ ์คํ์ด ์ ํต์ ์ธ ์คํ๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ
๊ธฐ์กด ์คํ์ ํน์ ์ ๋ ฅ์ ์์กดํ์ฌ ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ๋์์ ๊ด์ฐฐํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํ ์คํธ ์ฌ๋ก ์์ ๋ฐ๋ผ ์ ํ๋๋ฉฐ, ์จ๊ฒจ์ง ์ทจ์ฝ์ฑ์ ํฌํจํ ์ ์๋ ํ ์คํธ๋์ง ์์ ์คํ ๊ฒฝ๋ก๋ฅผ ์ข ์ข ๋จ๊ฒจ๋ก๋๋ค. ๋ฐ๋ฉด, ์ฌ๋ณผ๋ฆญ ์คํ์ ๋ฏธ๋ฆฌ ์ ์๋ ์ ๋ ฅ์ ์์กดํ์ง ์๊ณ ๋์ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฐ์ ๋ํ๋ด๋ ์ฌ๋ณผ๋ฆญ ๋ณ์๋ฅผ ํ ๋นํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ ๊ด๋ฒ์ํ ์ ์ฉ ๋ฒ์๋ฅผ ํ์ฉํ์ฌ ์ค์ ์คํ์์๋ ๊ฒฐ์ฝ ๋ฐ์ํ์ง ์์ ์ ์๋ ์ ์ฌ์ ๋ฌธ์ ๋ฅผ ๊ฐ์งํฉ๋๋ค.
ํ ๊ฐ์ง ์ฃผ์ ์ฐจ์ด์ ์ ํ๋ก๊ทธ๋จ์์ ๊ฒฐ์ ์ง์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์กฐ๊ฑด๋ฌธ์ด ๋ํ๋๋ฉด ๊ธฐ์กด ์คํ์ ์ฃผ์ด์ง ์ ๋ ฅ์ ๋ฐ๋ผ ๋จ์ผ ๋ถ๊ธฐ๋ฅผ ๋ฐ๋ฅด๋ ๋ฐ๋ฉด, ์ฌ๋ณผ๋ฆญ ์คํ์ ์ฌ๋ฌ ๊ฒฝ๋ก๋ก ๋ถ๊ธฐ๋์ด ๊ฐ ๋ถ๊ธฐ์ ๋ํ ์ ์ฝ ์กฐ๊ฑด์ ์ ์งํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์ ์ฝ๋๋ฅผ ์๊ฐํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์งvoid processInput(int a, int b) {
if (a + b == 20) {
std::cout << "Sum is 20" << std::endl;
} else {
std::cout << "Sum is not 20" << std::endl;
}
}
๊ตฌ์ฒด์ ์ธ ์คํ a = 5, b = 10 ๋ ๋ฒ์งธ ๋ถ๊ธฐ๋ง ํ๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ณผ๋ฆญ ์คํ์ ๋ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ ๋ชจ๋ ํ์ํฉ๋๋ค.
a + b == 20a + b != 20
์ด๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ณ , ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ถ์ํ๊ณ , ์ํํธ์จ์ด ๊ฒฌ๊ณ ์ฑ์ ํฅ์์ํค๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ ์ ์ฝ๋ ๋ถ์์์ ์ฌ๋ณผ๋ฆญ ์คํ์ ์ญํ
์ฌ๋ณผ๋ฆญ ์คํ์ ๋ณด์ ์ทจ์ฝ์ฑ, ๋ ผ๋ฆฌ์ ์ค๋ฅ, ํ ์คํธ๋์ง ์์ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ํฌํจํ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ํ์งํ์ฌ ์ ์ ์ฝ๋ ๋ถ์์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ํจํด ๋งค์นญ์ด๋ ํด๋ฆฌ์คํฑ์ ์์กดํ๋ ๊ธฐ์กด์ ์ ์ ๋ถ์ ๊ธฐ์ ๊ณผ ๋ฌ๋ฆฌ ์ฌ๋ณผ๋ฆญ ์คํ์ ํ๋ก๊ทธ๋จ ๋์์ ์ํ์ ์ผ๋ก ๋ชจ๋ธ๋งํ์ฌ ๋ ๊น์ ์์ค์์ ์๋ํฉ๋๋ค.
์ฃผ์ ์์ฉ ๋ถ์ผ ์ค ํ๋๋ ์ทจ์ฝ์ฑ ํ์ง์ ๋๋ค. ์ฌ๋ณผ๋ฆญ ์คํ์ ์ฌ๋ฌ ์คํ ๊ฒฝ๋ก๋ฅผ ๋ถ์ํ ์ ์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์ ๋๋ค.
- ๋ฒํผ ์ค๋ฒํ๋ก: ๋ฐฐ์ด ์ธ๋ฑ์ค์ ์์ง์ ์ ์ฝ ์กฐ๊ฑด์ ๋ถ์ํจ์ผ๋ก์จ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ก์ธ์ค๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
- ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ: ์ญ์ฐธ์กฐ ์ ์ ํฌ์ธํฐ๊ฐ null์ด ๋ ์ ์๋ ์๋๋ฆฌ์ค๋ฅผ ์ดํด๋ด ๋๋ค.
- ์ ์ ์ค๋ฒํ๋ก: ๊ธฐํธ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ ํ๊ณ๋ฅผ ์ด๊ณผํ๋ ์ฐ์ฐ์ ์ฐพ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฒ๋ฆฌํ๋ ํจ์๋ฅผ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
cpp๋ณต์ฌํธ์งvoid allocateMemory(int size) {
if (size < 0) {
std::cout << "Invalid size" << std::endl;
return;
}
int* arr = new int[size];
std::cout << "Memory allocated" << std::endl;
}
๊ธฐํธ ์คํ์ ์ฌ์ฉํ๋ฉด ๋ถ์ ๋๊ตฌ๊ฐ ๋ค์ ์ฌํญ์ ๊ฐ์งํฉ๋๋ค. size ์์ ๊ฐ์ ํฌํจํ ๋ชจ๋ ๊ฐ์ ์ทจํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ์๋์ง ์์ ๋์์ด๋ ์ถฉ๋๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ ์ฝ ์กฐ๊ฑด์ ์์ฑํฉ๋๋ค.
size < 0(์๋ชป๋ ๋์๋ฌธ์๋ก ์ธํด ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ฐ์ํจ)size >= 0(์ ํจํ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ํ ๋น)
์ด๋ ๊ฒ ํ๋ฉด ํ๋ก๊ทธ๋จ์ด ์์ธ ์ํฉ์ ์ ์ ํ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋ํ, ์ฌ๋ณผ๋ฆญ ์คํ์ ์๋ํ๋ ํ ์คํธ ์์ฑ์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ๋ค์ํ ์คํ ๊ฒฝ๋ก์ ๊ทธ ์ ์ฝ ์กฐ๊ฑด์ ์ฒด๊ณ์ ์ผ๋ก ํ์ํจ์ผ๋ก์จ ์ฌ๋ณผ๋ฆญ ์คํ์ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ทน๋ํํ๋ ๊ณ ํ์ง ํ ์คํธ ์ฌ๋ก๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ง์ ์ต์ ๋ณด์ ํ ์คํธ ํ๋ ์์ํฌ๋ ์ฌ๋ณผ๋ฆญ ์คํ์ ํตํฉํ์ฌ ๋ณต์กํ ์ํํธ์จ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ทจ์ฝ์ฑ์ ์๋ณํฉ๋๋ค.
์ฌ๋ณผ๋ฆญ ์คํ์ ๊ฐ๋ ฅํ์ง๋ง, ์ปดํจํ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. ์คํ ๊ฒฝ๋ก์ ์๋ ํ๋ก๊ทธ๋จ ๋ณต์ก์ฑ์ ๋ฐ๋ผ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๋๋ฐ, ์ด๋ฅผ ๊ฒฝ๋ก ํญ๋ฐ์ด๋ผ๊ณ ํฉ๋๋ค. ์ฐ๊ตฌ์์ ์์ง๋์ด๋ ์ ์ฝ ์ ๊ฑฐ ๋ฐ ํ์ด๋ธ๋ฆฌ๋ ์คํ ๋ชจ๋ธ๊ณผ ๊ฐ์ ์ต์ ํ ๊ธฐ์ ์ ์ฐ๊ตฌํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํฉ๋๋ค.
์์ง์ ์คํ์ด ์๋ํ๋ ๋ฐฉ์
๊ตฌ์ฒด์ ๊ฐ์ ์์ง์ ๋ณ์๋ก ๋์ฒด
์ฌ๋ณผ๋ฆญ ์คํ์ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ ์ฌ๋ณผ๋ฆญ ๋ณ์๋ก ๋์ฒดํ์ฌ ์๋ํฉ๋๋ค. ํน์ ์ ๋ ฅ์ผ๋ก ์ฝ๋๋ฅผ ์คํํ๋ ๋์ , ๊ฐ๋ฅํ ๊ฐ ๋ฒ์๋ฅผ ๋ํ๋ด๋ ์ฌ๋ณผ๋ฆญ ํํ์์ ํ ๋นํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ถ์์ ๋จ์ผ ์คํ ํจ์ค์์ ๋ชจ๋ ์ ์ฌ์ ํ๋ก๊ทธ๋จ ์ํ๋ฅผ ์ถ์ ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์์ C++ ํจ์๋ฅผ ์๊ฐํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์ง#include <iostream>
void analyzeValue(int x) {
if (x > 0) {
std::cout << "Positive number" << std::endl;
} else {
std::cout << "Zero or negative number" << std::endl;
}
}
๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์คํ์ผ๋ก ์ด ํจ์๋ฅผ ์คํํ๋ฉด analyzeValue(5), ์ฐ๋ฆฌ๋ ์ฒซ ๋ฒ์งธ ๋ถ๊ธฐ๋ง ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์์ง์ ์คํ์์๋ x ๋ ์ฌ๋ณผ๋ฆญ ๋ณ์๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก ๋ ๋ถ๊ธฐ๊ฐ ๋์์ ๋ถ์๋ฉ๋๋ค. ์ฌ๋ณผ๋ฆญ ์คํ ์์ง์ ๋ค์๊ณผ ๊ฐ์ ์ ์ฝ ์กฐ๊ฑด์ ์ถ์ ํฉ๋๋ค.
x > 0โ ์ฒซ ๋ฒ์งธ ๋ถ๊ธฐ๋ฅผ ์คํํฉ๋๋ค.x <= 0โ ๋ ๋ฒ์งธ ๋ถ๊ธฐ๋ฅผ ์คํํฉ๋๋ค.
์คํ ์์ง์ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ ์์ง์ ์ธ ๊ฐ์ผ๋ก ๋์ฒดํจ์ผ๋ก์จ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๊ฐ๋ฅํ ๋์์ด ๊ณ ๋ ค๋๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ ๋์ ํ ์คํธ ์ผ์ด์ค ์์ฑ์ด ๊ฐ๋ฅํด์ง๊ณ ๊ธฐ์กด ํ ์คํธ๋ก๋ ๋ฐ๊ฒฌ๋์ง ์์ ์ ์๋ ์์ง ์ผ์ด์ค๋ฅผ ์ฐพ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ฒฝ๋ก ์ ์ฝ ์์ฑ ๋ฐ ํด๊ฒฐ
ํ๋ก๊ทธ๋จ์์ ์ฌ๋ณผ๋ฆญ ์คํ์ด ์งํ๋จ์ ๋ฐ๋ผ ๊ฒฝ๋ก ์ ์ฝ ์กฐ๊ฑด์ด ์์ฑ๋ฉ๋๋ค. ๊ฒฝ๋ก ์ ์ฝ ์กฐ๊ฑด์ ๊ฐ ์คํ ๊ฒฝ๋ก์ ๋ํด ์ถฉ์กฑํด์ผ ํ๋ ๋ ผ๋ฆฌ์ ์กฐ๊ฑด์ ๋๋ค. ์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ๋ณผ๋ฆญ ํํ์์ผ๋ก ์ ์ฅ๋๊ณ SMT ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐ๋ฉ๋๋ค(๋ง์กฑ์ฑ ๋ชจ๋๋ก ์ด๋ก Z3๋ STP์ ๊ฐ์ ์๋ฒ)
์ด ์๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
cpp๋ณต์ฌํธ์งvoid checkSum(int a, int b) {
if (a + b == 10) {
std::cout << "Valid sum" << std::endl;
} else {
std::cout << "Invalid sum" << std::endl;
}
}
์์ง์ ์คํ์ด ํ ๋น๋ฉ๋๋ค a b ๊ธฐํธ ๋ณ์๋ก ์ฌ์ฉํ๊ณ ๋ ๋ถ๊ธฐ์ ๋ํ ์ ์ฝ ์กฐ๊ฑด์ ์์ฑํฉ๋๋ค.
a + b == 10โ ์ฒซ ๋ฒ์งธ ๋ถ๊ธฐ๋ฅผ ์คํํฉ๋๋ค.a + b != 10โ ๋ ๋ฒ์งธ ๋ถ๊ธฐ๋ฅผ ์คํํฉ๋๋ค.
SMT ์๋ฒ๋ ์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์ ์ฒ๋ฆฌํ๊ณ ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฒฝ๋ก๋ฅผ ๋ชจ๋ ํฌ๊ดํ๋ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค. (a=5, b=5) ์ฒซ ๋ฒ์งธ ๊ฒฝ๋ก์ ๋ํด์ (a=3, b=7) ๋ ๋ฒ์งธ๋.
SMT ์๋ฒ๋ ํ ์คํธ ์ฌ๋ก ์์ฑ์ ์๋ํํ๊ณ ์ ์ฝ ์กฐ๊ฑด์ ๋ ผ๋ฆฌ์ ๋ชจ์์ผ๋ก ์ธํด ํน์ ๊ฒฝ๋ก์ ๋๋ฌํ ์ ์๋ ์ฌ๋ก๋ฅผ ๊ฐ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋ค์ค ์คํ ๊ฒฝ๋ก ํ์
์ฌ๋ณผ๋ฆญ ์คํ์ ๊ฐ ์กฐ๊ฑด๋ฌธ์์ ํฌํนํ์ฌ ๋ชจ๋ ๊ฐ๋ฅํ ์คํ ๊ฒฝ๋ก๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ํ์ํฉ๋๋ค. ๊ฒฐ์ ์ง์ ์ ๋๋ฌํ๋ฉด ์คํ์ด ์ฌ๋ฌ ๊ฒฝ๋ก๋ก ๋ถ๊ธฐ๋์ด ๊ฐ๊ฐ์ ๋ํด ๋ณ๋์ ์ฌ๋ณผ๋ฆญ ์ ์ฝ ์กฐ๊ฑด์ ์ ์งํฉ๋๋ค.
์:
cpp๋ณต์ฌํธ์งvoid processInput(int x) {
if (x < 5) {
std::cout << "Less than 5" << std::endl;
} else if (x == 5) {
std::cout << "Equal to 5" << std::endl;
} else {
std::cout << "Greater than 5" << std::endl;
}
}
์์ง์ ์คํ ๋์ ์์ง์ ์ธ ๊ฐ์ง ์ ์ฝ ์กฐ๊ฑด์ ์์ฑํฉ๋๋ค.
x < 5โ ์ฒซ ๋ฒ์งธ ๋ถ๊ธฐ๋ฅผ ์คํํฉ๋๋ค.x == 5โ ๋ ๋ฒ์งธ ๋ถ๊ธฐ๋ฅผ ์คํํฉ๋๋ค.x > 5โ ์ธ ๋ฒ์งธ ๋ถ๊ธฐ๋ฅผ ์คํํฉ๋๋ค.
๊ฐ ๋ถ๊ธฐ๋ ๋ณ๋์ ์คํ ๊ฒฝ๋ก๋ก ์ด์ด์ ธ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๊ฐ ๋ถ์๋๋๋ก ํฉ๋๋ค. ์ด ๊ธฐ์ ์ ํนํ ๋ ผ๋ฆฌ์ ์ค๋ฅ, ๋ณด์ ์ทจ์ฝ์ฑ ๋ฐ ๋๋ฌํ ์ ์๋ ์ฝ๋ ์ธ๊ทธ๋จผํธ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
๊ทธ๋ฌ๋ ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ง์ ๋ฐ๋ผ ์คํ ๊ฒฝ๋ก์ ์๋ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๊ฒฝ๋ก ํญ๋ฐ์ด๋ผ๊ณ ํฉ๋๋ค. ์ฐ๊ตฌ์๋ค์ ํด๋ฆฌ์คํฑ, ์ ์ฝ ์ ๊ฑฐ, ํ์ด๋ธ๋ฆฌ๋ ์คํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ์ํํฉ๋๋ค.
์ฌ๋ณผ๋ฆญ ์คํ์์ ๋ถ๊ธฐ ๋ฐ ๋ฃจํ ์ฒ๋ฆฌ
๋ถ๊ธฐ์ ๋ฃจํ๋ ์ฌ๋ณผ๋ฆญ ์คํ์ ์๋นํ ๊ณผ์ ๋ฅผ ์๊ฒจ์ค๋๋ค. ๋ฃจํ๋ ๋ฌดํํ ์์ ์คํ ๊ฒฝ๋ก๋ฅผ ๋์ ํ ์ ์์ผ๋ฏ๋ก, ๋ฌด์ ํ ์คํ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ์คํ๊ฒ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
๋ค์ ๋ฃจํ๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์งvoid countDown(int n) {
while (n > 0) {
std::cout << n << std::endl;
n--;
}
}
If n ๋ ์์ง์ ์
๋๋ค. ์คํ ์์ง์ ๋ฃจํ๊ฐ ์คํ๋๋ ํ์๋ฅผ ์์ง์ ์ผ๋ก ๋ชจ๋ธ๋งํด์ผ ํฉ๋๋ค. ์ค์ ๋ก ๋๋ถ๋ถ์ ์์ง์ ์คํ ์์ง์ ์ ์ฝ ์กฐ๊ฑด ๋จ์ํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฃจํ ๋ฐ๋ณต ํ์๋ ๋๋ต์ ์ธ ๋ฃจํ ๋์์ ์ ํํฉ๋๋ค.
๋ฃจํ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฃจํ ํ๊ธฐ: ๊ณ ์ ๋ ๋ฐ๋ณต ํ์๊น์ง ๋ฃจํ๋ฅผ ํ์ฅํ๊ณ ํด๋น ํน์ ์ฌ๋ก๋ฅผ ๋ถ์ํฉ๋๋ค.
- ๋ถ๋ณ ๊ธฐ๋ฐ ๋ถ์: ๊ฐ ๋ฐ๋ณต์ ๋ช ์์ ์ผ๋ก ์คํํ๋ ๋์ ๋ฃจํ์ ํจ๊ณผ๋ฅผ ์ ์ฝ ์กฐ๊ฑด์ผ๋ก ํํํฉ๋๋ค.
- ์ํ ๋ณํฉ: ์ ์ฌํ ์คํ ์ํ๋ฅผ ๋ณํฉํ์ฌ ๋ณ๋ ๊ฒฝ๋ก์ ์๋ฅผ ์ค์ ๋๋ค.
์๋ฅผ ๋ค์ด, ์นด์ดํธ๋ค์ด ์์์ ์ฌ๋ณผ๋ฆญ ์คํ์ ๋ค์๊ณผ ๊ฐ์ ์ ์ฝ ์กฐ๊ฑด์ ์์ฑํ ์ ์์ต๋๋ค.
n = 3โ 3๋ฒ ๋ฐ๋ณตํฉ๋๋ค.n = 10โ 10๋ฒ์ ๋ฐ๋ณต์ ์คํํฉ๋๋ค.n <= 0โ ๋ฐ๋ณต์ด ์คํ๋์ง ์์ต๋๋ค.
๋ฃจํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ชจ๋ธ๋งํจ์ผ๋ก์จ, ์ฌ๋ณผ๋ฆญ ์คํ ๋๊ตฌ๋ ์ ํ์ฑ์ ์ ์งํ๋ ๋์์ ๋ถํ์ํ ๊ฒฝ๋ก ํญ๋ฐ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์ ์ ์ฝ๋ ๋ถ์์์ ์ฌ๋ณผ๋ฆญ ์คํ์ ์ด์
์์ง ์ผ์ด์ค ๋ฐ ๋๋ฌํ ์ ์๋ ์ฝ๋ ์๋ณ
์ฌ๋ณผ๋ฆญ ์คํ์ ์ฃผ์ ์ด์ ์ค ํ๋๋ ์ฃ์ง ์ผ์ด์ค๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ํ์ํ๊ณ ๊ธฐ์กด ํ ์คํธ์์ ๊ฐ๊ณผ๋ ์ ์๋ ๋๋ฌ ๋ถ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๊ฐ์งํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ฌ๋ณผ๋ฆญ ์คํ์ ๋ชจ๋ ๊ฐ๋ฅํ ์ ๋ ฅ์ ์ฌ๋ณผ๋ฆญ ๋ณ์๋ก ๊ฐ์ฃผํ๋ฏ๋ก ๊ธฐ์กด ํ ์คํธ ์ผ์ด์ค๋ก๋ ๋๋ฌํ๊ธฐ ์ด๋ ค์ด ์กฐ๊ฑด์ ๋ถ์ํ ์ ์์ต๋๋ค.
๋ค์์ C++ ํจ์๋ฅผ ์๊ฐํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์งvoid processInput(int x) {
if (x > 1000 && x % 7 == 0) {
std::cout << "Special condition met" << std::endl;
} else {
std::cout << "Normal execution" << std::endl;
}
}
์ด ๊ธฐ๋ฅ์ด ์์์ ์
๋ ฅ์ผ๋ก ํ
์คํธ๋๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ๋ฐ์ํ์ง ์์ ์ ์์ต๋๋ค. x > 1000 ๊ทธ๋ฆฌ๊ณ 7๋ก๋ ๋๋์ด์ง๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ณผ๋ฆญ ์คํ์ ๋ ๊ฒฝ๋ก ๋ชจ๋์ ๋ํ ์ ์ฝ ์กฐ๊ฑด์ ์์ฑํฉ๋๋ค.
x > 1000 && x % 7 == 0โ ํน์ ์กฐ๊ฑด์ ์คํํฉ๋๋ค.!(x > 1000 && x % 7 == 0)โ ์ผ๋ฐ ์คํ ๊ฒฝ๋ก๋ฅผ ์คํํฉ๋๋ค.
์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์ ํด๊ฒฐํจ์ผ๋ก์จ ์ฌ๋ณผ๋ฆญ ์คํ ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ ํํ ํ
์คํธ ์ฌ๋ก๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. x = 1001 (์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์) ๋ฐ x = 1001 + 7 = 1008 (์กฐ๊ฑด์ ๋ง์กฑํจ). ์ด๋ ๊ฒ ํ๋ฉด ๋๋ฌธ ์คํ ๊ฒฝ๋ก๋ ํ
์คํธ๋ฉ๋๋ค.
๊ฒ๋ค๊ฐ, ๊ทธ๊ฒ์ ํ ์ ์์ต๋๋ค ๋๋ฌํ ์ ์๋ ์ฝ๋ ๊ฐ์ง๊ฐ์ :
cpp๋ณต์ฌํธ์งvoid unreachableCode() {
int x = 5;
if (x > 10) {
std::cout << "This will never execute!" << std::endl;
}
}
์ดํ x ํญ์ 5์ด๊ณ ์กฐ๊ฑด์์ x > 10 ๊ฒฐ์ฝ ์ฐธ์ด ์๋๋ฏ๋ก ๋ธ๋์น์ ๋๋ฌํ ์ ์์ต๋๋ค. ์ฌ๋ณผ๋ฆญ ์คํ์ ์ด๋ฌํ ๊ฒฝ์ฐ๋ฅผ ์๋ณํ๊ณ ๊ฐ๋ฐ์์๊ฒ ์ฃฝ์ ์ฝ๋์ ๋ํด ๊ฒฝ๊ณ ํฉ๋๋ค.
์ทจ์ฝ์ ํ์ง๋ฅผ ํตํ ๋ณด์ ๊ฐํ
์ฌ๋ณผ๋ฆญ ์คํ์ ๋ฒํผ ์ค๋ฒํ๋ก, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ์ ์ ์ค๋ฒํ๋ก์ ๊ฐ์ ์ทจ์ฝ์ฑ์ ์๋ณํ๊ธฐ ์ํด ๋ณด์ ๋ถ์์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ๋ชจ๋ ๊ฐ๋ฅํ ์คํ ๊ฒฝ๋ก๋ฅผ ๋ถ์ํจ์ผ๋ก์จ ๊ธฐ์กด์ ์ ์ ๋ถ์์์ ๋์น ์ ์๋ ์ ์ฌ์ ์ธ ๋ณด์ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค.
๋ค์ ํจ์๋ฅผ ์๊ฐํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์งvoid unsafeFunction(char* userInput) {
char buffer[10];
strcpy(buffer, userInput); // Potential buffer overflow
}
์์ง์ ์คํ์ด ํ ๋น๋ฉ๋๋ค userInput ๊ธฐํธ ๋ณ์๋ก ์ฌ์ฉํ๊ณ ๊ธธ์ด์ ๋ํ ์ ์ฝ ์กฐ๊ฑด์ ์์ฑํฉ๋๋ค. ๊ธฐํธ ๋ถ์์์ ์
๋ ฅ์ด 10์๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์ผ๋ฉด ๋ฒํผ ์ค๋ฒํ๋ก ์ทจ์ฝ์ฑ์ ํ์ํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ:
cpp๋ณต์ฌํธ์งvoid checkPointer(int* ptr) {
if (*ptr == 10) { // Possible null dereference
std::cout << "Pointer is valid" << std::endl;
}
}
If ptr ์์ง์ ์ด๋ฉฐ ์์ง์ ์คํ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ํ์ํฉ๋๋ค. ptr null์ด๋ฏ๋ก ๋ฐํ์ ์ ์ ์ ์ฌ์ ์ธ ์ธ๊ทธ๋จผํ
์ด์
์ค๋ฅ๋ฅผ ๊ฐ์งํฉ๋๋ค.
์ด๋ฌํ ๊ธฐ์ ์ ์ทจ์ฝ์ ์ด ์ฌ๊ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ ์๋ฒ ๋๋ ์์คํ , OS ์ปค๋ ๊ฐ๋ฐ, ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ํ ์คํธ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
Null ํฌ์ธํฐ ์ญ์ฐธ์กฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ฐพ๊ธฐ
์ฌ๋ณผ๋ฆญ ์คํ์ ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋๋ฐ, ๋ ๋ค C/C++ ํ๋ก๊ทธ๋๋ฐ์์ ์ค์ํ ๋ฌธ์ ์ ๋๋ค. ์ด๋ฌํ ์ค๋ฅ๋ ๋ค์์ ์ผ์ผํฌ ์ ์์ต๋๋ค. ์ธ๊ทธ๋จผํ ์ด์ ์ค๋ฅ, ์ ์๋์ง ์์ ๋์ ๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ ์ถฉ๋.
์ด ์๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
cpp๋ณต์ฌํธ์งvoid riskyFunction(int* ptr) {
if (ptr) {
*ptr = 42; // Safe access
} else {
std::cout << "Pointer is null" << std::endl;
}
}
์์ง์ ์คํ์ ๋ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ ๋ชจ๋ ํ๊ตฌํฉ๋๋ค.
ptr != NULLโ ์์ ํ ๋น์ ์คํํฉ๋๋ค.ptr == NULLโ ์์ ํ null ๊ฒ์ฌ๋ฅผ ์คํํฉ๋๋ค.
ํจ์์ null ๊ฒ์ฌ๊ฐ ์์ผ๋ฉด ๊ธฐํธ ์คํ์์ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๊ณ ์ธ๊ทธ๋จผํ ์ด์ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ๊ฒฝ๊ณ ํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ฒฝ์ฐ, ์ฌ๋ณผ๋ฆญ ์คํ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ทธ ํ ๋น ํด์ ๋ฅผ ์ถ์ ํฉ๋๋ค. ๋ค์์ ๊ณ ๋ คํ์ธ์.
cpp๋ณต์ฌํธ์งvoid memoryLeak() {
int* data = new int[10];
// Memory allocated but not freed
}
์ฌ๊ธฐ์, ์ฌ๋ณผ๋ฆญ ์คํ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฒฐ์ฝ ํด์ ๋์ง ์์์ ๊ฐ์งํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ํต๋๋ค. ์ด๋ฌํ ํต์ฐฐ๋ ฅ์ ๊ฐ๋ฐ์๊ฐ ๋ ์์ ํ๊ณ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
ํ ์คํธ ์ผ์ด์ค ์์ฑ ์๋ํ
์ฌ๋ณผ๋ฆญ ์คํ์ ๋ ๋ค๋ฅธ ์ฃผ์ ์ฅ์ ์ ์๋ํ๋ ํ ์คํธ ์ผ์ด์ค ์์ฑ์ ๋๋ค. ์ ๋ ฅ์ ์๋์ผ๋ก ์ ํํ๋ ๊ธฐ์กด ํ ์คํธ์ ๋ฌ๋ฆฌ ์ฌ๋ณผ๋ฆญ ์คํ์ ์ฌ๋ณผ๋ฆญ ์ ์ฝ ์กฐ๊ฑด์ ํด๊ฒฐํ์ฌ ์ฒด๊ณ์ ์ผ๋ก ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.
๋ก๊ทธ์ธ ๊ฒ์ฆ ๊ธฐ๋ฅ์ ์๊ฐํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์งvoid login(int password) {
if (password == 12345) {
std::cout << "Access Granted" << std::endl;
} else {
std::cout << "Access Denied" << std::endl;
}
}
์์ง์ ์คํ์ด ํ ๋น๋ฉ๋๋ค password ๊ธฐํธ ๋ณ์๋ก ์์ฑ:
password == 12345โ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ ํ ์คํธ ์ผ์ด์ค.password != 12345โ ์ก์ธ์ค๋ฅผ ๊ฑฐ๋ถํ๋ ํ ์คํธ ์ผ์ด์ค.
๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ํ ๊ฒฝ๊ณ ํ ์คํธ ์ฌ๋ก๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค.
cpp๋ณต์ฌํธ์งif (x > 100) { ... }
์์ฑ๋ ํ ์คํธ ์ผ์ด์ค:
x = 101(์๊ณ๊ฐ ๋ฐ๋ก ์)x = 100(์์ง ์ผ์ด์ค)x = 99(์๊ณ๊ฐ ๋ฐ๋ก ์๋)
์๋์ผ๋ก ์์ฑ๋ ํ ์คํธ ์ผ์ด์ค๋ ์ฝ๋ ์ ์ฉ ๋ฒ์๋ฅผ ๊ฐ์ ํ์ฌ ๋ชจ๋ ๋ถ๊ธฐ, ์กฐ๊ฑด, ์์ง ์ผ์ด์ค๋ฅผ ์๋ ์์ ์์ด ํ ์คํธํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์ง์ ์คํ์ ๊ณผ์ ์ ํ๊ณ
๊ฒฝ๋ก ํญ๋ฐ ๋ฌธ์
์ฌ๋ณผ๋ฆญ ์คํ์์ ๊ฐ์ฅ ์ค์ํ ๊ณผ์ ์ค ํ๋๋ ๊ฒฝ๋ก ํญ๋ฐ ๋ฌธ์ ์ ๋๋ค. ์ฌ๋ณผ๋ฆญ ์คํ์ ํ๋ก๊ทธ๋จ์์ ์ฌ๋ฌ ์คํ ๊ฒฝ๋ก๋ฅผ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฒ ์ด์ค์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๊ฐ๋ฅํ ๊ฒฝ๋ก์ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ๋๊ท๋ชจ ํ๋ก๊ทธ๋จ์ ์ฒ ์ ํ ๋ถ์ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๋ค์์ C++ ํจ์๋ฅผ ์๊ฐํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์งvoid analyzePaths(int x, int y) {
if (x > 5) {
if (y < 10) {
std::cout << "Branch 1" << std::endl;
} else {
std::cout << "Branch 2" << std::endl;
}
} else {
if (y == 0) {
std::cout << "Branch 3" << std::endl;
} else {
std::cout << "Branch 4" << std::endl;
}
}
}
์ด ๊ฐ๋จํ ์์์ ์ฌ๋ณผ๋ฆญ ์คํ์ ๋ค ๊ฐ์ง ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ์ถ์ ํด์ผ ํฉ๋๋ค. ๋ ๋ง์ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฃจํ๊ฐ ์ถ๊ฐ๋จ์ ๋ฐ๋ผ ์คํ ๊ฒฝ๋ก์ ์๋ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ ์ ์์ผ๋ฏ๋ก ๋ณต์กํ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ ๋ถ์์ด ๋น์ค์ฉ์ ์ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฐ๊ตฌ์๋ค์ ํด๋ฆฌ์คํฑ, ์ํ ๋ณํฉ, ์ ์ฝ ๋จ์ํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ๊ฒฝ๋ก๋ฅผ ์ ๋ฆฌํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ต์ ํ๋ฅผ ์ํํ๋๋ผ๋ ๊ฒฝ๋ก ํญ๋ฐ์ ์ฌ์ ํ โโ์๋นํ ์ ํ ์ฌํญ์ผ๋ก ๋จ์ ์์ผ๋ฉฐ, ํนํ ๊น์ ์กฐ๊ฑด ๊ตฌ์กฐ๊ฐ ์๋ ๋๊ท๋ชจ ์ํํธ์จ์ด ํ๋ก์ ํธ์์ ๊ทธ๋ ์ต๋๋ค.
์ค์ ํ๋ก๊ทธ๋จ์์ ๋ณต์กํ ์ ์ฝ ์กฐ๊ฑด ์ฒ๋ฆฌ
์ฌ๋ณผ๋ฆญ ์คํ์ Z3 ๋๋ STP์ ๊ฐ์ ์ ์ฝ ์กฐ๊ฑด ์๋ฒ์ ์์กดํ์ฌ ์คํ ๊ฒฝ๋ก๊ฐ ์คํ ๊ฐ๋ฅํ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ์ํํธ์จ์ด์๋ ์ข ์ข ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ ์ ์๋ ๋งค์ฐ ๋ณต์กํ ์ ์ฝ ์กฐ๊ฑด์ด ํฌํจ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํ๋ก๊ทธ๋จ์ ๋ค์์ด ํฌํจ๋ ๊ฒฝ์ฐ:
- ๋น์ ํ ์ํ ์ฐ์ฐ ๋ฑ
x^yorsin(x). - ์์คํ ์ ๋ฐ๋ฅธ ๋์ ์๋ฅผ ๋ค์ด ํ์ผ ์ฒ๋ฆฌ, ๋คํธ์ํฌ ํต์ , ์ธ๋ถ API ํธ์ถ ๋ฑ์ ๋๋ค.
- ๋์์ฑ๊ณผ ๋ฉํฐ์ค๋ ๋ฉ, ์คํ์ด ์์ธกํ ์ ์๋ ์ค๋ ๋ ์ค์ผ์ค๋ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๋ถ๋ ์์์ ๊ณ์ฐ์ ํฌํจํ๋ ์ด C++ ํจ์๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์ง#include <cmath>
void processMath(double x) {
if (sin(x) > 0.5) {
std::cout << "Condition met" << std::endl;
}
}
๊ธฐํธ ์คํ ์์ง์ ๋ค์๊ณผ ๊ฐ์ ์ผ๊ฐ ํจ์๋ฅผ ๊ธฐํธ๋ก ํํํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ ์ ์์ต๋๋ค. sin(x)์ด๋ก ์ธํด ๋ถ์ ํํ ๊ฒฐ๊ณผ๋ ์๋ฒ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด๋ฅผ ์ํํ๊ธฐ ์ํด, ์์ง์ ์คํ ์์ง์ ์ข ์ข ๋ค์์ ์ํํฉ๋๋ค.
- ๊ทผ์ฌํ ๊ธฐ์ ์ ์ฝ์กฐ๊ฑด์ ๋จ์ํํฉ๋๋ค.
- ๊ณ ์ฉ ํ์ด๋ธ๋ฆฌ๋ ์คํ ๋ฐฉ๋ฒ์์ง์ ์คํ๊ณผ ๊ตฌ์ฒด์ ์คํ์ ๊ฒฐํฉํฉ๋๋ค.
- ๋ผ์ ๋ฃ๋ค ๋๋ฉ์ธ๋ณ ์๋ฒ ํน์ํ ์ํ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด.
์ด๋ฌํ ๊ธฐ์ ์๋ ๋ถ๊ตฌํ๊ณ , ์ ์ฝ ๋ณต์ก๋๋ ๋๊ท๋ชจ์ ํ์ค์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ฌ๋ณผ๋ฆญ ์คํ์ ํ์ฅํ๋ ๋ฐ ์์ด ์ฌ์ ํ ํฐ ๊ณผ์ ๋ก ๋จ์ ์์ต๋๋ค.
ํ์ฅ์ฑ ๋ฐ ์ฑ๋ฅ ๋ฌธ์
์ฌ๋ณผ๋ฆญ ์คํ์๋ ์๋นํ ์ปดํจํ ๋ฆฌ์์ค๊ฐ ํ์ํ๋ฏ๋ก ๋๊ท๋ชจ ์ํํธ์จ์ด ํ๋ก์ ํธ์ ํ์ฅํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ฃผ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ์์ง์ ์คํ์ ๊ฐ๋ฅํ ๋ชจ๋ ํ๋ก๊ทธ๋จ ์ํ๋ฅผ ์ ์ฅํ๋ฏ๋ก ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ์๋น๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์๋ฒ ์ฑ๋ฅ: ์ ์ฝ ์กฐ๊ฑด ์๋ฒ๋ ๋ณต์กํ ๊ธฐํธ ํํ์์ ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ ์ ํ๋ฅผ ๊ฒช๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ์คํ ์๊ฐ: ์ฌ์ธต ์กฐ๊ฑด ๋ถ๊ธฐ๊ฐ ์๋ ๋๊ท๋ชจ ํ๋ก๊ทธ๋จ์๋ ๋ค์์ด ํ์ํฉ๋๋ค. ๋ช ์๊ฐ ๋๋ ์ฌ์ง์ด ๋ฉฐ์น ์์ ํ ๋ถ์ํ๋ค.
์ฌ๋ฌ ๊ฐ์ ์ค์ฒฉ ๋ฃจํ๋ฅผ ํฌํจํ๋ ์๋ฅผ ์๊ฐํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์งvoid nestedLoops(int x, int y) {
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
std::cout << "Processing" << std::endl;
}
}
}
๊ฐ ๋ฐ๋ณต i j ์๋ก์ด ์คํ ๊ฒฝ๋ก๋ฅผ ๋์
ํ์ฌ ๋ถ์ ์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฆ๊ฐ์ํต๋๋ค. ์ค์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ด๋ฌํ ์ค์ฒฉ ๊ตฌ์กฐ๋ ์ฌ๋ณผ๋ฆญ ์คํ์ ํฌ๊ฒ ๋ฆ์ถ ์ ์์ต๋๋ค.
ํ์ฅ์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ฌ๋ณผ๋ฆญ ์คํ ํ๋ ์์ํฌ๋ ๋ค์์ ์ฌ์ฉํฉ๋๋ค.
- ์ ํ๋ ์คํ, ๋ถ์๋๋ ๊ฒฝ๋ก์ ์๊ฐ ์ ํ๋ฉ๋๋ค.
- ๊ฒฝ๋ก ๊ฐ์ง์น๊ธฐ ๊ธฐ์ ์ค๋ณต๋ ์ํ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ๋ณ๋ ฌ ์ฒ๋ฆฌ ์ฌ๋ฌ ๊ฐ์ CPU ์ฝ์ด ๋๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ์์ ๋ถํ๋ฅผ ๋ถ์ฐ์ํต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ์ต์ ํ์๋ ๋ถ๊ตฌํ๊ณ ์ฌ๋ณผ๋ฆญ ์คํ์ ์ฌ์ ํ โโ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ์ข ์ข ๋ค์์ ์๊ตฌํฉ๋๋ค. ์ ๋ฐ๋์ ์ฑ๋ฅ ๊ฐ์ ๊ท ํ.
๋์ ๊ธฐ๋ฅ ๋ถ์์ ํ๊ณ
๋ง์ ์ต์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ํตํฉ๋์์ต๋๋ค. ๋์ ํ๋ ์๋ฅผ ๋ค๋ฉด :
- ์คํ ํ๋ฆ์ ๋ณ๊ฒฝํ๋ ์ฌ์ฉ์ ์ ๋ ฅ.
- ์ธ๋ถ API๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํฉ๋๋ค.
- ๋ฐํ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น.
์์ง์ ์คํ์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ถ์ํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ต๋๋ค. ์ค์๊ฐ ์คํ์ด ์๋ ์ ์ ์ฝ๋. ๋ค์ ์๋ฅผ ๊ณ ๋ คํ์ธ์.
cpp๋ณต์ฌํธ์งvoid dynamicBehavior() {
int userInput;
std::cin >> userInput;
if (userInput > 50) {
std::cout << "High value" << std::endl;
} else {
std::cout << "Low value" << std::endl;
}
}
์ดํ userInput ์ฌ์ฉ์ ์ํธ์์ฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฉฐ, ์ฌ๋ณผ๋ฆญ ์คํ์ ๊ฐ๋ฅํ ๋ชจ๋ ์
๋ ฅ์ ๋ชจ๋ธ๋งํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ํ๋ก๊ทธ๋จ์๋ ์ข
์ข
๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- ์์ธกํ ์ ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ API ํธ์ถ.
- ๋ฐ์ดํฐ๊ฐ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ๋คํธ์ํฌ ์์ฒญ์ ๋๋ค.
- ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ์ด์ ์ฒด์ ์ํธ์์ฉ.
๋์ ๋์์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ผ๋ถ ์ฌ๋ณผ๋ฆญ ์คํ ๋๊ตฌ๋ ๋ค์์ ์ฌ์ฉํฉ๋๋ค.
- ํน์ ๊ฐ์ด ๋ฐํ์์ ํ์ธ๋๋ ์ฝํฌ๋ฆฌํธ ์คํ(๊ตฌ์ฒด์ ์คํ + ์ฌ๋ณผ๋ฆญ ์คํ).
- ์ธ๋ถ ์ข ์์ฑ์ ๋ชจ๋ธ๋งํ๊ธฐ ์ํ ์คํ ํจ์์ ๋๋ค.
- ์ ์ ๋ถ์๊ณผ ๋์ ๋ถ์์ ๊ฒฐํฉํ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
์ด๋ฌํ ๊ฐ์ ์๋ ๋ถ๊ตฌํ๊ณ , ๋งค์ฐ ๋์ ์ธ ์ฝ๋๋ฅผ ๋ถ์ํ๋ ๊ฒ์ ์ฌ์ ํ โโ์ด๋ ค์ด ์ฐ๊ตฌ ๊ณผ์ ์ด๋ฉฐ, ๊ธฐํธ ์คํ๋ง์ผ๋ก๋ ๋ณต์กํ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ์ถฉ๋ถํ์ง ์์ต๋๋ค.
์ฌ๋ณผ๋ฆญ ์คํ์ ์ต์ ํํ๋ ๊ธฐ์
๊ฒฝ๋ก ๊ฐ์ง์น๊ธฐ ๋ฐ ์ ์ฝ ๋จ์ํ
์ฌ๋ณผ๋ฆญ ์คํ์ ์ฃผ์ ๊ณผ์ ์ค ํ๋๋ ๊ฒฝ๋ก ํญ๋ฐ๋ก, ๊ฐ๋ฅํ ์คํ ๊ฒฝ๋ก์ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค. ์ด๋ฅผ ์ํํ๊ธฐ ์ํด ์ฌ๋ณผ๋ฆญ ์คํ ์์ง์ ๊ฒฝ๋ก ๊ฐ์ง์น๊ธฐ ๋ฐ ์ ์ฝ ๋จ์ํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ ํ์ฑ์ ์ ์งํ๋ฉด์ ํ์๋ ์ํ์ ์๋ฅผ ์ค์ ๋๋ค.
๊ฒฝ๋ก ์ ๋ฆฌ๋ ์ค๋ณต๋๊ฑฐ๋ ์คํ ๋ถ๊ฐ๋ฅํ ์คํ ๊ฒฝ๋ก๋ฅผ ๋ฒ๋ฆฌ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ๋ ๊ฒฝ๋ก๊ฐ ๋์ผํ ํ๋ก๊ทธ๋จ ์ํ๋ก ์ด์ด์ง๋ ๊ฒฝ์ฐ, ์ฌ๋ณผ๋ฆญ ์คํ์ ์ด๋ฅผ ๋จ์ผ ํํ์ผ๋ก ๋ณํฉํ์ฌ ๋ถํ์ํ ๋ถ์์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์ด๋ ์ข ์ข ์ํ ๋ณํฉ์ ํตํด ๊ตฌํ๋๋ฉฐ, ์ฌ๊ธฐ์ ๋๋ฑํ ์คํ ์ํ๊ฐ ํ๋๋ก ๊ฒฐํฉ๋์ด ๊ฒฝ๋ก์ ์ด ์๊ฐ ์ค์ด๋ญ๋๋ค.
๋ค์์ C++ ์์ ๋ฅผ ์ดํด๋ณด์ธ์.
cpp๋ณต์ฌํธ์งvoid analyzeInput(int x) {
if (x > 0) {
std::cout << "Positive" << std::endl;
} else {
std::cout << "Non-positive" << std::endl;
}
}
์์ง์ ์คํ์ ๋ ๊ฐ์ง ๋ถ๊ธฐ๋ฅผ ๋ชจ๋ ํ์ํ์ฌ ๊ฐ๊ฐ์ ๋ํ ์ ์ฝ ์กฐ๊ฑด์ ์์ฑํฉ๋๋ค.
- x > 0
- x โค 0
๋ ๋ถ๊ธฐ์์์ ํ์ ๊ณ์ฐ์ด ๋์ผํ ์ํ๋ก ์ด์ด์ง๋ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ณํฉํ์ฌ ์ค๋ณต๋ ์คํ ๊ฒฝ๋ก๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ ์ฝ ์กฐ๊ฑด ๋จ์ํ๋ ๋ถํ์ํ ์ ์ฝ ์กฐ๊ฑด์ ์ ๊ฑฐํ์ฌ ๋ถ์ ์๋๋ฅผ ๋์ด๋ ๋ ๋ค๋ฅธ ํต์ฌ ๊ธฐ์ ์ ๋๋ค. ๋ณต์กํ ๋ ผ๋ฆฌ ํํ์์ ์ ์งํ๋ ๋์ ์คํ ์์ง์ ์กฐ๊ฑด์ ์๋ฒ์ ์ ๋ฌํ๊ธฐ ์ ์ ์ต์ํ์ ํํ๋ก ๋จ์ํํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๊ธฐํธ ์ ์ฝ ์์คํ ์ ๋ค์ ๋ฐฉ์ ์์ด ํฌํจ๋ ๊ฒฝ์ฐ:
nginx๋ณต์ฌํธ์งx > 0
x > -5
๋ ๋ฒ์งธ ์ ์ฝ์ ์ค๋ณต์ ์ด๋ฉฐ ์๋ก์ด ์ ๋ณด๋ฅผ ์ถ๊ฐํ์ง ์์ผ๋ฏ๋ก ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ด ๊ฐ์๋ ์๋ฒ ํจ์จ์ฑ์ ๊ฐ์ ํ์ฌ ๋ ๋น ๋ฅธ ์ฌ๋ณผ๋ฆญ ์คํ์ ํ์ฉํฉ๋๋ค.
์์ง์ ์คํ๊ณผ ๊ตฌ์ฒด์ ์คํ์ ๊ฒฐํฉํ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์
์์ํ ์ฌ๋ณผ๋ฆญ ์คํ์ ์ธ๋ถ ์์คํ ๊ณผ์ ์ํธ์์ฉ๊ณผ ๊ฐ์ ๋ณต์กํ ์ ์ฝ๊ณผ ๋์ ๋์์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ต๋๋ค. ์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ง์ ๋๊ตฌ๋ ์ฌ๋ณผ๋ฆญ ์คํ๊ณผ ๊ตฌ์ฒด์ ์คํ์ ๊ฒฐํฉํ๋ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋๋ฐ, ์ด ๊ธฐ์ ์ ์ฝ์ฝ๋ฆญ ์คํ์ด๋ผ๊ณ ํฉ๋๋ค.
Concolic ์คํ์ ์ฌ๋ณผ๋ฆญ ๊ฐ๊ณผ ์ฝํฌ๋ฆฌํธ ๊ฐ์ ๋ชจ๋ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ฌ๋ณผ๋ฆญ ์คํ์ ์์คํ ํธ์ถ์ด๋ ๋ณต์กํ ์ฐ์ ๊ณผ ๊ฐ์ด ๋ชจ๋ธ๋งํ๊ธฐ ์ด๋ ค์ด ์ฐ์ฐ์ ๋ง๋ ๋๋ง๋ค ์ฝํฌ๋ฆฌํธ ์คํ์ผ๋ก ์ ํํ์ฌ ์ค์ ๊ฐ์ ๊ฒ์ํ๊ณ ๊ฑฐ๊ธฐ์์ ์ฌ๋ณผ๋ฆญ ๋ถ์์ ๊ณ์ํฉ๋๋ค.
์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ์ ์ฝ๋ ํจ์๋ฅผ ์๊ฐํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์งvoid processInput() {
int x;
std::cin >> x;
if (x > 50) {
std::cout << "Large number" << std::endl;
}
}
์์ํ ์ฌ๋ณผ๋ฆญ ์คํ ์์ง์ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋์ ์ผ๋ก ๋ชจ๋ธ๋งํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ต๋๋ค. Concolic ์คํ์ ์ฌ๋ณผ๋ฆญ ์ ์ฝ ์กฐ๊ฑด์ ์ถ์ ํ๋ ๋์์ x = 30๊ณผ ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์คํํ์ฌ ์ด๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ค์ํ ๊ฒฝ๋ก๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์ ๋ ฅ์ ์ฒด๊ณ์ ์ผ๋ก ์์ฑํ์ฌ ํ ์คํธ ๋ฒ์๋ฅผ ๊ฐ์ ํ ์ ์์ต๋๋ค.
ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ํ ์ฌ๋ณผ๋ฆญ ์คํ๊ณผ ๊ตฌ์ฒด์ ์คํ์ ๋์ ์ผ๋ก ์ ํํ์ฌ ํจ์จ์ฑ์ ๊ฐ์ ํ๊ณ , ๋ณต์กํ ๊ณ์ฐ์ด ์ ์ฝ ์กฐ๊ฑด ์๋ฒ๋ฅผ ์๋ํ์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ณผ๋ฆญ ์คํ์ ์ค์ ์ธ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถ์ํ๋ ๋ฐ ์ค์ฉ์ ์ ๋๋ค.
SMT ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ํจ์จ์ฑ ๊ฐ์
์ฌ๋ณผ๋ฆญ ์คํ์ ์ ์ฝ ์กฐ๊ฑด์ ์ฒ๋ฆฌํ๊ณ ์คํ ๊ฐ๋ฅํ ์คํ ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ง์กฑ์ฑ ๋ชจ๋๋ก ์ด๋ก ์๋ฒ์ ์์กดํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ณต์กํ ์ฌ๋ณผ๋ฆญ ์กฐ๊ฑด์ ๋ถ์ ์๋๋ฅผ ๋ฆ์ถ ์ ์์ต๋๋ค. ์ต์ ์ฌ๋ณผ๋ฆญ ์คํ ํ๋ ์์ํฌ๋ ์ฆ๋ถ ์๋น ๋ฐ ์ ์ฝ ์กฐ๊ฑด ์บ์ฑ์ ํตํด ์๋ฒ ์ฑ๋ฅ์ ์ต์ ํํฉ๋๋ค.
์ฆ๋ถ์ ํด๊ฒฐ์ ์๋ฒ๊ฐ ์ฒ์๋ถํฐ ๋ค์ ๊ณ์ฐํ๋ ๋์ ์ด์ ์ ๊ณ์ฐ๋ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ์๋ฒ๋ ์ ์ฝ ์กฐ๊ฑด์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ถ์ํ๋ ๋์ ๊ธฐ์กด ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฑ๋ฅ์ ์ต์ ํํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ์กฐ๊ฑด์ด ํฌํจ๋ ๊ธฐํธ ์คํ ์ธ์ ์์:
cpp๋ณต์ฌํธ์งvoid checkConditions(int x, int y) {
if (x > 5) {
if (y < 10) {
std::cout << "Valid input" << std::endl;
}
}
}
y์ ๋ํ ์ ์ฝ ์กฐ๊ฑด์ x > 5๊ฐ ์ถฉ์กฑ๋๋ ๊ฒฝ์ฐ์๋ง ๊ด๋ จ์ด ์์ต๋๋ค. ์ฆ๋ถ ํ์ด๋ ๋จผ์ x๋ฅผ ์ฒ๋ฆฌํ ๋ค์, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ์ฌ y์ ์ ์ฝ ์กฐ๊ฑด ๊ณ์ฐ์ ์ต์ ํํ์ฌ ์ค๋ณต์ ์ค์ ๋๋ค.
์ ์ฝ ์กฐ๊ฑด ์บ์ฑ์ ์ด์ ์ ํด๊ฒฐ๋ ์กฐ๊ฑด์ ์ ์ฅํ๊ณ ์ ์ฌํ ์ ์ฝ ์กฐ๊ฑด์ด ๋ํ๋ ๋ ์ฌ์ฌ์ฉํจ์ผ๋ก์จ ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํต๋๋ค. ์ด ๊ธฐ์ ์ ๋ฃจํ ๋ฐ ์ฌ๊ท ํจ์์ ๊ฐ์ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์์ ๋ฐ๋ณต์ ์ธ ํจํด์ ๋ถ์ํ๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค.
SMT ์๋ฒ ์ต์ ํ๋ ๋ณต์กํ ์ํํธ์จ์ด์ ๋ํ ์ฌ๋ณผ๋ฆญ ์คํ์ ํ์ฅํ๊ณ ์ ์ฝ ์กฐ๊ฑด ํด๊ฒฐ์ ์ ํ์ฑ์ ์ ์งํ๋ฉด์ ์คํ ์๊ฐ์ ์ค์ด๋ ๋ฐ ํ์์ ์ ๋๋ค.
๋ณ๋ ฌ ์คํ ๋ฐ ํด๋ฆฌ์คํฑ ์ ๋ต
ํ์ฅ์ฑ์ ๋์ฑ ๋์ด๊ธฐ ์ํด ์ต์ ์ ์ฌ๋ณผ๋ฆญ ์คํ ๋๊ตฌ๋ ๋ณ๋ ฌ ์คํ๊ณผ ํด๋ฆฌ์คํฑ ๊ธฐ๋ฐ ๊ฒฝ๋ก ์ ํ ์ ๋ต์ ํ์ฉํฉ๋๋ค.
๋ณ๋ ฌ ์คํ์ ์ฌ๋ฌ ์ฒ๋ฆฌ ์ฅ์น์ ์ฌ๋ณผ๋ฆญ ์คํ ์์ ์ ๋ถ์ฐ์์ผ ๋ ๋ฆฝ์ ์ธ ์คํ ๊ฒฝ๋ก๋ฅผ ๋์์ ๋ถ์ํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ ๋๊ท๋ชจ ์ํํธ์จ์ด ๋ถ์์ ๋ฐํ์์ ํฌ๊ฒ ์ค์ ๋๋ค.
์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ ๋ถ๊ธฐ๊ฐ ์๋ ํจ์๋ฅผ ์๊ฐํด ๋ณด์ธ์.
cpp๋ณต์ฌํธ์งvoid evaluate(int a, int b) {
if (a > 10) {
std::cout << "Branch A" << std::endl;
}
if (b < 5) {
std::cout << "Branch B" << std::endl;
}
}
a์ b์ ์กฐ๊ฑด์ด ๋ ๋ฆฝ์ ์ด๋ฏ๋ก ๋ณ๋ ฌ๋ก ๋ถ์ํ์ฌ ์ ์ฒด ๋ถ์ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค. ์ต์ ํ๋ ์์ํฌ๋ ๋ถ์ฐ ์ปดํจํ ํ๊ฒฝ์ ์ฌ์ฉํ์ฌ ์์ฒ ๊ฐ์ ์ฌ๋ณผ๋ฆญ ๊ฒฝ๋ก๋ฅผ ๋์์ ์คํํ์ฌ ํจ์จ์ฑ์ ๊ฐ์ ํฉ๋๋ค.
ํด๋ฆฌ์คํฑ ์ ๋ต์ ๋ํ ์ฌ๋ณผ๋ฆญ ์คํ์ ์ต์ ํํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๋๋ฑํ๊ฒ ํ์ํ๋ ๋์ , ํด๋ฆฌ์คํฑ ๊ธฐ๋ฐ ์คํ์ ๋ฒ๊ทธ๋ ๋ณด์ ์ทจ์ฝ์ฑ์ด ์์ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์ ๊ฒฝ๋ก๋ฅผ ์ฐ์ ์ํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๊ฒฝํ์ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ง์ ์ฐ์ ์์์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ก ์ด์ด์ง๋ ์คํ ๊ฒฝ๋ก๋ฅผ ๋จผ์ ๋ถ์ํฉ๋๋ค.
- ๊น์ด ์ฐ์ ํ์ ๋๋ ๋๋น ์ฐ์ ํ์, ๊น์ ์คํ ๊ฒฝ๋ก๋ ๋์ ์คํ ๊ฒฝ๋ก ์ค ์ด๋ ๊ฒ์ด ๋ ๊ด๋ จ์ฑ์ด ์๋์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
- ๊ฐ์ด๋ ์คํ, ์ด์ ๋ฒ๊ทธ ๋ณด๊ณ ์ ๋ฑ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ํตํด ์ํ์ฑ์ด ๋์ ์ฝ๋ ์์ญ์ ๋ํ ์ฌ๋ณผ๋ฆญ ์คํ์ด ์ง์๋ฉ๋๋ค.
์ด๋ค ๊ฒฝ๋ก๋ฅผ ๋จผ์ ํ์ํ ์ง ์ง๋ฅ์ ์ผ๋ก ์ ํํจ์ผ๋ก์จ, ํด๋ฆฌ์คํฑ ์ ๋ต์ ์์ง์ ์คํ์ ํจ์จ์ฑ์ ๊ฐ์ ํ๊ณ ๊ฐ์ฅ ๊ด๋ จ์ฑ ์๋ ์คํ ๊ฒฝ๋ก๊ฐ ์ค์ง์ ์ธ ์๊ฐ ์ ํ ๋ด์์ ๋ถ์๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
SMART TS XL: ์ฌ๋ณผ๋ฆญ ์คํ์ ํตํ ์ ์ ์ฝ๋ ๋ถ์ ๊ฐํ
์ฌ๋ณผ๋ฆญ ์คํ์ด ์ ์ ์ฝ๋ ๋ถ์์ ์ค์ํ ๊ตฌ์ฑ ์์๊ฐ ๋๋ฉด์ ๊ฒฝ๋ก ํญ๋ฐ, ์ ์ฝ ์กฐ๊ฑด ํด๊ฒฐ, ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฒ์ฆ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ณ ๊ธ ๋๊ตฌ๊ฐ ํ์ํด์ก์ต๋๋ค. SMART TS XL ์ด๋ฌํ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ต์ ํ๋ ์ฌ๋ณผ๋ฆญ ์คํ, ์๋ํ๋ ์ทจ์ฝ์ฑ ํ์ง, ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์์ ์ํํ ํตํฉ์ ์ ๊ณตํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
์๋ํ๋ ๊ฒฝ๋ก ํ์ ๋ฐ ์ ์ฝ ์ต์ ํ
์ฌ๋ณผ๋ฆญ ์คํ์ ์ฃผ์ ์ฅ์ ๋ฌผ ์ค ํ๋๋ ๊ฒฝ๋ก ํญ๋ฐ์ ๋๋ค. ๊ฒฝ๋ก ํญ๋ฐ์ด๋ ์คํ ๊ฒฝ๋ก์ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๋ ํ์์ ๋งํฉ๋๋ค. SMART TS XL ์ง๋ฅํ ๊ฒฝ๋ก ์ ๋ฆฌ ๋ฐ ์ํ ๋ณํฉ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๊ทน๋ณตํ๊ณ ๊ด๋ จ์ฑ ์๊ณ ์คํ ๊ฐ๋ฅํ ์คํ ๊ฒฝ๋ก๋ง ํ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฒ๊ทธ ํ์ง์ ๋์ ์ ํ๋๋ฅผ ์ ์งํ๋ฉด์ ๊ณ์ฐ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ์กฐ๊ฑด์ด ์๋ ํจ์๋ฅผ ๋ถ์ํ๋ ๊ฒฝ์ฐ:
cpp๋ณต์ฌํธ์งvoid processInput(int x) {
if (x > 100) {
std::cout << "High value" << std::endl;
} else if (x < 0) {
std::cout << "Negative value" << std::endl;
} else {
std::cout << "Normal range" << std::endl;
}
}
SMART TS XL ๋ถํ์ํ ์ค๋ณต ์์ด ๋ชจ๋ ๊ฐ๋ฅํ ์คํ ๊ฒฝ๋ก๊ฐ ๋ถ์๋๋๋ก ํ์ฌ ์ ์ฝ ์กฐ๊ฑด ํด๊ฒฐ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
์ทจ์ฝ์ ํ์ง๋ฅผ ์ํ ๋ณด์ ์ค์ฌ ์ฌ๋ณผ๋ฆญ ์คํ
SMART TS XL ๋ณด์ ๋ถ์์ ์ฌ๋ณผ๋ฆญ ์คํ ๊ธฐ๋ฅ์ ํ์ฅํ์ฌ ๋ฒํผ ์ค๋ฒํ๋ก, ์ ์ ์ค๋ฒํ๋ก ๋ฐ ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์ ๋๋ค. ๋ณด์์ ์ค์ํ ์คํ ๊ฒฝ๋ก๋ฅผ ํฌ๊ดํ๋ ํ ์คํธ ์ฌ๋ก๋ฅผ ์๋์ผ๋ก ์์ฑํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ฐฐํฌ ์ ์ ์ทจ์ฝ์ฑ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ถ์:
cpp๋ณต์ฌํธ์งvoid allocateMemory(int size) {
if (size < 0) {
std::cout << "Invalid size" << std::endl;
return;
}
int* arr = new int[size];
}
SMART TS XL ์์ง์ ์ ์ฝ์ ๋ถ์ํฉ๋๋ค size ๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ ์ธ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ํ๋๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค. size < 0 ์์์น ๋ชปํ ๋์์ด๋ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
ํฅ์๋ ํ์ฅ์ฑ์ ์ํ ํ์ด๋ธ๋ฆฌ๋ ์คํ
์ ๋ฐ๋์ ์ฑ๋ฅ์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด SMART TS XL ํ์ด๋ธ๋ฆฌ๋ ์คํ์ ํตํฉํ์ฌ ์์ง์ ์คํ๊ณผ ๊ตฌ์ฒด์ ์คํ์ ๊ฒฐํฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋๊ตฌ๋ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ๊ตฌ์ฒด์ ์ธ ์คํ์ ์ฌ์ฉํ์ธ์ ๋์ ์ผ๋ก ๊ฐ์ ํด๊ฒฐํ์ฌ ์ ์ฝ ์กฐ๊ฑด ์๋ฒ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
- ์์ง์ ์คํ์ ์ ์ฉํฉ๋๋ค ์ ์ค์ํ ๊ฒฐ์ ์ฌํญ ์ฝ๋์ ํฌํจ๋์ด ํฌ๊ด์ ์ธ ์ ์ฉ์ด ๋ณด์ฅ๋ฉ๋๋ค.
- ๋ฃจํ์ ์ฌ๊ท ๊ตฌ์กฐ ์ต์ ํ ๋ถํ์ํ ๋ฐ๋ณต์ ์ ํํ๋ ๋์์ ์ ์ฌ์ ์ธ ์์ธ ์ฌ๋ก๋ฅผ ํฌ์ฐฉํจ์ผ๋ก์จ ๊ฐ๋ฅํฉ๋๋ค.
์ด ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ SMART TS XL ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์ ์ฌ์ธต์ ์ธ ์คํ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ถ ๋ณต์กํ ์ํฐํ๋ผ์ด์ฆ ์์ค ์ ํ๋ฆฌ์ผ์ด์ ์๋ ๋์ ํ์ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค.
CI/CD ํ์ดํ๋ผ์ธ๊ณผ์ ์ํํ ํตํฉ
SMART TS XL ์ต์ DevSecOps ํ๊ฒฝ์ ์ํด ์ค๊ณ๋์ด ํ์ด ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- CI/CD ์ํฌํ๋ก์์ ์ฌ๋ณผ๋ฆญ ์คํ ๊ธฐ๋ฐ ๋ฒ๊ทธ ๊ฐ์ง๋ฅผ ์๋ํํฉ๋๋ค.
- ๋ฐฐํฌ ์ ์ ์ํ์ด ๋์ ๊ฒฝ๋ก๋ฅผ ํ์ํ์ฌ ๋ณด์ ์ ์ฑ ์ ์ํํฉ๋๋ค.
- ์์ง์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์กฐํ๋ ํ ์คํธ ์ฌ๋ก๋ฅผ ์์ฑํ์ฌ ํ ์คํธ ๋ฒ์๋ฅผ ๊ฐ์ ํฉ๋๋ค.
๋ณด๋ค ์ค๋งํธํ ์ ์ ์ฝ๋ ๋ถ์์ ์ํ ์ฌ๋ณผ๋ฆญ ์คํ ํ์ฉ
์ฌ๋ณผ๋ฆญ ์คํ์ ์ ์ ์ฝ๋ ๋ถ์์์ ๊ฐ๋ ฅํ ๋๊ตฌ๋ก ๋ฑ์ฅํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ ์คํ ๊ฒฝ๋ก๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ํ์ํ ์ ์๋๋ก ํฉ๋๋ค. ์๋์ผ๋ก ์์ฑ๋ ํ ์คํธ ์ฌ๋ก์ ์์กดํ๋ ๊ธฐ์กด ํ ์คํธ์ ๋ฌ๋ฆฌ ์ฌ๋ณผ๋ฆญ ์คํ์ ์ทจ์ฝ์ฑ ํ์ง๋ฅผ ์๋ํํ๊ณ , ์ฃ์ง ์ผ์ด์ค๋ฅผ ์ฐพ๊ณ , ๋๋ฌํ ์ ์๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํ๋ก๊ทธ๋จ ์ ๋ ฅ์ ์ฌ๋ณผ๋ฆญ ๋ณ์๋ก ์ฒ๋ฆฌํ์ฌ ๊ทธ๋ ์ง ์์ผ๋ฉด ์์์ฐจ๋ฆฌ์ง ๋ชปํ ์ ์๋ ์ ์ฌ์ ์ธ ์ํํธ์จ์ด ์ค๋ฅ์ ๋ํ ์ฌ์ธต์ ์ธ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ๋ฒํผ ์ค๋ฒํ๋ก ๋ฐ ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ ์๋ณ์์ ํ ์คํธ ์์ฑ ์๋ํ์ ์ด๋ฅด๊ธฐ๊น์ง ์ฌ๋ณผ๋ฆญ ์คํ์ ์ํํธ์จ์ด ํ์ง๊ณผ ๋ณด์์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
์ด๋ฌํ ์ฅ์ ์๋ ๋ถ๊ตฌํ๊ณ ์ฌ๋ณผ๋ฆญ ์คํ์ ๊ฒฝ๋ก ํญ๋ฐ, ๋ณต์กํ ์ ์ฝ ์กฐ๊ฑด ํด๊ฒฐ, ํ์ฅ์ฑ ๋ฌธ์ ์ ๊ฐ์ ๊ธฐ์ ์ ์ฅ์ ๋ฌผ์ ์ง๋ฉดํฉ๋๋ค. ๊ทธ๋ฌ๋ AI ๊ธฐ๋ฐ ๋ถ์, ํ์ด๋ธ๋ฆฌ๋ ์คํ ๊ธฐ์ , ์ ์ฝ ์กฐ๊ฑด ์๋ฒ ์ต์ ํ์ ๋ฐ์ ์ผ๋ก ์ฌ๋ณผ๋ฆญ ์คํ์ด ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ฑ ์ค์ฉ์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ์ํํธ์จ์ด๊ฐ ๋ณต์กํด์ง์ ๋ฐ๋ผ ์ฌ๋ณผ๋ฆญ ์คํ์ ์ ์ ๋ถ์ ์ํฌํ๋ก์ ํตํฉํ๋ ๊ฒ์ ๋ฏธ๋์ ์์ ํ๊ณ ์์ ์ ์ด๋ฉฐ ๊ณ ์ฑ๋ฅ ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํ ๊ฒ์ ๋๋ค.