본문 바로가기
Unreal/C++

[C++ 01.02] 표준입출력, 헤더파일, 네임스페이스, 범위지정 연산자

by 우타미 2025. 1. 2.
728x90

C언어의 배열과 포인터까지 공부한 후 C++로 넘어왔다.

아니 책을 샀는데 본서는 C언어를 공부한 독자를 대상으로 집필된 C++기본서 라고 한다...

그래서 나는 C 를 공부해야만 했고.. 물론 학원 커리큘럼도  C부터 시작하긴 했지만

내 머릿속의 지우개는 C언어를 다 지워버림 그렇다 필자는 또 ㅈ된 거다. 프로그래밍은 순탄하게 간 적이 왜 한 번도 없는가.

이 길은 어쩌면 나에게 맞지 않을 수도 있다는 슬슬 예감이 옴, 하지만 난 상여자이기 때문에 고난과 역경은 더욱 나를 강하게 만들 뿐 다시 가보자고

 이런 말은 책 표지에 좀 박아둬야하는거 아닐까. 책을 구매 후 펼쳐보니 C언어 책을 교보문고 가서 부랴부랴 구매하게 됨

C와는 다르게 소스파일을 .cpp로 만들어야 한다.  

1. 헤더파일과 표준 입출력

구분 C C++
헤더파일 <stdio.h> <iostream>
입력문 scanf std::cin
출력문 printf std::cout
개행 \n \n  std::endl

 

C에서는 #include <stdio.h>를 사용했다면 C++에서는 #include <iostream> 을 헤더파일 선언 추가해야 한다.

C에서의 scanf를 대신해  std::cin과 >> 연산자를 이용해 출력을 하고 printf를 대신해 std::cout과 <<를 사용한다.

 std::cout << 출력대상
이 출력대상의 위치에는 무엇이든 올 수 있다. C처럼 따로 출력 형식 지정자를 지정하지 않아도 (ex. %d %s ....) 사용이 가능하다는 것이 좀 쩌는듯

<<은 무엇인가?

<<는 둘 이상의 출력대상을 연이어 출력할 때 필요한 것

 std::cout << 출력대상 << 출력대상<<출력대상 ;  이런 식으로

줄 바꾸기는 C에서의 \n를 써도 되지만 std::endl 를 주로 사용하는 것 같다. 

예문을 통해 익혀보자.

#include <iostream>

int main(void)
{
	int num1;
	int num2;

	std::cout << "Hello word\n";
	std::cout << "Hello" << std::endl << "world" << std::endl;

	std::cout << "숫자를 입력해주세요 : ";
	std::cin >> num1;

	std::cout << "두번째 숫자를 입력해주세요 : ";
	std::cin >> num2;

	std::cout << "두수의 합";
	std::cout << "num1 + num2 = " << num1+num2; 
	return 0;
}

 이 코드를 실행시켜 보면 

개행이 어떻게 되는지 숫자 입력을 받고 어떻게 내보내는지 간략하게 알 수 있다.

오키 여기까진 괜찮은 것 같은데 std::가 무슨 역할을 하는지 궁금하다.

2. 네임스페이스

네임스페이스는 소속을 지정해 주는 역할을 한다. cin, cout을 쓸 때  앞에 붙는 std:: 는 standard의 줄임말로 C++에서 사용하는 여러 가지 함수, 객체, 클래스 등이 정의된 네임스페이스이다. 

네임스페이스는 범위를 부여해 여러 라이브러리를 포함할 때 충돌을 방지하기 위해 사용한다고 한다.

보통은  std::를 다 써주는 게 좋지만 배우는 과정에서 짧은 예문만 사용할 때에는 소스 앞부분 using namespace std;를 넣어주면 std::를 생략하고 쓸 수 있다. 

#include <iostream>
using namespace std;

int main(void)
{
	int num1;
	int num2;


	cout << "Hello world" << endl;

	cout << "숫자를 입력해주세요 : ";
	cin >> num1;

	cout << "두번째 숫자를 입력해주세요 : ";
	cin >> num2;
	cout << "두수의 합";
	cout << "num1 + num2 = " << num1+num2; 
	return 0;
}

이렇게 코드가 좀 더 치기 쉬워졌다. 

범위를 부여한다는 게 좀 어렵게 다가온다면 아래의 코드를 쳐보자

#include <iostream>

namespace momo
{
	void function(void)
	{
		std::cout << "momo가 정의한 함수" << std::endl;
	}
}
namespace tami
{
	void function(void)
	{
		std::cout << "tami가 정의한 함수" << std::endl;
	}
}
int main(void)
{
	momo::function();
	tami::function();
	return 0;
}

네임 스페이스 momo에 function이라는 함수를 만들었다.

그리고 네임스페이스 tami에 function 동일한 이름의 함수를 만들었다.

메인함수에서 이 둘의 함수를 불러낼 때 네임스페이스를 사용해 범위를 부여해 주면

실행결과는 각 네임스페이스에 있는 함수를 불러온다는 것이다. 

그렇다면  ::은 무엇인가?

 

3. 범위지정 연산자

std:: 라든가 위 예제에서의 momo::, tami:: 에서 :: 이란 무엇인가? 이를 범위지정 연산자라고 부른다.
이름뜻대로 네임스페이스를 지정할 때 사용하는 연산자이다. ~의 라고 생각하면 편하다.

momo::fonction 모모 함수 이런 느낌

 

728x90