네임스페이스 . Namespace
- 코드의 이름 충돌 방지 및 논리적인 그룹화 위해 활용.
이름 충돌 방지 (가장 큰 목적)
서로 다른 라이브러리에서 같은 이름의 함수(init(), log())를 정의해도 네임스페이스가 다르면 공존 가능.
네임스페이스 기본문법
namespace 이름
{
....
} // ; 없음.
예.
#include <iostream>
namespace MyApp {
int version = 10;
void print() {
std::cout << "MyApp Version: " << version << std::endl;
}
}
int main() {
// 1. 범위 지정 연산자(::) 직접 사용
MyApp::print();
// 2. using 지시어 사용 (블록 내 모든 요소 개방)
using namespace MyApp;
std::cout << version << std::endl;
return 0;
}
네임스페이스 중첩 및 별칭
// C++17 이후 중첩은 간결하게 가능.
namespace Company::Project::Module {
void task() {}
}
// 별칭(Alias) - 긴 경로를 짧게 줄임
namespace CPM = Company::Project::Module;
int main() {
CPM::task();
}
클래스 헤더 , cpp 네임스페이스 예.
헤더.
namespace MyApp::Tools {
class Calculator {
public:
int Add(int a, int b); // 멤버 함수 선언
};
}
cpp
#include "MyClass.h"
namespace MyApp::Tools {
// 이미 MyApp::Tools 안에 들어와 있으므로 클래스 이름만
int Calculator::Add(int a, int b) {
return a + b;
}
}
헤더 파일(.h)에서 using namespace 사용 금지
헤더 파일은 다른 파일들에 의해 #include 되는데, 만약 A.h에서 using namespace std;를 사용하면, 이 헤더를 포함하는 모든 .cpp 파일에 원치 않더라도 std 네임스페이스의 모든 이름이 강제로 노출됨.
// [나쁜 예] MyHeader.h
using namespace std; // 절대 금지
void PrintName(string name);
// [좋은 예] MyHeader.h
#include <string>
namespace MyLib {
void PrintName(std::string name); // std::를 직접 붙임
}
CPP 파일에서는 using namespace 사용 자유로움.
- 권장 방법: .cpp 파일의 상단보다는 특정 함수 내부에서 사용하거나, 필요한 것만 선언.
// MyFile.cpp
#include "MyHeader.h"
// 방법 1: 필요한 것만 개별 선언 (가장 권장)
using std::string;
using std::cout;
// 방법 2: 함수 내부에서만 사용 (영향 범위 제한)
void MyFunc() {
using namespace std;
cout << "Hello" << endl;
}
첫 등록 : 2026.01.18
최종 수정 :
단축 주소 : https://igotit.tistory.com/6416
'VisualStudio.C++.C# > C . C++' 카테고리의 다른 글
| C . union . 공용체 . 비트필드 (0) | 2026.08.17 |
|---|---|
| C++ Embedded Python (임베디드 파이썬) . Python C API . pybind11 (0) | 2026.01.04 |
| VC++ 프로젝트 폴더 복사하여 작업 하는 경우 필수 삭제 해야할 것 (0) | 2025.04.09 |
| std::shared_mutex . 멀티 스레드 읽기 쓰기 락 (0) | 2024.09.12 |
| C/C++ . 부호 있는 정수 singed int . 음수 표현 규격 . 2's complement (0) | 2023.08.27 |
댓글