๐Ÿ‘ฉ‍๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ/๐ŸŽ  C++

[C++] ์ด๋ฆ„๊ณต๊ฐ„(namespace) | ๋ฒ”์œ„์ง€์ • ์—ฐ์‚ฐ์ž

peewoong 2024. 4. 14. 22:55

๐ŸŸฉ ์ด๋ฆ„๊ณต๊ฐ„์˜ ์›๋ฆฌ

์ด๋ฆ„๊ณต๊ฐ„ : ํ”„๋กœ์ ํŠธ์˜ ์ง„ํ–‰์— ์žˆ์–ด์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์˜ ์ถฉ๋Œ์„ ๋ง‰์„ ๋ชฉ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ

์กด์žฌํ•˜๋Š” ์ด๋ฆ„๊ณต๊ฐ„์ด ๋‹ค๋ฅด๋ฉด ๋™์ผํ•œ ์ด๋ฆ„์˜ ํ•จ์ˆ˜ ๋ฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

:: ๋ฒ”์œ„ ์ง€์ • ์—ฐ์‚ฐ์ž

namespace BestComImpl{
	void SimpleFunc(void){
    	cout << "BestCom์ด ์ •์˜ํ•œ ํ•จ์ˆ˜" << endl;
    }
}

namespace ProgComImpl{
	void SimpleFunc(void){
    	cout << "ProgCom์ด ์ •์˜ํ•œ ํ•จ์ˆ˜" << endl;
    }
}

int main(void){
	BestComImpl::SimpleFunc(); // ์ด๋ฆ„๊ณต๊ฐ„ BestComImpl์— ์ •์˜๋œ SimpleFunc ํ˜ธ์ถœ
    ProgComImpl::SimpleFunc(); // ์ด๋ฆ„๊ณต๊ฐ„ ProgComImpl์— ์ •์˜๋œ SimpleFunc ํ˜ธ์ถœ
}

 

๐ŸŒŸ ์ด๋ฆ„๊ณต๊ฐ„ ๊ธฐ๋ฐ˜์˜ ํ•จ์ˆ˜ ์„ ์–ธ๊ณผ ์ •์˜ ๋ถ„๋ฆฌ

namespace BestComImpl{
	void SimpleFunc(void);
}

namespace ProgComImpl{
	void SimpleFunc(void);
}

int main(void){
	BestComImpl::SimpleFunc(); // ์ด๋ฆ„๊ณต๊ฐ„ BestComImpl์— ์ •์˜๋œ SimpleFunc ํ˜ธ์ถœ
    ProgComImpl::SimpleFunc(); // ์ด๋ฆ„๊ณต๊ฐ„ ProgComImpl์— ์ •์˜๋œ SimpleFunc ํ˜ธ์ถœ
    return 0;
}

void BestComImpl::SimpleFunc(void){
	cout << "BestCom์ด ์ •์˜ํ•œ ํ•จ์ˆ˜" << endl;
}

void ProgComImpl::SimpleFunc(void){
	cout << "ProgCom์ด ์ •์˜ํ•œ ํ•จ์ˆ˜" << endl;
}

 

๐ŸŒŸ ๋™์ผํ•œ ์ด๋ฆ„ ๊ณต๊ฐ„ ๋‚ด์—์„œ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ

์„ ์–ธ๋œ ์ด๋ฆ„๊ณต๊ฐ„์˜ ์ด๋ฆ„์ด ๋™์ผํ•˜๋‹ค๋ฉด, ์ด ๋‘˜์€ ๋™์ผํ•œ ์ด๋ฆ„๊ณต๊ฐ„์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

์ฆ‰, SimpleFunc๊ณผ PrettyFunc์€ ๋™์ผํ•œ ์ด๋ฆ„ ๊ณต๊ฐ„ ์•ˆ์— ์กด์žฌํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค.

namespace BestComImpl{
	void SimpleFunc(void);
}

namespace BestComImpl{
	void PrettyFunc(void);
}

์ด๋ฆ„๊ณต๊ฐ„์„ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๋ฌธ์ด ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„ ๊ณต๊ฐ„ ์•ˆ์—์„œ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค. ๋”ฐ๋ผ์„œ SimpleFunc ํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” ์ด๋ฆ„๊ณต๊ฐ„์„ ๋ช…์‹œํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ PrettyFunc ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜๋‹ค.

void BestComImpl::SimpleFunc(void){
	cout << "BestCom์ด ์ •์˜ํ•œ ํ•จ์ˆ˜" << endl;
    PrettyFunc(); // ๋™์ผ ์ด๋ฆ„๊ณต๊ฐ„
    ProgComImpl::SimpleFunc(); // ๋‹ค๋ฅธ ์ด๋ฆ„๊ณต๊ฐ„
}

void BestComImpl::PrettyFunc(void){
	cout << "So Pretty!" << endl;
}

 

๐ŸŒŸ ์ด๋ฆ„ ๊ณต๊ฐ„ ์ค‘์ฒฉ

namespace Parent{
	int num = 2; // Parent::num
    namespace SubOne{ // Parent::SubOne
    	int num = 3;  // Parent::SubOne::num
    }
	
    namespace SubTwo{ // Parent::SubTwo
    	int num = 4; // Parent::SubTwo::num
    }
}

๋ณ„์นญ์„ ์–ธ ๊ฐ€๋Šฅ

namespace ABC = AAA::BBB::CCC;

ABC::num1 = 10;

ํ•˜๋‚˜์˜ ๋ณ„์นญ์œผ๋กœ ์ด๋ฆ„๊ณต๊ฐ„์˜ ์„ ์–ธ์„ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐ŸŒŸ std::cout, std::cin, std::endl

์ด๋ฆ„๊ณต๊ฐ„ std์— ์„ ์–ธ๋œ cout, cin, endl

namespace std{
	cout ...
    cin ...
    endl ...
}

<iostream>์— ์„ ์–ธ๋˜์–ด ์žˆ๋Š” cout, cin, endl์€ ์ด๋ฆ„๊ณต๊ฐ„ std ์•ˆ์— ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค.

์ด๋ฆ„์ถฉ๋Œ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ, C++ ํ‘œ์ค€์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ์š”์†Œ๋“ค์€ ์ด๋ฆ„๊ณต๊ฐ„ std ์•ˆ์— ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค.

using std::cin;
using std::cout;
using std::endl;

์ดํ›„๋ถ€ํ„ฐ cin, cout, endl์€ std::cin, std::cout, std::endl์„ ์˜๋ฏธํ•œ๋‹ค๋Š” ์„ ์–ธ

using namespace std;

์ด๋ฆ„๊ณต๊ฐ„ std์— ์„ ์–ธ๋œ ๊ฒƒ์€ std๋ผ๋Š” ์ด๋ฆ„๊ณต๊ฐ„์˜ ์„ ์–ธ์—†์ด ์ ‘๊ทผํ•˜๊ฒ ๋‹ค๋Š” ์„ ์–ธ

 

๐ŸŒŸ ๋„ˆ๋ฌด ๋นˆ๋ฒˆํ•œ using namespace์˜ ์„ ์–ธ์€ ์ด๋ฆ„์˜ ์ถฉ๋Œ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ์ด๋ฆ„๊ณต๊ฐ„์˜ ์„ ์–ธ์„ ์˜๋ฏธ์—†๊ฒŒ ๋งŒ๋“ ๋‹ค. ๋”ฐ๋ผ์„œ ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

๐ŸŸฉ ๋ฒ”์œ„์ง€์ • ์—ฐ์‚ฐ์ž ::

์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ์ „์—ญ๋ณ€์ˆ˜์˜ ์ ‘๊ทผ์—๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

int val = 100; // ์ „์—ญ๋ณ€์ˆ˜

int SimpleFunc(void){
	int val = 20; // ์ง€์—ญ๋ณ€์ˆ˜
    val += 3; // ์ง€์—ญ๋ณ€์ˆ˜ val์˜ ๊ฐ’ 3 ์ฆ๊ฐ€
    ::val+=7; // ์ „์—ญ๋ณ€์ˆ˜ val์˜ ๊ฐ’ 7 ์ฆ๊ฐ€
}