네임스페이스(namespace)를 알아보자!
네임스페이스를 모르더라도 C++ 공부를 하면서 이미 알고 사용하고 있어
std::cout 다들 많이 써봤지?
std :: cout
(네임스페이스 이름) (스코프 연산자) (사용할 변수 또는 함수등)
이러한 구조로 이루어 져있어서 스코프 연산자를 사용해 접근하여 사용해
그래서 이게 왜필요한데;;
그건 우리가 팀프로젝트나 다른 라이브러리를 추가할때 이름이 겹칠 확률이 늘어나
이러한 이름 충돌 문제를 네임스페이스로 해결할수 있는거지!
네임스페이스 안에는 여러가지를 선언하여 사용할수 있지.
사용 하는걸 한번보자!
<기본 예시+class>
namespace TestCode { //선언
int testint; //변수
void testFunc() {//함수
printf("My Namespace");
}
class NamespaceClass//클래스
{
public:
void static classfunc() {}
};
}
namespace TestFunc {
void testFunc(){}
}
int main()
{
TestCode::NamespaceClass::classfunc();
TestCode::testint = 1;
TestCode::testFunc();
TestFunc::testFunc();
}
처럼 사용할수 있지!
과연 네임 스페이스 안에 네임스페이스를 선언하여 사용할수 있을까?
<중첩 네임스페이스>
namespace TestCode {
namespace Names {
int b;
}
}
int main()
{
TestCode::Names::b = 0;
std::cout << TestCode::Names::b;
}
이처럼 사용할수 있지
네임스페이스를 쓸때 전부 std:: 처럼 사용하기 싫지?
그럴때 맨위에 using namespace <이름> 을 사용하면 앞에 붙이지 않아도 사용할수 있지
<using>
namespace TestCode {
namespace Names {
int b;
}
}
int main()
{
using namespace TestCode::Names;
b = 0;
}
그리고 이건 조금 중요해
<네임스페이스 함수 구현>
namespace TestCode {
void TestFunc();
}
using namespace TestCode;
void TestCode::TestFunc() { printf("a"); };
int main()
{
TestFunc();
}
함수를 구현할때는 using을 써도 네임스페이스 이름을 붙여서 사용해야해
그리고 우리가 사용하는 전역변수와 함수는 암시적으로 전역 네임스페이스에 추가되지
전역 네임스페이스를 한정할때는 :: (함수이름) 처럼 이름없이 사용하면 구분해줄수 있지!
<전역 네임스페이스 코드>
int a =10;
int main()
{
int a =0;
::a //전역변수
a //지역변수
}
이렇게 말이야
::a 를 출력하면 10 이 나오고 a 를출력하면 0이 나오는 거야!
'언어 > C++' 카테고리의 다른 글
c++ std::function 사용하기 (0) | 2023.01.10 |
---|---|
함수 포인터! (Function Pointer)! (0) | 2021.07.13 |
인라인 함수(Inline Function) (0) | 2021.06.15 |
bit연산! 또는 bit Flag (0) | 2021.05.05 |
call by reference/call by value/call by address (0) | 2021.05.03 |