| C++์ธ์ด์ ๊ฐ์
C++์ธ์ด๋ C์ธ์ด๋ฅผ ํ์ฅํ์ฌ ๋ง๋ค์ด์ง ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค. ๋ช๊ฐ์ง ์์ธ๋ฅผ ์ ์ธํ๊ณ ๋ C์ ๋ฌธ๋ฒ์ ๊ทธ๋๋ก ๋ฐ๋ฅธ๋ค.
์ฃผ์ ํ์ฅ ๋ด์ฉ
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ: ํด๋์ค, ์์, ๋คํ์ฑ, ๋์ ๋ฐ์ธ๋ฉ ๋ฑ
- ์ผ๋ฐํ ํ๋ก๊ทธ๋๋ฐ: ํฌํ๋ฆฟ
- ์์ธ ์ฒ๋ฆฌ
| C++์ธ์ด์ ์์ฑ ๋ฐ ๋น๋
| ์์ค ํ์ผ(์์ค ํ๋ก๊ทธ๋จ ํ์ผ): C++๋ก ์์ฑํ ํ๋ก๊ทธ๋จ์ ๋ด๊ณ ์๋ ํ์ผ์ ์์ค ํ๋ก๊ทธ๋จ ํ์ผ์ด๋ผ๊ณ ํ๋ค. ์ฒ๋ฆฌํ๊ณ ์ ํ๋ ์์ ์ C++ ๋ช ๋ น์ด๋ฅผ ๋ด๊ณ ์๋ ํ์ผ์ ๋งํ๋ค. ํ์ฅ์๋ .cpp, .cxx, .C (์ผ๋ฐ์ ์ผ๋ก .cpp๋ฅผ ์ฌ์ฉํ๋ค.)
| ํค๋ ํ์ผ: ์ฌ๋ฌ ์์ค ํ์ผ์ ๊ณตํต์ ์ผ๋ก ์ ์ธ๋๋ ๋ด์ฉ์ ๋ด๊ณ ์๋ ํ์ผ์ด๋ค. #include๋ผ๋ ์ ํ์ฒ๋ฆฌ๊ธฐ ์ง์์ด์ ์ํด ์์ค ํ๋ก๊ทธ๋จ ํ์ผ์ ์ฝ์ ๋์ด ํจ๊ป ์ปดํ์ผ ๋๋ค. ํ์ฅ์๋ .h, .hxx (์ผ๋ฐ์ ์ผ๋ก .h๋ฅผ ์ฌ์ฉํ๋ค.)
| ๋ชฉ์ ํ์ผ: ์์ค ํ์ผ์ ํค๋ ํ์ผ์ ๋ด์ฉ์ด ์ฝ์ ๋์ด ์ปดํ์ผํ ๊ฒฐ๊ณผ ๋ชฉ์ ํ์ผ์ด ์์ฑ๋๋ค. ํ์ฅ์๋ .obg
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ์ฌ์ฉํ ์ ์๋ ํด๋์ค, ๊ฐ, ํจ์ ๋ฑ์ ๋ชจ์๋์ ๊ฒ์ ์๋ฏธํ๋ค. ํ๋ก๊ทธ๋จ์ ์กฐ๊ธ ๋ ํธ๋ฆฌํ๊ฒ ๊ฐ๋ฐํ ์ ์๊ฒ ํด์ค๋ค. C++์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ฒ ์ธ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๋ง๋ค๊ธฐ๋ ํ๋ค.
| ๋งํฌ: ๋ชฉ์ ํ์ผ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํด์ ์คํ ํ์ผ(.exe)์ ๋ง๋๋ ๊ฒ์ ๋งํฌ(link)๋ผ๊ณ ํ๋ค. ์ด ์์ ์ ํ๋ ๋๊ตฌ๋ฅผ ๋ง์ปค๋ผ๊ณ ๋ถ๋ฅธ๋ค.
| ๋น๋: ์ปดํ์ผ๊ณผ ๋งํฌ๋ฅผ ํตํด ์คํ ํ์ผ์ ๋ง๋๋ ๊ณผ์ ์ ํตํฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋น๋(build)ํ๋ค๊ณ ๋งํ๋ค.
| IDE(ํตํฉ๊ฐ๋ฐํ๊ฒฝ): C++์ธ์ด๋ก ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ์ํด์๋ ์์ค ํ์ผ์ ์์ฑํ๊ณ , ์ปดํ์ผํ๊ณ , ๋งํฌ๋ผ๋ ๊ณผ์ ์ ๊ฑฐ์ณ ์คํ ํ์ผ์ ๋ง๋ค์ด์ผ ํ๋ค. ํ๋ก๊ทธ๋จ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์์ ํ๋ ๋๋ฒ๊น ๊น์ง ๋ง์ณ์ผ ํ๋๋ฐ ์ด ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ชจ์๋์ ๊ฒ์ ํตํฉ๊ฐ๋ฐํ๊ฒฝ(IDE, intergrated development enviornment)๋ผ๊ณ ํ๋ค. ๋ํ์ ์ผ๋ก ๋น์ฃผ์ผ ์คํ๋์ค, ์ดํด๋ฆฝ์ค, Dev C++ ๋ฑ์ด ์๋ค.
| ์ ์ธ๊ณผ ์ ์
ํ๋ก๊ทธ๋จ ์ค ์ฌ์ฉํ ์ด๋ฆ๊ณผ ๊ทธ ํ์์ ์๋ฆฌ๋ ๊ฒ์ ์ ์ธ์ด๋ผ๊ณ ํ๋ค. ์ด๋ฌํ ์ ์ธ์ ํตํด ๊ทธ ์ด๋ฆ์ ๋ํ ์ค์ฒด๊ฐ ๋ง๋ค์ด์ง ๊ฒฝ์ฐ ์ ์๋ผ๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด,
int i;
๋ผ๊ณ ๋ฌธ์ฅ์ ์์ฑํ ๊ฒฝ์ฐ i๊ฐ int(์ ์)ํ ๊ฐ์ ์ ์ฅํ๋ ๋ณ์์ ์ด๋ฆ์์ ์ ์ธํจ๊ณผ ๋์์ ์ ์ฅ ๊ณต๊ฐ์ ํ ๋นํ๋ค. ์ด ๋ ์ด ๋ฌธ์ฅ์ ๋ณ์ i๋ฅผ ์ ์ํ๋ ๋ฌธ์ฅ์ด๋ผ๊ณ ํ๋ค. ํ๋์ ๋ฒ์ญ ๋จ์ ๋ด์์ ์ด๋ฆ์ ์ ์๋ ๋จ ํ ๋ฒ๋ง ํ ์ ์๋ค.
int i;
int i; // Error: i์ ์ค๋ณต ์ ์
| C++ํ๋ก๊ทธ๋๋ฐ ์ฒซ๊ฑธ์
| ์ฃผ์
์ฃผ์(comment)๋ ํ๋ก๊ทธ๋จ ๋ด์ ์ค๋ช ๋ฌธ์ ๋ฃ์ ๊ฒ์ผ๋ก ์ปดํ์ผ๋ฌ๋ ์ฃผ์์ ํด๋นํ๋ ๋ถ๋ถ์ ๋ฒ์ญํ์ง ์๊ณ ๊ฑด๋๋ด๋ค. C++์์ ์ฃผ์์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์๋ค.
/* */ ์ฌ์ด์ ์ฃผ์์ ์์ฑํ๋ค. ์ฌ๋ฌ ํ์ ์ฃผ์์ ์์ฑํ ๋๋ ์ด ๋ฐฉ๋ฒ์ด ํธํ๋ค.
/* ์ด๋ฐ์์ผ๋ก ์์ฑํ ์ ์๋ค.
์ฌ๋ฌ ์ค๋ก ๊ธธ๊ฒ ์์ฑํ ๋ ์ฐ๋ฉด ํธ๋ฆฌํ๋ค. */
// ๋ ๊ฐ์ ์ฌ๋์ฌ๋ฅผ ์ฐ๋ฉด ๊ทธ ํ์ ๋ท๋ถ๋ถ์ ์ฃผ์์ผ๋ก ๊ฐ์ฃผํ๋ค.
int i; // intํ ๋ณ์ i ์ ์ธ
| ์ ํ ์ฒ๋ฆฌ
์ปดํ์ผ๋๊ธฐ ์ ์ ์ ํ์ฒ๋ฆฌ ์์ ์ ๊ฑฐ์น๋๋ฐ, ์ ํ์ฒ๋ฆฌ๊ธฐ๊ฐ ์ด๋ค ์์ ์ ํ ์ง ์ง์ํ๋ ๋ช ๋ น์ ์ ํ์ฒ๋ฆฌ๊ธฐ ์ง์์ด๋ผ๊ณ ํ๋ค. #์ผ๋ก ์์ํ๋ฉฐ ํ ํ์ ํ ๋ฌธ์ฅ์ฉ ์์ฑํ๋ค.
ํค๋ ํ์ผ ๊ฒฐํฉ(#include), ๋งคํฌ๋ก ์ ์ธ(#define), ๋งคํฌ๋ก ํด์ (#undef), ์กฐ๊ฑด๋ถ ์ปดํ์ผ(#if, #ifdef, #ifndef) ๋ฑ์ด ์ฌ์ฉ๋๋ค.
์ด๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํ์ผ์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ < > ๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ค. ex) #include <iostream>
์์ฑ ์ค์ธ ์์ค ํ์ผ๊ณผ ๊ฐ์ ํด๋ ๋ด์ ํ์ผ์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ " " ๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ค. ex) #include "header"
* iostream์ C++ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ํค๋ ํ์ผ๋ก ์คํธ๋ฆผ ์ ์ถ๋ ฅ์ ์ํ ์ฌํญ๋ค์ ์ ์ธํ๋ ๋ด์ฉ์ ๋ด์ ํค๋ ํ์ผ์ด๋ค. std::cout ๊ณผ std::cin, std::endl์ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ์ฌํญ์ ํฌํจํ๊ณ ์๋ค.
Input Output STREAM → iostream
standard → std
| ๋ฌธ์ฅ
C++ ํ๋ก๊ทธ๋จ์์ ํ๋์ ๋ฌธ์ฅ์ ์ ํด์ง ๋ฌธ๋ฒ์ ๋ฐ๋ผ ๋์ดํ์ฌ ์์ฑํ๋ค. ํ ๋ฌธ์ฅ์ ๋์๋ ์ธ๋ฏธ์ฝ๋ก (;)์ ๊ธฐ์ ํ์ฌ ๋ค์ ๋ฌธ์ฅ๊ณผ ๊ตฌ๋ถํ๋ค.
์ฌ๋ฌ ๊ฐ์ ๋ฌธ์ฅ์ { } ๊ธฐํธ๋ก ํ ๋ฐ ๋ฌถ์ด ํํํ ๊ทธ๋ฃน์ ๋ธ๋ก(block)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ธ๋ก์ ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์ฅ์ ๋ฌถ์ด ํ๋์ ๋ฌธ์ฅ์ฒ๋ผ ์ทจ๊ธํ๊ฑฐ๋ ํจ์์ ๋ชธ์ฒด๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
| ํจ์
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ๋จ์ ์ค ํ๋์ด๋ค. ๋ชจ๋ C++ ํ๋ก๊ทธ๋จ์ ํ๋ ์ด์์ ํจ์๋ก ๊ตฌ์ฑ๋๋ฉฐ ๊ทธ ์ค ์ด๋ฆ์ด main()์ธ ํจ์๋ถํฐ ํ๋ก๊ทธ๋จ์ด ์์๋๋ค. return ๋ช ๋ น์ ํจ์๋ฅผ ๋ง์น๊ณ ๊ทธ ํจ์๋ฅผ ํธ์ถํ ๊ณณ์ผ๋ก ๋๋์๊ฐ๊ฒ ํ๋ ๋ช ๋ น์ด์ด๋ค. main()ํจ์์์ return์ ํ๋ฉด ํ๋ก๊ทธ๋จ์ด ๋๋๋ค.
| ๋ช ์นญ๊ณต๊ฐ
๋ช ์นญ๊ณต๊ฐ(namespace)์ ํน์ ํ ์ด๋ฆ๋ค์ด ์ธ์๋๋ ํ๋ก๊ทธ๋จ์ ํ ๋ถ๋ถ์ ์๋ฏธํ๋ค. ์ฌ๋ฌ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ํ๋ก๊ทธ๋จ์ ๋ฌถ์ด ํ๋์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๊ฒฝ์ฐ ์ด๋ฆ์ด ์ค๋ณต๋๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ํ๋์ ๋ช ์นญ์ ํ ๋ฒ๋ง ์ ์๋์ด์ผ ํ๋ค. ๋์ผํ ๋ช ์นญ์ด๋ผ๋ ์๋ก ๋ค๋ฅธ ๋ช ์นญ๊ณต๊ฐ์์ ์ ์๋์๋ค๋ฉด ๋ณ๊ฐ์ ๊ฒ์ผ๋ก ๋ณธ๋ค.
#include <iostream>
namespace NameSpace1 { int a = 10; }
namespace NameSpace2 { int a = 20; }
int a = 30; // ์ ์ญ๋ณ์
namespace NameSpace1 { int b = 50; }
int main()
{
int a = 40;
std::cout << NameSpace1::a << std::endl;
std::cout << NameSpace2::a << std::endl;
std::cout << ::a << std::endl; // ์ ์ญ๋ณ์ a
std::cout << a << std::endl;
std::cout << NameSpace1::b << std::endl;
return 0;
}
10
20
30
40
50
๊ฒฐ๊ณผ
๋ช ์นญ๊ณต๊ฐ ๋ด์ ์ ์๋ ์ด๋ฆ์ ๊ทธ ์์ญ ๋ฐ์์ ์ฌ์ฉํ ๋ ์์ญ์๋ณ ์ฐ์ฐ์(::)๋ก ์์๋ ๋ช ์นญ๊ณต๊ฐ์ ์ฒจ๋ถํด์ผํ๋ค.
ํน์ ๋ช ์นญ๊ณต๊ฐ์ ์ํ์ง ์๋ ์์ญ์ ์ ์ญ ๋ช ์นญ๊ณต๊ฐ(global namespace)์ ํด๋นํ๋ค.
main() ํจ์ ๋ธ๋ก ๋ด์ a๊ฐ ์๋๋ผ ์ ์ญ ๋ช ์นญ๊ณต๊ฐ์ a๋ฅผ ํธ์ถํ๊ธฐ ์ํด์๋ ์์ญ์๋ณ ์ฐ์ฐ์(::)๋ฅผ ์ฒจ๋ถํ๋ค. 11ํ ์ฐธ๊ณ .
C++ ์์ ์ ๊ณต๋๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๋ฆ์ ๋ชจ๋ std๋ผ๋ ๋ช ์นญ๊ณต๊ฐ์ ํฌํจ๋๋ค. std์ฒ๋ผ ํน์ ๋ช ์นญ๊ณต๊ฐ์ ์ ์๋ ์ด๋ฆ์ ์์ฃผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋งค๋ฒ ๋ช ์นญ๊ณต๊ฐ์ ์ง์ ํ๋ ๊ฒ์ด ๋ฒ๊ฑฐ๋ก์ธ ์ ์๋ค. ์ด๋ using ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
using namespace std;
๋๋
using std::cout;
using std::endl;
์ด๋ผ๋ ๋ฌธ์ฅ์ ๋ฃ์ผ๋ฉด ์ฝ๋๋ฅผ ๋ ๊ฐํธํ๊ฒ ์์ฑํ ์ ์๋ค.
using์ ํน์ ๋ช ์นญ ๊ณต๊ฐ ๋ด์ ๋ชจ๋ ์ด๋ฆ ํน์ ํน์ ๋ช ์นญ๊ณต๊ฐ ๋ด์ ํน์ ์ด๋ฆ์ ๋ช ์นญ๊ณต๊ฐ์ ์ง์ ํ์ง ์๊ณ ๋ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
#include <iostream>
using namespace std;
namespace NameSpace1 { int a = 10; }
namespace NameSpace2 { int a = 20; }
int a = 30; // ์ ์ญ๋ณ์
namespace NameSpace1 { int b = 50; }
int main()
{
int a = 40;
cout << NameSpace1::a << endl;
cout << NameSpace2::a << endl;
cout << ::a << endl; // ์ ์ญ๋ณ์ a ์ถ๋ ฅ
cout << a << endl; // main() ํจ์ ๋ด ์ง์ญ๋ณ์ a ์ถ๋ ฅ
cout << NameSpace1::b << endl;
return 0;
}
10
20
30
40
50
๊ฒฐ๊ณผ
| ์์ธ ์ฒ๋ฆฌ(Exception Handling)
๋์ ๋์ค ์์ ์ธ์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ๋งํ ์ํฉ์ ๋ฏธ์ฐ์ ๋ฐฉ์งํ๋ ์ฒ๋ฆฌ. ๋ฌธ๋ฒ์ ์ธ ์ค๋ฅ๋ ์์ง๋ง ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์๋ฌ๋ฅผ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ ๊ฐ์ง๊ณ ์๋ ์ฝ๋๊ฐ ๋์ ์ํฉ์ ๋ฐ๋ผ ๋ฐ์์ํฌ ์ ์๋ ์๋ฌ๋ฅผ ์ฌ์ ์ ์ ์ ํ ์ฒ๋ฆฌํ๋ ๊ฒ. ํ๋ก๊ทธ๋จ์ ์๊ธฐ์น ์์ ์ข ๋ฃ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด ์ค์์๋๋ค.
try ์์ธ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋ ์์ญ์ ์ฒ๋ฆฌํ๋ค. ์ด ๋ธ๋ก์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด throw ๋ช ๋ น์ด๋ก ์์ธ๋ฅผ ๋๊ธด๋ค.
`try` | ์์ธ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋ ์์ญ์ ์ฒ๋ฆฌํ๋ค. ์ด ๋ธ๋ก์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด throw ๋ช ๋ น์ด๋ก ์์ธ๋ฅผ ๋๊ธด๋ค. |
`throw` | ์์ธ๋ฅผ ๋์ง๋ค. |
`catch` | ์์ธ ๋ฐ์ ์ ํด๋น ๋ธ๋ก์ผ๋ก ๋์ด์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค. |
int a = 1;
int zero = 0;
int result = 0;
try {
if(zero == 0) throw runtime_error("0์ผ๋ก ๋๋ ์ ์์ต๋๋ค.");
result = a / zero;
}
catch (exception& e) {
cout << e.what() << endl;
}
catch (const char* e) {
cout << e << endl;
}
// 0์ผ๋ก ๋๋ ์ ์์ต๋๋ค.
#include <iostream>
using namespace std;
void Devide(int a, int b) {
if (b == 0) {
//throw runtime_error("0์ผ๋ก ๋๋ ์ ์์ต๋๋ค.");
throw b;
}
cout << a / b << endl;
}
int main() {
try {
Devide(10, 0);
}
catch (int e) {
cout << e << "์ผ๋ก ๋๋ ์ ์์ต๋๋ค." << endl;
}
catch (exception& e) {
cout << e.what() << endl;
}
return 0;
}
โจ์๋ฐ์ ๊ฒฝ์ฐ ์์ธ๋ฅผ ์์ฑํ ๋ try ๋ธ๋ก ๋ด์์ if๋ฌธ ๋์ ์ฝ๋๋ฅผ ์ ๊ธฐ๋ง ํด๋ ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ๊ฐ์งํ๊ณ catch ๋ฌธ์ผ๋ก ๋์ด๊ฐ์ง๋ง, C++์์๋ if๋ฌธ์ผ๋ก ์์ธ๋ฅผ ๋์ ธ์ผํ๋ค.
'C, C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] ์์(Inheritance) (0) | 2024.08.29 |
---|---|
[C++] ๊ฐ์ฒด ์งํฅ (6) | 2024.08.19 |
[C] ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (0) | 2024.08.13 |
[C] ๊ตฌ์กฐ์ฒด, ๊ณต์ฉ์ฒด (0) | 2024.08.13 |
[C] C์ธ์ด ๊ธฐ์ด (0) | 2024.08.09 |