등장 배경 : 프로그램들이 대형화 되면서 이름의 충돌문제 발생 (ex, 함수 이름 겹치는 것 등...)
namespace 기본 원리
만약
10호 사는 철수
18호 사는 철수
201호 사는 철수
있다고 가정해보자
동시에 같이 있는 상황에서 "철수야!" 라고 부르면 어떤 철수를 부르는지 알 수 없음
만약,
"201호 사는 철수야!" 라고 하면 대답 가능하다.
이름 충돌 예시
#include <iostream>
void simplefunc(void)
{
std::cout << "company1이 정의한 함수" << std::endl;
}
void simplefunc(void)
{
std::cout << "company2가 정의한 함수" << std::endl;
}
int main(void)
{
simplefunc();
return 0;
}
이 코드 실행시 아래와 같이 빌드 에러가 뜬다
이 문제를 해결하기 위해 namespace를 써본다
#include <iostream>
namespace lab1 // 이름공간 이름
{ // 이름공간 내부
void simplefunc(void)
{
std::cout << "lab1이 정의한 함수" << std::endl;
}
}
namespace lab2 // 이름공간 이름
{ // 이름공간 내부
void simplefunc(void)
{
std::cout << "lab2이 정의한 함수" << std::endl;
}
}
int main(void)
{
lab1::simplefunc(); // 범위지정 연산자(scope resolution operator)
lab2::simplefunc();
return 0;
}
- 위 보면 lab1과 lab2의 namespace를 이용해서 namespace안 function에 접근하는 것을 볼 수 있다.
- 그렇다면 같은 이름을 가진 function이라도 정상 작동된다.
참고 : [윤성우 열혈 C++ 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.
'Language&Framework&Etc > C++' 카테고리의 다른 글
C언어 기반의 C++(01-1) printf와 scanf를 대신하는 입출력 방식 (0) | 2020.12.19 |
---|---|
1-5 이름공간(namespace)에 대한 소개 추가(함수 선언 정의) (0) | 2020.11.18 |
1-4 인라인(inline) 함수 (0) | 2020.11.18 |
1-3 매개변수의 디폴드값 (0) | 2020.11.18 |
1-2 함수 오버로딩 (0) | 2020.11.18 |