파도가 칠 때는 서핑을

Soon as possible

Wait!

공부/C\C++

[C++] using namespace std는 무엇인가

hyeonhki 2021. 3. 6. 11:18
728x90

[C++ : 네임스페이스(namespace)]

알고리즘 공부를 위해 C만 하다가 C++을 배울 때, 모든 게 낯설었지만 가장 눈에띠었던 것은 전역변수로 using namespace std;를 선언하는 것이었다.
이게 도대체 무엇인가?

네임스페이스(namespace)란?

- 말 그대로 이름을 저장하는 공간.
- 위키백과 : 개체를 구분할 수 있는 범위를 나타내는 말로 일반적으로 하나의 이름 공간에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다.
- C++에서 네임스페이스란 내부 식별자에 사용될 수 있는 유효 범위를 제공하는 선언적 영역을 의미한다.

namespace whatever
{
    int blah(int x)
    {
        return (0);
    }
}

이런 식으로 whatever이라는 이름의 공간 안에 함수를 정의해서 이름을 저장할 수 있다.

using namespace std;

여기서 표준라이브러리인 <iosream.h>에 있는 cout, cin, endl은 std라는 표준 네임스페이스에 포함되어 있는데, 이를 통해 std라는 이름공간안에 있는 함수들을 간편하게 사용할 수 있게 된다.

using?

네임스페이스 내에 있는 함수를 호출할 경우, 네임스페이스 명과 범위 지정연산자(::)를 추가로 적어야한다.

using namespace whatever;

하지만, using을 이용하면 네임스페이스와 범위지정연산자 없이 함수 호출이 가능해진다.
그래서 using namespace std;를 통해
<iostream.h>안에 std라고 정의된 namespace를 사용함으로 std::cout으로 쓸 것을 cout으로만 사용해지는 것이 가능해진다.

왜 사용하는가?

코드 중 클래스 이름이나 함수의 이름이 같을 경우 등, 선언이 겹친는 것을 방지하여 함수 호출 시 문제가 생기지 않도록 한다.
똑같이 Add라는 이름의 함수가 협업에서 사용된다면 충돌이 잦을 수 있으므로 namespace를 이용하여 구분짓는다.

프로젝트하면서 내 함수는 내 라이브러리를 만들어놓고 호출시키는데 헤더의 하위호환 같이 느꼈다. 일반적으로 헤더파일 내에서 정의되고 언제 새로운 이름을 추가할 수 있도록 개방되어 있다고 한다.

꼭 선언을 해야하는가?

아니다. 선언은 필수적인 존재가 아닌 며, std::cout과 같이 namespace + ::(범위 지정 연산자)로 사용하여 동작시킬 수 있다.

📚 참고한 서적 및 사이트

728x90