안녕하세요. 취업한 공대누나입니다.
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 개념이 도입되었습니다.
내부 식별자에 사용될 수 있는 유효 범위를 제공하는 선언적 영역인데요.
소스 코드를 보면서 간단하게 설명드리도록 하겠습니다.
함수의 이름이 같은데 충돌이 안 나는 것을 확인할 수 있습니다.
이런 것들은 개발자가 여러명이서 각각 따로 코딩을 하고 소스 코드를 합치는 과정에서 유용하게 사용될 수 있는데요. 함수 이름이 겹쳐버리면 충돌이 일어나게 되니깐요 ㅎㅎ
그리고 여기서 ::연산자는 '범위 지정 연산자' 혹은 '스코프 설정 연산자'라고 하며 어떠한 네임스페이스를 가리킬 때 사용하는 연산자입니다.
약간은 모호했던 개념이 확실해졌는데요.
혹시라도 모르시는 개념이 있으면 댓글 남겨주세요.
같이 공부하면 좋을 것 같습니다.
'전자 공학 > C언어 C++' 카테고리의 다른 글
[C++ 독학하기] 3. new와 delete 연산자에 대한 개념 (0) | 2021.02.22 |
---|---|
[C++ 독학하기] 2. 인스턴스 개념, cout, cin (0) | 2021.02.20 |
[C++ 독학하기] 0. 파일 소스을(를) 열 수 없습니다. "stdafx.h" (2) | 2021.02.16 |
C언어와 C++의 차이점 (절차지향과 객체지향) (0) | 2021.02.12 |
[C언어 독학하기] 21. 파일 입출력, puts fgetc, fputc (0) | 2020.12.31 |