일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- regression
- deep learning
- LG Aimers 4th
- ChatGPT
- LLM
- supervised learning
- Machine Learning
- 지도학습
- gpt
- PCA
- LG
- 딥러닝
- 해커톤
- OpenAI
- 오블완
- LG Aimers
- AI
- 회귀
- 분류
- Classification
- 머신러닝
- 티스토리챌린지
- GPT-4
Archives
- Today
- Total
SYDev
C++ Chapter 01-5 : 이름공간(namespace) (1) 본문
이름공간(namespace)의 기본
한 프로젝트에 관해서 두 개 이상의 팀이 일을 나눠서 분할작업을 하고 서로의 작업물을 합친다고 했을 때, 서로 설정한 함수가 겹쳐서 문제가 발생할 수 있다. 이럴 때 활용하면 좋은 게 이름공간(namespace)이다.
아래 예제를 살펴보자.
#include <iostream>
namespace BestComImpl
{
void SimpleFunc(void)
{
std::cout<<"BestCom이 정의한 함수"<<std::endl;
}
}
namespace ProgComImpl
{
void SimpleFunc(void)
{
std::cout<<"ProgCom이 정의한 함수"<<std::endl;
}
}
int main(void)
{
BestComImpl::SimpleFunc();
ProgComImpl::SimpleFunc();
return 0;
}
BestCom이 정의한 함수
ProgCom이 정의한 함수
namespace 없이 함수 SimpleFunc의 선언문을 보면 입력받는 매개변수의 수와 자료형이 똑같기 때문에 오류가 발생한다. 이를 해결하기 위해서 각각 namespace를 설정해서 이름과 자료형이 같은 함수를 다른 함수처럼 호출할 수 있다.
*::는 범위지정 연산자(scope resolution operator)라 부르며 이름공간을 지정할 때 사용하는 연산자이다.
이름공간 내부의 함수도 함수의 선언과 정의를 분리할 수 있는데 이는 다음 예제를 살펴보자.
#include <iostream>
namespace BestComImpl
{
void SimpleFunc(void);
}
namespace ProgComImpl
{
void SimpleFunc(void);
}
int main(void)
{
BestComImpl::SimpleFunc();
ProgComImpl::SimpleFunc();
return 0;
}
void BestComImpl::SimpleFunc(void)
{
std::cout<<"BestCom이 정의한 함수"<<std::endl;
}
void ProgComImpl::SimpleFunc(void)
{
std::cout<<"ProgCom이 정의한 함수"<<std::endl;
}
BestCom이 정의한 함수
ProgCom이 정의한 함수
동일한 이름공간에서 정의된 함수는 호출할 때에 이름공간을 명시할 필요가 없다. 이에 관해서 다음 예제를 살펴보자.
#include <iostream>
namespace BestComImpl
{
void SimpleFunc(void);
}
namespace BestComImpl
{
void PrettyFunc(void);
}
namespace ProgComImpl
{
void SimpleFunc(void);
}
int main(void)
{
BestComImpl::SimpleFunc();
return 0;
}
void BestComImpl::SimpleFunc(void)
{
std::cout<<"BestComImpl이 정의한 함수"<<std::endl;
PrettyFunc();
ProgComImpl::SimpleFunc();
}
void BestComImpl::PrettyFunc(void)
{
std::cout<<"So pretty!"<<std::endl;
}
void ProgComImpl::SimpleFunc(void)
{
std::cout<<"ProgCom이 정의한 함수"<<std::endl;
}
BestComImpl이 정의한 함수
So pretty!
ProgCom이 정의한 함수
이름공간의 중첩
이름공간 내부에 이중으로 이름공간을 설정할 수 있는데 방법은 예제에서 살펴보자.
#include <iostream>
namespace NumSpace1
{
int num = 1;
namespace NumSpace2
{
int num = 2;
}
namespace NumSpace3
{
int num = 3;
}
}
int main(void)
{
std::cout<< NumSpace1::num <<std::endl;
std::cout<< NumSpace1::NumSpace2::num <<std::endl;
std::cout<< NumSpace1::NumSpace3::num <<std::endl;
}
1
2
3
다음 방법으로 이름공간 내부에 이중으로 이름공간을 설정할 수 있다.
출처 : 윤성우, <윤성우의 열혈 C++ 프로그래밍>, 오렌지미디어, 2010.05.12
'Programming Lang > C++' 카테고리의 다른 글
C++ Chapter 02-1 : 포인터(pointer), 상수화(const)(1) (0) | 2023.07.05 |
---|---|
C++ Chapter 01-5 : 이름공간(namespace) (2) (0) | 2023.07.05 |
C++ Chapter 01-4 : 인라인(inline) 함수 (0) | 2023.07.04 |
C++ Chapter 01-3 : 매개변수의 디폴트 값(Default Value) (0) | 2023.07.03 |
C++ Chapter 01-2 : 함수 오버로딩(Function Overloading) (0) | 2023.07.03 |