이름을 만드는 것이 어려움 => 이름공간(namespace)가 등장함
#include <iostream>
#include"game.h"
//global namespace: 전역 이름 공간
namespace Modeling
{
class Warrior
{
public:
void Attack() {
}
};
void Render() {
}
static int gMaxPlayer = 8;
}
namespace GUI
{
void Render() {
}
}
void WhoAmI() {
std::cout << "1" << std::endl;
}
int main()
{
Modeling::Warrior w;
w.Attack();
GUI::Render();
::WhoAmI(); //전역함수 사용시 이렇게도가능
using namespace Game;
Renders();
//Game::Renders();
//편리하지만 같은 이름이 있을 경우모호성 오류 발생 가능
//범위를 잘 지정해주어야 함
}
using namespace는 cpp에서만 header에서는 사용 삼가하기
의도하지않게 네임스페이스가 풀려서 겹칠 수 있음
(누군가가 header를 include하는 경우)
네임스페이스도 식별자로 작동하기 때문에 같은 이름의 class나 struct 전역함수 전역변수 등을 같이 사용할 수 없음
만약 새 네임스페이스와 비슷한 이름을 쓰려면 새로 추가될 네임스페이스를 고치기 (기존 것을 고치는 것이 더 어려움)