[c++] Namespaces

파이톨치·2022년 5월 20일
1

대학수업

목록 보기
14/32

Namespace

정의 된 이름들의 모음집이라고 한다. 그렇다면 이런 질문이 나온다. 이름? 뭐의 이름인데? 여기서 이름은 클래스의 정의 혹은 변수의 정의를 말한다.

우리는 이 개념을 많이 써왔다.

using namespace std;

이 코드는 아마 std라는 네임 스페이스를 불러오는 코드일 것이다. 프로그램은 많은 클래스와 함수를 가지기 때문에 같은 이름을 가지는 코드가 나올 수 있다. 때문에 이러한 이름 공간을 만들어서 함수나 클래스를 호출하는 것이다. 장점은 이것을 on / off할 수 있다는 점이다.

여기서 namespace안에 있는 이름들을 하나만 불러오거나 다 가져올 수 있다.

using namespace std;

이 경우에는 std 안에 있는 모든 것을 가져온 경우이다.

using std::cout;

이런 식으로 쓰면 하나만 가져오는 것이다.

선언과 정의

선언은 다음과 같이 하면 된다.

namespace Sapce1
{
	void greeting();
}

정의는 다음과 같이 한다.

namespace Space1
{
	void greeting()
    {
    	cout << "Hello from namespace Space1. \n";
    
    }
}

Unnamed Namespaces

이것은 로컬로 저장 된다고 한다.

#include <iostream>

using namespace std;

namespace {
   const int i = 4;
   int variable;
   }

int main()
{
   cout << i << endl;
   variable = 100;
   return 0;
}

다음과 같이 진짜 이름이 없는 namespace이다. 메인 함수에서 접근할 수 있다. 이것은 이 파일 안에서만 실행된다고 한다. 사실 왜 Local scope인지는 잘 이해가 되지 않는다. 외부에서 접근이 가능한거면 왜 local이지..? 단순하게 생각해서 namespace인데 이름이 없어서 그냥 접근 가능하다고 이해하자. 아직 링커에 대해서 공부하지 않아서 막히는 것 같다. 다음에 링커에 대해 정리를 좀 해야겠다.

Unnamed namespace
– Used for local name definitions
– Scope is compilation unit
Global namespace
– Items not in a namespace grouping at all
– Global scope

profile
안알랴줌

0개의 댓글