C++ 입력과 출력
목차
이번 포스트는 C++의 입력과 출력에 대해서 알아보겠습니다.
C언어와 약간 비교하자면 C는 printf 함수를 썼는데 cout 는 cin 객체와 연산자를 사용합니다.
class 문법을 배우기 전에는 객체를 어떻게 만드는지 알기 힘들기 때문에 개괄적인 설명입니다. 여기서는 C++의 콘솔창에서 입력과 출력 방법을 이해하고 실행하는 것이 목표입니다.
cout and cin
#include <iostream> #include <string> using std::cout; using std::cin; using std::string; using std::endl; int main() { string name; int myFavorite; cout << "Hello my friend!" << endl << endl; cout << "What's your name?" << endl; cin >> name; cout << "Hi! [" << name << "] Nice to meet you!" << endl; cout << "what number do you like?" << endl; cin >> myFavorite; cout << "you picked [" << myFavorite <<"] that's cool!"; return 0; }
Hello my friend! What's your name? MasterKay Hi! [MasterKay] Nice to meet you! what number do you like? 777 you picked [777] that's cool! -------------------------------- Process exited after 10.65 seconds with return value 0 계속하려면 아무 키나 누르십시오 . . .
cout과 cin은 표준입출력 객체로 C++이 객체를 지향한다는 냄세를 시작부터 물씬 풍기고 있습니다.
>>, << 이런 알 수 없는 녀석들이 등장했습니다. 전처리기 다음에는 using std::cout 같은 새로운 것도 나옵니다.
C언어에서 printf 함수를 호출하던 것과는 다르게 객체로써 처리하는 모습을 보입니다.
맨 위에서 시작하면 iostream 헤더를 포함합니다. (include) iostream 은 input 입력과 output 출력에 대한 라이브러리 헤더인데요. stream 은 데이터를 하나의 스트림(흐름) 단위라는 의미입니다.
그 다음에 나오는 using 은 현재의 이름공간(이 소스코드)에서 사용할 객체-이름을 뽑아오는 겁니다. cout 은 원래 std::cout 으로 사용해야 합니다. 매번 귀찮으니까 std::cout은 여기서 사용하겠다고 추출합니다.
귀찮으니까 이걸 퉁쳐서 using namespace std 라고 불러들여도 되는데 바람직한 코딩 방식은 아닙니다. 자기가 필요한 객체만 전처리기에 포함하는 방식이 귀찮더라도 안전합니다.
변수(variable) 선언과 데이터형(data type)은 별도로 다루겠지만 string 은 객체입니다. 우리는 그냥 문자열로 알고 있지만 문자열;;; 이라는 것은 컴퓨터 프로그래밍에서 가장 심오한 주제에 속합니다.
다른 언어도 그렇겠지만 C++는 문자열의 밑바닥까지 훑어야 하기 때문에 이를 다루는 모든 멤버 함수를 하나씩 실행하고 들여다 보는데만도 많은 시간이 걸릴겁니다.
string 도 별도의 주제라는 점을 알아두고 문자열 객체 선언이라고 하고 넘어갑니다.
cout
cout 은 출력을 위한 객체입니다. << 이것은 연산자 오버로딩이란 방법으로 cout 객체와 다음의 객체를 결합하여 표준출력(기본은 모니터)에 보내는 역할을 합니다. stream(흐름)이라는 것은 표준출력에 이른 내용들을 시냇물처럼 주욱 보내놓은 다음 한번에 출력되는 방식을 의미합니다.
설명 자체가 어려울 수 있습니다만, 소프트웨어 기술자들은 데이터를 데이터 스트림이라고 합니다. (Data Stream) 데이터를 하나하나씩 보내서 처리하는게 아니라 물처럼 전체적으로 대충 수조에 밀어넣고 일정량이 차오르면 혹은 목적에 따라 끓어서 스트림을 방출하는 방식으로 운영합니다.
스트림(Stream)이라는 개념 자체가 객체(Object)에 잘 어울리는 아이디어입니다. C++이 처음부터 나는 C언어와 다르다라고 주장하는 근거가 될 수 있죠.
또 << 이 연산자 오버로딩을 통해서 알 수 있는 것은 다양한 데이터 형식을 출력할 수 있다는 점입니다. 문자열 리터럴, 문자열 객체 string, 정수형 변수 등 자료형에 구애받지 않습니다.
C언어에서는 printf 함수에 매번 %d %f 같은 포맷지시자를 지정해줘야 했습니다. 이 또한 차이점이라 볼 수 있습니다. 함수나 연산자나 처음 보면 헷갈릴 수 있습니다. 여기 나오는 문법적인 내용들은 모두 각각의 챕터에서 별도의 주제로 상세하게 다루는 내용입니다. C++ 에 입문 경우 모르는게 당연합니다.
C언어에서는 객체지향 개념이 없기 때문에 C언어를 어느정도 학습한 상태에서도 C++에 들어오면 처음부터 다시 해야 합니다. 그래서 많은 분들이 시간을 아끼려면 C언어를 하지 말고 C++부터 하라는 조언을 합니다.
다만 그 분들은 자기는 C언어 부터 했으니까 알 수 있는 것을 덮어놓고 입문자들에게 C++을 해라고 조언하는 거니까 판단은 각자 알아서 할 일입니다. 어차피 남탓할게 아닙니다. 자기가 얼마나 시간을아껴서 언어의 핵심에 파고드냐 마느냐의 문제입니다.
cin
cin 은 cout 의 반대입니다. 연산자도 반대모양이죠. >> 콘솔에서 사용자 입력을 받는 표준입력객체입니다.
주의할 점은 공백(space)을 단위로 입력받습니다. 예를 들어 처음에 masterkay 777 이라고 작성했다면 name 에는 masterkay가 myFavorite 에는 777이 들어갑니다. 이는 cin 이 입력 버퍼에 있는 내용을 가져오기 때문입니다. 두번째 cin 에서 버퍼를 확인해보니 뭐가 들어있기 때문에 바로 그 내용이 출력이 됩니다. 이는 ignore 등 버퍼를 비우는 메소드를 통하여 해결할 수 있습니다. cin.ignore(문자개수, ‘\n’);
요약
C++ 입력과 출력에 대하여 알아봤습니다. 여기서 모든 것을 이해하려고 노력하는 것 보다는 표준입출력의 사용법을 익힌다는 생각으로 접근합니다.
콘솔 화면은 프로그래머가 제일 많이 보는 화면이기도 합니다. 콘솔창의 입출력 도구는 C++을 이해하는 도구로 사용됩니다.
C++ 을 공부할 때는 다른 언어들보다는 조금 더 깊이가 있어야 합니다. 영문 튜토리얼의 설명들이 잘되어 있으니 시간날 때 마다 틈틈히 읽어보는 것을 추천합니다.
모두코드의 씹어먹는 C++ 내용도 매우 좋습니다. C++이 어렵지만 다행스러운 건 좋은 자료가 많은 언어입니다.
외부참고문서
Basic Input/Output – C++ 입력과 출력 (cplusplus.com)
Introduction to iostream: cout, cin, and endl | Learn C++ (learncpp.com)
C++ 입력과 출력 Basic Input Output (cin, cout, endl) – javatpoint