**using namespace std;**는 C++ 프로그래밍에서 매우 흔하게 사용되는 문장 중 하나입니다. 이 문장은 C++ 표준 라이브러리의 모든 요소를 현재의 코드 범위에서 사용 가능하게 해주는 역할을 합니다. 아래에서 자세히 설명하겠습니다.
C++에서 **std**는 "Standard"의 줄임말로, C++ 표준 라이브러리에 정의된 다양한 기능과 객체들을 포함하는 네임스페이스(namespace)입니다. 이 표준 라이브러리는 문자열 처리, 입출력, 컨테이너(배열, 벡터, 리스트 등), 알고리즘 등 다양한 기능을 제공합니다.
그런데, C++에서는 네임스페이스를 사용하여 식별자(변수, 함수 등)가 충돌하는 것을 방지합니다. 예를 들어, 여러 라이브러리나 사용자 정의 코드에서 같은 이름의 함수나 변수를 사용하는 경우 충돌이 발생할 수 있습니다. 따라서 표준 라이브러리의 요소를 사용할 때, C++에서는 해당 요소들을 std 네임스페이스 안에 묶어두었습니다.
using namespace std; 문장은 이러한 std 네임스페이스를 현재의 코드 범위에 가져오는 역할을 합니다.
즉, 이 문장을 사용하면 **std::**를 붙이지 않고도 표준 라이브러리의 요소를 사용할 수 있습니다.
예를 들어, **std::cout**은 표준 출력 스트림을 나타내는데, **using namespace std;**를 사용하면 아래와 같이 간단하게 사용할 수 있습니다.
#include <iostream>int main() {
cout << "Hello, World!" << endl;
return 0;
}
하지만, 네임스페이스를 가져오는 것은 식별자 충돌을 피하기 위해 사용하는 좋은 방법이 아닐 수 있습니다. 특히 큰 프로젝트에서는 식별자 충돌 문제를 디버깅하기 어려울 수 있으므로, 좋은 프로그래밍 습관 중 하나는 using namespace std; 대신 필요한 표준 라이브러리 요소만 선택적으로 가져오는 것입니다. 예를 들어, **using std::cout;**와 같이 필요한 것만 네임스페이스에서 가져와 사용할 수 있습니다. 이렇게 하면 코드의 가독성을 높이고 충돌 가능성을 줄일 수 있습니다.
챗 gpt에게 물어봤지만 C++ 에서의 표준 라이브러리의 모든 요소를 현재의 코드 범위에서 사용 가능하게 해주는 역할이라고 한다.
std가 무슨뜻인지 몰랐지만 Standard라는 뜻이 있는것도 처음 알게됐다
다양한 기능과 객체들을 포함하는 네임스페이스(namespace) 라고 하는데 문자열 처리, 입출력, 컨테이너, 알고리즘 등 다양한 기능을 사용할 수 있다고 한다.
사실 using namespace std; 라는 문장을 std:: 를 사용하지않고 편한 사용을 위해서 그냥 그렇게 쓴다고만 알고 있었다.
대부분의 C++수업이나 강의들은 이런 것 들에 대한 자세한 정보를 알려주지 않는다. 필요없는지는 모르겠지만 나는 항상 이런게 왜 이렇게 사용되는지 너무 궁금했다.
처음 Java를 배웠을때도 나와 뜻이 잘 맞는 친구와 static과 new를 사용해서 객체를 생성했을떄의 차이점이 뭔지 너무 궁금해서 1~2시간 정도의 토론을 나누며 결국 답을 찾아냈다.
지금은 당연하게도 너무 쉬운 설명이다. 하지만 친구와 그렇게 코드에대해 자세하게 토론할 수 있는 친구가 있었던게 너무나 고마웠다.
하여튼 앞으로도 뭔가 알고싶은게 있다면 일일이 다 찾아보고 알아내고야 말겠다!
'C++' 카테고리의 다른 글
C++ cout, "<<", endl; (0) | 2023.09.26 |
---|---|
C++ 포인터 (2) | 2023.09.15 |
c++ 카페관리 프로그램 (업그레이드 버전) (0) | 2023.01.12 |
c++ minimum two-way alignment (최소 양방향 정렬)(내림차순) (0) | 2023.01.12 |
c++ Interchange Insertion Sort(자리교환 삽입정렬)(내림차순) (0) | 2023.01.12 |