Namespace

네임스페이스는 같은 이름을 다른 범위에 분리합니다

std::cout처럼 스코프 결정 연산자 ::를 쓰면 어떤 공간의 이름을 사용할지 명확해집니다.

충돌 방지서로 다른 라이브러리에 같은 valueprocessData()가 있어도 네임스페이스가 다르면 공존합니다.
파일 내부익명 네임스페이스는 해당 .cpp 안에서만 보이는 전역 함수와 변수를 만들 때 씁니다.
qualified

이름 앞에 소속을 붙입니다

my_namespace::data처럼 가장 명확하고 충돌 가능성이 낮은 방식입니다.

using declaration

필요한 멤버만 가져옵니다

using std::cout;은 특정 이름만 현재 스코프에서 짧게 쓰게 합니다.

using directive

전체 네임스페이스를 열어 둡니다

using namespace std;는 편하지만 헤더나 전역 스코프에서는 충돌 위험을 퍼뜨립니다.

전역명시적 네임스페이스 밖의 이름은 전역 네임스페이스에 속하고 접두어 없이 보입니다.
중첩C++17부터 namespace Outer::Inner::Deep처럼 계층을 간결하게 선언할 수 있습니다.
헤더헤더 파일의 using namespace는 포함하는 모든 파일에 이름 충돌 위험을 전파합니다.

이름 소속 네임스페이스를 볼 때는 이름을 어디에 선언했고, 호출 지점에서 얼마나 명시적으로 가져오는지가 충돌 가능성을 결정합니다.