[C++] 입출력 함수(cin, cout) / 네임스페이스(namespace)

2023. 3. 8. 21:41공부/C++

 

입출력 함수 (cin, cout) / 네임스페이스

 

C++에는 <iostream> 이라는 입출력을 위한 표준 라이브러리가 존재한다.

C언어에서 printf(), scanf() 등과 같은 함수를 사용하기 위해 <stdio.h>를 선언하던 것과 비슷하다고 보면 된다.

 

 

우선 코드를 하나 살펴보자.

 

#include <iostream>

int main()
{
	std::cout<<"안녕하세요.";
}

 

<실행결과>

 

 

살펴봐야하는 코드는 std::cout << "안녕하세요."; 부분이다.

여기서 cout은 iostream에 포함된 객체로 (때문에 cout을 사용하기 위해서는 iostream을 선언해야 한다.)

출력을 위해 사용된다.

 

C언어에서 printf()와 같은 역할을 한다고 보면 된다.

 

std::cout<<"출력할 내용";
네임스페이스(std) 접근지정자(::) 화면출력 객체 (cout) 스트림 연산자(<<) 출력할 내용("출력할 내용") ;

 

 

 

코드를 하나 더 살펴보자.

 

 

#include <iostream>

int main()
{
	int x;
	std::cout << "숫자를 입력하세요 -> ";
	std::cin >> x;
	std::cout << "당신이 입력한 숫자는 -> "<<x;
}

 

 

<실행결과>

 

 

이번에 살펴봐야 할 부분은 std::cin>>x; 이다.

cout이 출력을 담당한다면 cin은 c++에서 입력을 위해 사용된다.

 

cin을 사용하면 입력 버퍼에 값을 입력받은 후 Enter키를 입력했을 때 지정한 변수로 값을 전달한다.

 

 

std::cin>>x;
네임스페이스(std) 접근지정자(::) 화면출력 객체(cin) 스트림연산자(>>) 값을 전달받을 변수(x)

 

 

 

앞서 작성한 두 개의 코드에는 공통점이 있다.

그것은 바로 네임스페이스 std 이다.

 

네임스페이스(Namespace)는 C++ 표준에 도입되었는데,

여러 사람이 여러 소스를 하나의 프로젝트에서 컴파일 하여 발생하는 이름 중복 문제를 해결할 수 있다. 

 

 

예시 코드를 하나 살펴보자.

 

 

#include <iostream>

void test() {
	std::cout << "1번";
}

void test() {
	std::cout << "2번";
}

int main()
{
	test();
}

 

위 코드에는 test라는 동일한 이름을 가진 함수가 존재한다.

때문에 main 함수에 test 함수를 호출하여도 충돌이 발생한다.

 

 

#include <iostream>

namespace NumberOne{
	void test() {
		std::cout << "1번";
	}
}

namespace NumberTwo {
	void test() {
		std::cout << "2번";
	}
}

int main()
{
	NumberOne::test();
}

 

 

하지만 namespace를 사용하여 각 함수를 NumberOne, NumberTwo 라는 이름으로 묶은 후,

NumberOne::test()를 통해 접근해준다면...

 

 

 

 

무사히 NumberOne에 소속된 test함수가 실행되는 모습을 볼 수 있다.

 

 

namespace 이름 { } //네임스페이스 생성
namespace명::요소 //네임스페이스내 요소에 접근

 

 

 

그렇다면 std와 네임스페이스가 무슨 관련이 있냐? 

std는 바로 C++에서 제공하는 표준 네임스페이스다. 

우리가 사용한 cout과 cin은 std에 소속되어 있으며 using을 사용하여 생략도 가능하다.

 

 

 

#include <iostream>
using namespace std;

int main()
{
	int x;
	cout << "숫자를 입력하세요 -> ";
	cin >> x;
	cout << "당신이 입력한 숫자는 -> "<<x;
}

 

 

using name space std를 통해 std를 하나하나 입력하는 수고를 덜 수 있게 되었다.

 

 

'공부 > C++' 카테고리의 다른 글

[C++] 생성자와 소멸자  (0) 2023.04.02
[C++] 클래스(class)와 객체(instance)  (0) 2023.03.19
[C++] 문자열 (cstring과 string)  (0) 2023.03.12
[C++] C++의 특징 요약  (0) 2023.03.08