일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 클래스 다이어그램
- 캡슐화
- 강의
- 표준 라이브러리 함수
- 동영상
- 파이썬
- 소스 코드
- 소켓 통신
- 언제나휴일
- 실습으로 다지는 c#
- 안드로이드 앱 개발
- 산책하기 좋은 곳
- C++
- 언제나 휴일
- 프로젝트
- c#
- 유튜브 동영상 강의
- 충남 천안
- 졸업 작품 소재
- 동영상 강의
- 원격 제어 프로그램
- 표준 입출력
- 독립기념관
- Windows Forms
- c언어
- 네트워크 프로그래밍
- 무료 동영상 강의
- 알고리즘
- 실습
- 추천
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
[C++] 8. 이름 충돌을 방지하는 namespace 본문
namespace DemoA
{
struct Stack
{
int top;
};
}
namespace DemoB
{
struct Stack //이미 앞에서 같은 이름으로 정의하고 있음
{
int last;
};
}
C++언어는 이미 만들어진 지 30여년이 지났습니다. 이러한 역사 속에서 처음에는 없었던 문법이 새롭게 추가한 것들도 있습니다. 이렇게 새롭게 추가한 문법 중의 하나가 namespace죠. 이미 앞에서 cin과 cout을 사용하기 위해 using namespace std; 문을 사용했었죠. 여기에서 namespace 문법을 다루고 나면 왜 이러한 구문을 사용하였는지를 알 수 있을 거예요.
namespace는 같은 이름을 충돌하지 않게 하는 문법이예요. 수 많은 라이브러리를 만들어지고 있는데 서로 다른 라이브러리에 같은 이름의 형식이나 개체가 있을 때 충돌이 나지 않게 namespace로 감싸게 하여 충돌나지 않게 할 수 있습니다.
먼저 namespace 문법을 사용하지 않았을 때 같은 이름의 형식을 정의하여 충돌하는 예입니다.
이를 다음처럼 namespace로 감싸서 정의하면 이름 충돌이 발생하지 않습니다.
//namespace를 사용하지 않아 이름 충돌
//Program.cpp
#include <iostream>
using namespace std;
struct Stack
{
int top;
};
struct Stack //이미 앞에서 같은 이름으로 정의하고 있음
{
int last;
};
int main()
{
return 0;
}
이제 namespace로 감싸서 정의한 이름을 사용하는 방법을 알아봅시다.
먼저 네임 스페이스 이름과 스코프 연산자(::)를 사용해서 접근할 수 있습니다.
//namespace를 사용하여 이름 충돌 방지
//namespace 이름과 스코프 연산으로 사용한 예
//Program.cpp
#include <iostream>
using namespace std;
namespace DemoA
{
struct Stack
{
int top;
};
}
namespace DemoB
{
struct Stack //이미 앞에서 같은 이름으로 정의하고 있음
{
int last;
};
}
int main()
{
DemoA::Stack stacka; //namespcae 명과 스코프 연산자로 이름 사용
DemoB::Stack stackb;
stacka.top = -1;
stackb.last = -1;
return 0;
}
그리고 특정 네임 스페이스에 있는 모든 이름을 간단히 사용할 수 있게 using 문을 사용할 수 있어요.
using namespace 뒤에 네임 스페이스 이름을 표현하면 모두 사용할 수 있습니다.
//using namespace문을 이용하여 간단히 사용
//Program.cpp
#include <iostream>
using namespace std;
namespace DemoLib
{
struct Stack
{
int top;
};
struct Queue
{
int front;
int rear;
};
}
//DemoLib 네임 스페이스에 이름을 사용하겠다는 구문
using namespace DemoLib;
int main()
{
Stack s; //네임 스페이스 명과 스코프 연산없이 이름을 바로 사용
Queue q;
s.top = -1;
q.front = q.rear=0;
return 0;
}
그리고 using [네임 스페이스 명]::[사용할 이름]; 을 선언하여 네임 스페이스 내부에 있는 특정 이름만 간단하게 사용할 수도 있어요.
//using [namespace 명]::사용할 이름; 으로 특정 이름만 간단히 사용
//Program.cpp
#include <iostream>
using namespace std;
namespace DemoLib
{
struct Stack
{
int top;
};
struct Queue
{
int front;
int rear;
};
}
//DemoLib 네임 스페이스에 Stack 이름을 사용하겠다는 구문
using DemoLib::Stack;
int main()
{
Stack s; //네임 스페이스 명과 스코프 연산없이 이름을 바로 사용
DemoLib::Queue q; //네임 스페이스 명과 스코프 연산과 함께 이름을 사용
s.top = -1;
q.front = q.rear=0;
return 0;
}
iostream 파일을 포함하여 cin과 cout을 사용하기 위해 using 문을 사용한 이유도 std 네임 스페이스로 감싸서 정의하고 있기 때문이예요.
'C & C++ > 디딤돌 C++' 카테고리의 다른 글
[C++] 13. OOP 개요 (0) | 2024.04.06 |
---|---|
[C++] 11. 논리 형식 bool 제공 12. string 형식 개요 (0) | 2024.04.06 |
[C++] 10. 신뢰성 강화(열거형) (0) | 2024.04.05 |
[C++] 9. 레퍼런스 변수 (0) | 2024.04.05 |
[C++] 6. 디폴트 매개 변수 7. 매개 변수 이름이 없는 스텁 매개 변수 (0) | 2024.04.04 |
[C++] 5. 함수 중복 정의 (FUNCTION OVERLOADING) (0) | 2024.04.03 |
[C++] 4. 태그 명을 형식 명으로 사용 (0) | 2024.04.03 |
[C++] 3. 입출력 개요 (cin, cout) (1) | 2024.01.09 |