본문 바로가기
C

[C++] using namespace std; 를 사용하면 안되는 이유

by 수표 2020. 1. 31.

보통 C++을 코딩할때 제일 첫줄에 using namespace std;를 선언하고 사용합니다.

 

이렇게 하면 std:: 를 붙여야할 함수/형식을 사용하기 보다 간편해지죠

 

그러나 C++을 사용하는 사람들은 using namespace std; 를 사용하지 말라고 합니다.

 

그 이유는 아래 글에서 찾을 수 있습니다.

 


이것은 성능에 관련된 것이 전혀 아닙니다. 하지만 이것을 고려해보세요. 
당신은 Foo와 Bar라고 불리는 2개의 라이브러리를 사용하고 있습니다. 

using namespace foo;
using namespace bar;

모든 것이 정상적으로 작동하고 당신은 Foo로부터 Blah()를 호출할 수 있고 Bar로부터 Quux()를 호출할 수 있습니다. 
아무 문제 없이 말이죠. 하지만 어느날 당신은 Quux()가 추가된 Foo 2.0 으로 업그레이드를 수행하려고 합니다.

이제 당신은 충돌이 발생하는 것을 볼 수 있습니다. 
Foo 2.0과 Bar가 모두 Quux()를 global namepsace에서 import하기 때문입니다. 결국 수정해야 할지도 모르며, 특히 함수의 매개변수가 동일할 경우에는 확실합니다.
만약 당신이 foo::Blah() 와 bar::Quux()와 같이 사용했다면 foo 2.0에 추가된 Quux()는 아무 문제를 일으키지 않았을 것입니다.

 

출처 : Why is “using namespace std;” considered bad practice?

 


이런식으로 오류가 발생할 가능성이 높기 때문에, 후의 개발 가능성을 위해서도 std 클래스를 저렇게 import하는것은 지양해야 할 코딩 방식입니다.

 

만약 std::cout을 사용하려는데, 너무 많아서 std::를 쓰기 귀찮다면 아래와 같은 방법을 사용하면 됩니다!

using std::cout;

적어도 이런식으로 작성했다면, 미연의 오류 발생 확률을 적어도 줄일 수 있겠죠.

 

문제가 생긴다면 저 줄만 지우고, std::를 붙여주기만 하면 되니까요!

 


2020/01/31 - [C] - [C++] std::string 앞 뒤에 개행문자 제거

2020/01/28 - [분류 전체보기] - 티스토리 애드센스 ads.txt 해결 방법

2020/01/27 - [서버 개발일지] - 글 하나로 2일 만에 끝내는 G Suite for Education 등록

2020/01/27 - [C] - Native C로 리듬게임 만들기 #1

'C' 카테고리의 다른 글

[C++] std::string 앞 뒤에 개행문자 제거  (0) 2020.01.31
Native C로 리듬게임 만들기 #1  (0) 2020.01.27
C4droid를 개조한 C언어 컴파일러  (0) 2018.05.21

댓글