C++에서 namespace에 관한 질문...

leolo의 이미지

제가 C만해서 C++에서 namespace에 대해 잘 모릅니다.
아래 코드에서 말하는 namespace가 무엇인가요?
좀 자세히 부탁드립니다... ^^

#include <iostream>
using namespace std;

namespace first
{
    int a;
    int b;
}
namespace second
{
    int a;
    int b;
}
int main()
{
    first::a = 100;
    first::b = 200;

    second::a = 400;
    second::b = 800;

    cout << first::a + second::a << endl;
    cout << first::b + second::b << endl;
}
		
 

또한 아래 코드 처럼, 2가지 형식으로 쓸때.
그냥 쓸수 있는 것인가요. 그러니까? 우리가 C에서
초기화를 int a = 5; 하는 것이랑, int a; a = 5; 하는 것이랑..
똑같은 것 처럼.. 그냥.. 그런 식으로 사용하는 것인가요?

#include <iostream> 
using namespace std; 

int main() 
{ 
cout << "Hello World!!!" << endl; 

return 0; 
} 
 



또는,

코드:

#include <iostream> 

int main() 
{ 
std::cout << "Hello World!!!" << std::endl; 

return 0; 
}  
bugiii의 이미지

프로그래밍을 하다보면 여러가지 라이브러리를 사용하게 됩니다. 라이브러리는 많은 클래스, 변수, 함수 등을 포함하고 있고 각기 나름대로의 이름을 가지고 있습니다.

그런데, 이런 이종 라이브러리간의 클래스, 변수, 함수들 중에 이름이 같은 경우가 생기면 곤란한 경우가 생깁니다. 서로 같이 사용할 수 없는... 링크시에 분명히 에러가 날 것입니다. C++의 경우 이름은 최종 링크시 오직 하나만 있어야 한다고 합니다.

이런 문제를 해결하기 위해서 namespace로 둘러싸서 정의한 클래스, 변수, 함수 등은 다음 처럼 정확히 해당 namespace 이름과 스코프 연산자를 이용해서 사용하거나

    std::cout << "this is test." << std::endl;

아니면, using namespace 로 생략형으로 사용할 수 있도록 하였습니다.

    using namespace std;
    ....
    cout << "......." << endl;

namespace는 이름 충돌 문제를 해결하기 위해서 만들어진 도구라고 생각합니다.

p.s. 최근의 C++ 책들은 namespace를 많이 언급하고 있습니다. 좋은 텍스트를 꼭 참고하시면 좋겠습니다.

douner의 이미지

C++ for Linux in 21 Days 책 추천합니다 :)
namespace 설명이 잘 되어 있습니다.

인생, 쉬운 것만은 아니네..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.