본문 바로가기

전자 공학/C언어 C++

[C++ 독학하기] 1. std, namespace, cout의 개념

반응형

안녕하세요. 취업한 공대누나입니다.

C언어나 C++나 처음 책을 펴게 되면 또는 처음 공부하게 되면

대게 Hello World!를 출력하는 예제를 접합니다.

C언어에서는 printf() 함수를 이용해서 Hello World를 출력했던 것을 다들 알고계시겠지요?

C++는 출력해주는 부분이 이와 다릅니다.

한 번 자세히 보도록 하겠습니다.


1. Hello World 출력하기

Hello World 출력 (1)

 

std

std(클래스)에는 cout, cin, endl를 포함하여 자주 사용되는 함수들이 정의되어 있습니다.

(처음 하시는 분들은 cout이라는 것이 뭐지 할 수 있는데 C언어의 printf와 같이 C++에서는 콘솔 출력을 담당합니다.)

즉 표준라이브러리에 있는 변수 또는 함수들은 std 네임스페이스에 포함되어 있는데요.

그래서 표준 라이브러리를 사용하기 위해서는 std::를 붙여야 합니다.

위에서 보시면 std::cout이렇게 되어 있는 것을 보실 수 있습니다. 

 

저기서 std::cout이라는 것은 std 네임스페이스에 속한 cout이다 라고 할 수 있습니다.

마찬가지로 std::endl이라는 것은 std 네임스페이스에 속한 endl이다 라고 할 수 있는 것입니다.

(참고로 endl은 엔터를 의미합니다.)

 

그래서 std::cout << "Hello World!" << std::endl;의 의미를 조금 더 직관적으로 말해보면

std에 속한 cout 객체에 Hello World라는 문자열과 endl 객체를 넘겨서 (<<) 문자열을 출력해라 라는 뜻입니다.

 

하지만 이렇게 매번 std::을 붙이기는 귀찮습니다.

그래서 우리는 using namespace std를 이용해서 아래와 같이 생략해서 사용할 수 있습니다.

 

Hello World 출력 (2)

namespace

그렇다면 과연 네임스페이스(namespace)란 무엇일까요?

모든 식별자가 고유하도록 보장하는 코드 영역을 정의합니다. '소속'의 개념이라고 생각하시면 되는데요.

내부 식별자 간의 충돌 문제를 피하기 위해서 namespace 개념이 도입되었습니다.

내부 식별자에 사용될 수 있는 유효 범위를 제공하는 선언적 영역인데요.

 

소스 코드를 보면서 간단하게 설명드리도록 하겠습니다.

 

함수의 이름이 같은데 충돌이 안 나는 것을 확인할 수 있습니다.

이런 것들은 개발자가 여러명이서 각각 따로 코딩을 하고 소스 코드를 합치는 과정에서 유용하게 사용될 수 있는데요. 함수 이름이 겹쳐버리면 충돌이 일어나게 되니깐요 ㅎㅎ

 

그리고 여기서 ::연산자는 '범위 지정 연산자' 혹은 '스코프 설정 연산자'라고 하며 어떠한 네임스페이스를 가리킬 때 사용하는 연산자입니다.

 


약간은 모호했던 개념이 확실해졌는데요.

혹시라도 모르시는 개념이 있으면 댓글 남겨주세요.

같이 공부하면 좋을 것 같습니다.

반응형