[C++] namespace

처음에 개발을 배우면 아래와 같이 둘중 하나를 가지고 코딩하게 됩니다.

#include <iostream>
using namespace std;

void main()
{
	cout << "hello world" << endl;

	system( "pause" );
}

또는

#include <iostream>

 void main()
{
	std::cout << "hello world" << std::endl;

	system( "pause" );
}

저는 std:: 쓰는게 싫어서 using namespace std;를 많이 사용했습니다.
이 namespace는 왜 쓰는 걸까요? namespace는 코드 영역을 정의하기 위해 사용합니다.

아래 코드를 보시죠. 아래의 두 Sum 함수가 있다고 합니다.

// Math.h
int Sum( int iX, int iY );

int Sum( int iX, int iY )
{
	return iX + iY;
}
// Physics.h
int Sum( int iX, int iY );

int Sum( int iX, int iY )
{
	int sum = iX + iY;
	
    return sum;
}

이 두 헤더 파일을 include 해서 사용하면 에러가 발생합니다.

#include <iostream>
using namespace std;

#include "Math.h"
#include "Physics.h"

void main()
{
	cout << Sum( 1, 2 ) << endl; // 에러 발생

	system( "pause" );
}

어떤 것을 사용할지 모호 에러가 나타납니다.
이럴 경우 아래와 같이 사용하시면 됩니다

// Math.h
namespace MATH
{
	int Sum( int iX, int iY );

	int Sum( int iX, int iY )
	{
		return iX + iY;
	}
}
// Physics.h
namespace PHYSICS
{
	int Sum( int iX, int iY );

	int Sum( int iX, int iY )
	{
		int sum = iX + iY;

		return sum;
	}
}

#include <iostream>
using namespace std;

#include "Math.h"
#include "Physics.h"

void main()
{
	cout << MATH::Sum( 1, 2 ) << endl;
	cout << PHYSICS::Sum( 1, 2 ) << endl;

	system( "pause" );
}

혹은 Math.h의 Sum만 사용하신다면 아래처럼 코딩하시면 됩니다.

#include <iostream>
using namespace std;

#include "Math.h"
#include "Physics.h"
using namespace MATH;
void main()
{
	cout << Sum( 1, 2 ) << endl;

	system( "pause" );
}