๊ณต๋ถ์ค์ธ ํ๋ถ์์ ๋๋ค. ํ๋ฆฐ ๋ถ๋ถ์ด ์๋ค๋ฉด ๊ผญ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์ :)
c++ ์ฝ๋๋ฅผ ์ง๋ณด๋ฉด ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ๋ง์ด ๋ดค์ ๊ฒ์ด๋ค.
using namespace std;
์ ์ค์ ๋ฌด์์ด๊ณ ์ ์ฌ์ฉํ๋ ๊ฒ์ผ๊น?
โถ c++ Namespace๋?
๊ฐ๋จํ๊ฒ namespace๋ ์ด๋ฆ ๊ณต๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ณดํต ํ๋ก๊ทธ๋จ์ ์งค ๋ ์ฌ๋ฌ ํ์ผ๋ค์ด ์๊ธฐ๊ธฐ ๋ง๋ จ์ด๋ค.
๊ทธ ํ์ผ๋ค์ ํ๊บผ๋ฒ์ ์ปดํ์ผํ๋ ค๊ณ ํ ๋ ๊ฐ์ ์ด๋ฆ์ ํจ์๋ ๊ตฌ์กฐ์ฒด๊ฐ ์กด์ฌํ๋ค๋ฉด ์ปดํจํฐ๋ ์ด์ ๋ํ ์ค๋ฅ๋ฅผ ๋ธ๋ค.
๊ฐ์ ์ด๋ฆ์ ๋ณ์๋ ํจ์, ๊ตฌ์กฐ์ฒด๊ฐ ์์ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋น์ฐํ ์ผ์ด๋ค. ์ด๋ฆ ์ถฉ๋์ด ์ผ์ด๋ฌ๊ธฐ ๋๋ฌธ์ด๋ค.
Namespace๋ ์ด๋ฌํ ์ด๋ฆ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด์ ๋ง๋ค์ด์ง ๊ฒ์ด๋ค.
Namespace๋ ๋ณ์, ํจ์, ๊ตฌ์กฐ์ฒด ๋ฑ์ ์์์ ์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
์์์ ์ง์ ํด์ค์ผ๋ก์จ ๊ฐ์ ์ด๋ฆ์ด์ด๋ ํท๊ฐ๋ฆฌ์ง ์๋๋ก ๋์์ฃผ๋ ๊ฒ์ด๋ค.
์๋ ์ฝ๋๋ฅผ ๋ด๋ณด์.
#include <iostream>
using namespace std; //์ด๊ฑฐ๋ ๋์ค์ ์ค๋ช
ํ๋๋ก ํ๊ฒ ๋ค
int cal(int a, int b){ //๋ํ๋ ํจ์
int result = a + b;
return result;
}
int cal(int a, int b){ //๋นผ๋ ํจ์
int result = a - b;
return result;
}
int main(){
int a = 5;
int b = 3;
int add = cal(a, b);
int sub = cal(a, b);
cout << sum << endl;
cout << sub << endl;
}
cal์ด๋ผ๋ ํจ์ ๋๊ฐ๊ฐ ์ด๋ฆ ์ถฉ๋์ ์ผ์ผํค๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฌ๋ค.
namespace.cpp:8:5: error: redefinition of 'cal'
int cal(int a, int b){
^
namespace.cpp:3:5: note: previous definition is here
int cal(int a, int b){
^
1 error generated.
โถ Namespace ์ฌ์ฉ๋ฒ
Namespace๋ก ๊ฐ์ธ๊ธฐ!
Namespace๋ ํจ์๋ฟ๋ง ์๋๋ผ ๊ตฌ์กฐ์ฒด, ๋ณ์ ๋ฑ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ค.
namespace ๋ค์์คํ์ด์ค ์ด๋ฆ {
ํจ์, ๊ตฌ์กฐ์ฒด, ๋ณ์ ๋ฑ ์ ์ธ
}
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๋ ๊ฐ์ cal ํจ์๋ฅผ namespace๋ก ๊ฐ์ธ๋ฉด ์ด๋ฆ ์ถฉ๋์ ํด๊ฒฐํ ์ ์๋ค.
namespace Add {
int cal(int a, int b){ //๋ํ๋ ํจ์
int result = a + b;
return result;
}
}
namespace Sub {
int cal(int a, int b){ //๋นผ๋ ํจ์
int result = a - b;
return result;
}
}
โถ Namespace ์์ ์ ๊ทผ๋ฒ
1. ํ์ ๋ ์ด๋ฆ(qualified name)์ ์ฌ์ฉํ ์ ๊ทผ
Namespace_name::์์
๊ฐ์ธ์ฃผ์๋ namespace ์ด๋ฆ๊ณผ ์ฝ๋ก ๋๊ฐ๋ฅผ ์ ์ด์ฃผ๊ณ ํธ์ถํ๊ณ ์ถ์ ์์ ์ด๋ฆ์ ์ด์ด ์ ์ด์ฃผ๋ฉด ๋๋ค.
์๋ ์ฝ๋์ฒ๋ผ ๋ง์ด๋ค.
โป :: <- scope resolution operator
int main(){
int a = 5;
int b = 3;
int add = Add::cal(a, b);
int sub = Sub::cal(a, b);
cout << sum << endl;
cout << sub << endl;
}
์ด ๋ฐฉ๋ฒ์ ์ฝ๋๊ฐ ๊ธธ์ด์ง ์ ์๊ณ ๋ฒ๊ฑฐ๋ก์ธ ์ ์์ง๋ง ๋ช ํํ๊ฒ ์ด๋ค namespace์ ๋ค์ด๊ฐ๋์ง ํ ๋์ ๋ณผ ์ ์๋ค.
2. ์ ์ญ using ์ง์์ด ์ ์ธ(declaration)
๋งค๋ฒ namespace ์ด๋ฆ์ ์ ๊ธฐ ๋ฒ๊ฑฐ๋กญ๋ค๋ฉด ์ด ๋ฐฉ๋ฒ์ ์ฐ๋ฉด ์ข๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํจ์ผ๋ก์จ ๋งค๋ฒ namespace ์ด๋ฆ์ ์ ๋ ์ผ์ ์ค ์ผ ์ ์๋ค.
using Add::cal;
using Add::cal;
int main(){
int a = 5;
int b = 3;
int add = cal(a, b);
//int add = Add::cal(a, b); //์ด ๋ฐฉ๋ฒ ๋ํ ๊ฐ๋ฅํ๋ค.
int sub = Sub::cal(a, b);
cout << add << endl;
cout << sub << endl;
}
โป ์ฃผ์ํด์ผ ํ ์ ์ Sub๋ผ๋ namespace ์์ ๋ค์ด์๋ cal ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ๋ฌด์กฐ๊ฑด Sub::๋ฅผ ๋ถ์ฌ์ ํธ์ถํด์ฃผ์ด์ผ ํ๋ค.
3. ์ ์ญ using ์ง์์ด ์ฌ์ฉ(directive)
๋ง์ฝ ํน์ namespace ์์ ์๋ ๋ชจ๋ ํจ์๋, ๋ณ์, ๊ตฌ์กฐ์ฒด๋ฅผ namespace ์ด๋ฆ์ ์ ์ด์ฃผ์ง ์๊ณ ์์ฒด ์ด๋ฆ์ผ๋ก๋ง ํธ์ถํ๊ณ ์ถ๋ค๋ฉด ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
using namespace ๋ค์์คํ์ด์ค์ด๋ฆ;
์๋ ์ฝ๋๋ฅผ ๋ด๋ณด์.
#include <iostream>
using namespace std;
namespace MINMAX {
int min(int a, int b){ //์์ ์ ๋ฐํ
if(a < b)
return a;
return b;
}
int max(int a, int b){ //ํฐ ์ ๋ฐํ
if(a > b)
return a;
return b;
}
}
int main(){
int a = 5;
int b = 3;
int min_num = MINMAX::min(a, b);
int max_num = MINMAX::max(a, b);
cout << "minimum number: " << min_num << endl;
cout << "maximum number: " << max_num << endl;
}
min, max ํจ์๋ ๊ฐ๊ฐ ๋ ์ ์ค ์๊ฑฐ๋ ํฐ ์๋ฅผ ๋ฐํํ๋ ๊ฐ๋จํ ํจ์์ด๋ค.
using namespace MINMAX; ๋ฅผ ํด์ฃผ๋ฉด MINMAX namespace ์์ ๋ค์ด์๋ min, max ํจ์๋ ๊ทธ ์์ฒด๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์๋ ์ฝ๋ ์ฒ๋ผ๋ง์ด๋ค.
using namespace MINMAX;
int main(){
int a = 5;
int b = 3;
int min_num = min(a, b);
int max_num = max(a, b);
cout << "minimum number: " << min_num << endl;
cout << "maximum number: " << max_num << endl;
}
minimum number: 3
maximum number: 5
4. ์ ์ญ namespace ์ ๊ทผ ๋ฐฉ๋ฒ(global namespace)
์ง๊ธ๊น์ง namespace๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์ namespace์ด๋ฆ::์์์ด๋ฆ์ ํด์ฃผ๋ฉด ๋๋ค๊ณ ํ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ธ๋ก๋ฒ๋ก ๊ฐ์ ์ด๋ฆ์ธ ํจ์๊ฐ ์กด์ฌํ๋ค๋ฉด ์ด๋ป๊ฒ ๊ธ๋ก๋ฒ์์๋ฅผ ํธ์ถํ ์ ์์๊น?
๊ธ๋ก๋ฒ ์์๋ฅผ ํธ์ถํ๊ณ ์ถ์ ๋๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ค.
1. using namespace๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ
2. using namespace๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
๋จผ์ ์ฒซ ๊ฒฝ์ฐ๋ฅผ ๋ณด์.
<using namespace๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ>
#include <iostream>
using namespace std;
namespace PRINT {
void print_sentence(){
cout << "์ด ํจ์๋ PRINT๋ผ๋ ์ด๋ฆ ์์ญ ์์ ์์ต๋๋ค." << endl;
}
}
void print_sentence(){
cout << "์ด ํจ์๋ global๋ก ์กด์ฌํฉ๋๋ค." << endl;
}
int main(){
int a = 5;
print_sentence(); //์ฐ์ ์์ 1 : ๊ธ๋ก๋ฒ๋ก ์ถ๋ ฅ
::print_sentence(); //๊ธ๋ก๋ฒ๋ก ์ถ๋ ฅ
PRINT::print_sentence(); //namespace๋ก ์ถ๋ ฅ
return 0;
}
์ด ํจ์๋ global๋ก ์กด์ฌํฉ๋๋ค.
์ด ํจ์๋ global๋ก ์กด์ฌํฉ๋๋ค.
์ด ํจ์๋ PRINT๋ผ๋ ์ด๋ฆ ์์ญ ์์ ์์ต๋๋ค.
์์ ํจ์๋ namespace ์์ ์กด์ฌํ๋ printํจ์์ ๊ธ๋ก๋ฒ๋ก ์กด์ฌํ๋ printํจ์๋ฅผ ์ด๋ป๊ฒ ํธ์ถํ๋์ง ๋ณด์ฌ์ค๋ค.
์ด ๊ฒฝ์ฐ print_sentence ํจ์๋ ๊ทธ ์์ฒด๋ก ์ ์์ ๋ ๊ธ๋ก๋ฒ ํจ์๋จผ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
๊ฒฐ๊ตญ ์ด ๊ฒฝ์ฐ๋ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ธ๋ก๋ฒ ํจ์๋ฅผ ํธ์ถ ํ ์ ์๋ค.
์์; //print_sentence();
::์์; //::print_sentence();
<using namespace๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ>
๊ทธ๋ ๋ค๋ฉด using namespace๋ฅผ ์ฌ์ฉํ์ฌ namespace ์์๋ฅผ ์ ๊ทผํ๋ ๊ฒฝ์ฐ๋ ๊ฒฐ๊ณผ๊ฐ ์ด๋จ๊น?
์์๋ถํฐ ๋ณด์.
#include <iostream>
using namespace std;
namespace PRINT {
void print_sentence(){
cout << "์ด ํจ์๋ PRINT๋ผ๋ ์ด๋ฆ ์์ญ ์์ ์์ต๋๋ค." << endl;
}
}
void print_sentence(){
cout << "์ด ํจ์๋ global๋ก ์กด์ฌํฉ๋๋ค." << endl;
}
using namespace PRINT;
int main(){
int a = 5;
//print_sentence(); //์ค๋ฅ ๋ฐ์
::print_sentence(); //๊ธ๋ก๋ฒ๋ก ์ถ๋ ฅ
PRINT::print_sentence(); //namespace๋ก ์ถ๋ ฅ
return 0;
}
์ด ํจ์๋ global๋ก ์กด์ฌํฉ๋๋ค.
์ด ํจ์๋ PRINT๋ผ๋ ์ด๋ฆ ์์ญ ์์ ์์ต๋๋ค.
PRINT namespace๋ฅผ using์ ์ฌ์ฉํ์ฌ ๊ทธ๋ฅ ์ ๊ทผํ ์ ์๋๋ก ํ์์๋ ๋ถ๊ตฌํ๊ณ ๊ทธ๋ฅ ํจ์ ์ด๋ฆ๋ง ์ ์ ๊ฒฝ์ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ ์ ์ญ print_sentenceํจ์์ธ์ง PRINT::print_sentenceํจ์์ธ์ง ๋ช ํํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ์ด ๊ฒฝ์ฐ๋ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก๋ง ๊ธ๋ก๋ฒ ์์๋ฅผ ํธ์ถํ ์ ์๋ค.
::์์; //::print_sentence();
โถ using namespace std; ๋ ๋ฌด์์ผ๊น?
์ง๊ธ๊น์ง ๋ด์จ ๋ด์ฉ์ ์ ์ดํดํ์๋ค๋ฉด std๋ namespace ์ด๋ฆ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์ ๊ฒ์ด๋ค.
c++ ์ ๋ชจ๋ ํ์ค ์์๋ค์ std๋ผ๋ ์ด๋ฆ ๊ณต๊ฐ์ ๋ฃ์ด์ค๋ค.
๊ทธ๋์ using namespace std;๋ฅผ ์ฌ์ฉํด์ค์ผ๋ก์จ ์ฝ๋๋ฅผ ๋ ๊ฐ๋จํ๊ฒ ์์ฑํ ์ ์๋ ๊ฒ์ด๋ค.
๊ทธ ์๋ก๋ ์ถ๋ ฅ์ ์ํ cout ์์๋ฅผ ์ฌ์ฉํ ๋ ์ฝ๊ฒ ๋ณผ ์ ์๋ค.
//using namespace std;
std::cout << 5 << std::endl;
using namespace std;
cout << 5 << endl;
ํธ์ง์ผ์
22.02.21
'CS > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/MacOS] ํฐ๋ฏธ๋์์ c++ ์ปดํ์ผํ๊ธฐ (0) | 2022.02.19 |
---|