이것도 아무 의미가 없습니다.
그냥 이것 저것 만져보다 알아낸(?) 것입니다.

[code]
#include <stdio.h>

namespace test {
        char *name;
        void hello();
}

void test::hello()
{
        printf("Hello world, %s!\n", name);
}

void main()
{
        test::name = "홍길동";
        test::hello();
}
[/code]


이것을 class의 static member 버전으로 해봤습니다.

[code]
class test {
public:
        static char *name;
        static void hello();
};

char *test::name = NULL;

void test::hello()
{
        printf("Hello world, %s!\n", name);
}

void main()
{
        test::name = "홍길동";
        test::hello();
}
[/code]



대충 봤을 때, 두 코드는 사실상 동작상 차이가 없고, 컴파일 된 결과 코드도 실질적으로 별 차이가 없었습니다.

물론 namespace와 class는 당연히 역할이 다른 것이지만, 비슷한 기능을 찾아보는 것도 재미있는 일이죠.
개념적으로는 namespace는 하나의 이름으로 선언한 것들을 묶는 것이고, class도 역할 자체는 큰 차이가 없는 것 같습니다. (class도 하나의 namespace이니...)


이 글은 그냥 함수 본체를 만들 때 namespace의 선언 바깥에 있으면 ::로 scope를 지정해줘야 하는 것을 보고 적어본 것입니다.
어찌보면 황당한 소리일지도 모르지만, 가끔 인스턴스가 하나만 있어야 하는 클래스를 만들어야 하는 경우(여기에 무슨 디자인 패턴이 있을줄로 알지만 전 모르는 관계로)...
어차피 인스턴스가 하나이므로 모든 멤버가 static인게 조금 더 빠를 것입니다.
모든 멤버가 static이라면 각 멤버끼리 접근하는데는 아무 문제도 없을 것이고...
그런 경우에는 namespace를 써보는 것도 괜찮지 않을까 싶기도 했지만...





어차피 namespace는 class보다 기능적으로 떨어지는데다,
무엇보다 access 지정이 안 되므로 제가 위에서 쓴 말이 말도 안 됨을 알 수 있습니다.
결국 이 글은 그냥 뻘글이라는 것입니다.
-_-

교훈:
저같은 초보자들이 흔히 간과하기 쉬운 사실이지만,
:: 연산자는 꼭 class에서 쓰는 것만이 아니라 (특히, 범위가 명확하지 않은 곳에서) 특정한 범위를 지정하기 위해 쓰인다.
(정확한 정의가 아닌 그냥 개인의 생각이므로 레퍼런스를 이용합시다.)