[ 요약 ]
- 이름공간(namespace)에 대한 이해
[ 이름 공간 (namespace) ]
#include <iostream>
std::cout << "Hello, World!" << std::endl;
- #include <iostream>
- std::cout과 같이 C++에서 표준 입출력에 필요한 것들을 포함하는 표준(standard) 라이브러리.
- C와 달리 .h는 안붙음 (C에서는 stdio.h)
- std::cout << "Hello, World!" << std::endl;
- std : 이게 namespace
- C++의 표준(standard) 라이브러리의 모든 함수, 객체들이 정의되어 있음
즉, namespace란,
"특정 객체가 어디 소속인지 지정해 주는 것!"
코드가 길어짐에 따라, 중복된 이름을 가진 함수가 많아지므로
C++에서는 이를 구분하기 위해,
같은 이름이라도, 소속된 namespace가 다르면 다른 멤버(객체)로 취급!
- namespace 정의
// header1.h
namespace header1 {
int foo();
void bar();
}
- 만약 특정 namespace에서 다른 namespace의 함수를 호출하려면, 정확히 namespace를 명시적으로 지정해줘야 함
#include "header1.h"
#include "header2.h"
// func() : 어떠한 namespace에도 소속되지 않는 경우 or 다른 header1에 속하지 않는 경우
int func() {
header1::foo(); // header1 이란 이름 공간에 있는 foo 를 호출
}
- 근데 이렇게 header1이라는 namespace에 있는 함수나 객체들을 자주 쓰거나,
- 이 namespace 안에 정의된 모든 것들을 header1:: 이라고 명시적으로 안붙이고 바로 쓰고 싶다면?
- using namespace header1; 선언!!
#include "header1.h"
#include "header2.h"
using namespace header1;
int main() {
header2::foo(); // header2 에 있는 함수를 호출
foo(); // header1 에 있는 함수를 호출 (header1:: 안붙여도 됨)
}
- 그러나, using namespace std; 는 권장 X!!
- 만약 두 namespace에 동일한 이름의 함수가 있고, 둘 다 명시적으로 namespace를 지정해주지 않고 using namespace로 선언 후 생략을 하게되면 충돌이 나기 때문에..!
#include "header1.h"
#include "header2.h"
using namespace header1;
using namespace header2;
int main() {
foo(); // 어떤 헤더에 있는, 어떤 namespace의 foo()를 호출해야할지 몰라서 충돌!
}
따라서,
using namespace ~ 대신,
명시적으로 정확한 namespace를 지정해주자!
[ cf. 이름없는 namespace ]
namespace {
int func() {}
int value = 0;
}
이런 경우에는, 이 파일 안에서만 사용할 수 있는 객체들이 되는 것!
씹어먹는 C++ - <1 - 2. 첫 C++ 프로그램 분석하기>
모두의 코드 씹어먹는 C++ - <1 - 2. 첫 C++ 프로그램 분석하기> 작성일 : 2011-03-06 이 글은 122734 번 읽혔습니다. 이번 강좌에서는첫번째 C++ 프로그램 분석이름공간(namespace) 에 대한 이해 안녕하세요
modoocode.com
'[ 언어 및 문법 ] > C, C++' 카테고리의 다른 글
[모두의 코드][씹어먹는 C언어] 17. 변수의 생존 조건 및 데이터 세그먼트의 구조 (local, global, static variable) (0) | 2023.11.12 |
---|---|
[C++] 파일 입출력 (ofstream, ifstream, rename, remove) (0) | 2022.10.17 |
[C++] enum vs #define (0) | 2022.08.14 |
[C++] bool vs BOOL (0) | 2022.08.14 |
[C++] NAN, isnan() (0) | 2022.08.14 |