
이 글은 16년 경력의 소프트웨어 개발자 David Barr 님의 Forbidden C++이라는 영상을 요약한 글입니다.
https://www.youtube.com/watch?v=j0_u26Vpb4w&t=145s
실제로 소프트웨어 개발자로 일하면서 내가 사고를 치기도 하고, 실제로 안전하지 않게 쓰인 코드를 보기도 한 적이 있다.
이러한 실수들을 피하기 위하여 자신에게 다시 새기는 의미로 이 글을 작성한다.
namespace std
#include <iostream>
#include <algorithm>
using namespace std;
namespace ns1
{
void TestFunction()
{
cout << "NS1" << endl;
}
}
namespace ns2
{
void TestFunction()
{
cout << "NS1" << endl;
}
}
int max(int a, int b)
{
if(a <b)
return b;
else
return a;
}
int main()
{
ns1::TestFunction();
ns2::TestFunction();
int res = max(3,10) // namespace pollution!!!
return 0;
}
std를 매번 입력하지 않아도 되기에 코드가 깔끔해진다는 장점이 있다. 이 행위가 금지되어야 할 이유는 namespace pollution(네임 스페이스의 오염)에 있다.
예제코드의 main문에서 호출한 max는 과연 어디의 max일까? 예제코드에서 만든 함수 max일까, 아니면 스탠더드 라이브러리 Alogorithm에서 제공하는 max일까?
그렇기에 여기서 네임스페이스로 명확히 해주는 것이 좋다. 단지 쓰기 귀찮다고 using namespace로 처리해 버리면 언젠가 큰일이 날 것이다.
나도 첫 직장 신입 때 멋 모르고 예제 코드에 있던 using namespace std를 그대로 썼다가 엄청 혼난 적이 있다.
int res = std::max(3,10) // Great!!
using namespace를 쓰는 것이 무조건 잘 못되었다는 것은 아니다. 하지만, 잘못된 위치에서 사용하면 코드를 ambiguous(애매한) & difficult(어려운) 게 만들 수 있다.
'C++ > 기본 상식' 카테고리의 다른 글
포인터와 동적 메모리 (0) | 2022.05.27 |
---|