C++ [Basic] namespace
namespace의 필요성
- 함수의 구조체등의 이름 충돌 해결
 
#include <stdio.h>
namespace Audio
{
    void init()
    {
        printf("Audio init\n");
    }
}
namespace Video
{
    void init()
    {
        printf("Video init\n");
    }    
}
// global namespace 
void init()
{
    printf("System init\n");
}
int main()
{
    init();
    Audio::init();
    Video::init();
}
namespace 에 있는 요소에 접근하는 3가지 방법
qualified name 사용
Audio::init();
qualified name 사용법을 가장 권장
using declaration (using 선언)을 사용한 접근
using Audio::init();
init 함수는 Audio 이름 없이 사용 가능
using directive (using 지시어)를 사용한 접근
using namespace Audio;
Audio namespace의 모든 요소를 Audio이름 없이 사용가능
  
#include <stdio.h>
namespace Audio
{
    void init()  { printf("Audio init\n"); }
    void reset() { printf("Audio reset\n");}
}
using namespace Audio; // using directive
void init()  { printf("global init\n"); }
int main()
{
    Audio::init();
    
    //using Audio::init; // using declaration
    //init();
    //reset(); // error
    
    //using namespace Audio; // using directive
    ::init(); 
    reset();
}
::init() : global namespace 에 접근하려면 ::를 사용
std namespace
C++ 표준의 모든 요소는 std namespace 안에 있음
namespace rule
Two classes with the same name can be created inside 2 different namespaces in a single program.
Inside a namespace, no two classes can have the same name.