C, C++

[C++] ๊ธฐ์ดˆ

๋ฒผ๋ฆฌ01 2023. 8. 25. 18:19

| 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