안녕하세요 파일입니다. 저번 작성하던 C언어 강좌를 마치고 C++ 강좌를 계획했었으나 C++의 너무나도 방대한 레퍼런스 덕분에 강좌 대신에 매일 배운것을 정리하고 짧은 레퍼런스 형태로 정리를 해서 도움을 드리고자 글을 작성하려고 합니다.
그리고 C언어에서 C++로 막 넘어온 분들을 대상으로 C언어와의 차이점과 비교하면서 작성할것이니 참고 부탁드립니다.
오늘은 C++의 기본 입출력인 std::cout, std::endl, std::cin 에 대해 알아보겠습니다.
#include <iostream>
int main(){
std::cout << "Hello World" << std::endl;
return 0;
}
Hello World
--------------------------------
Process exited after 0.01045 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
모든 언어에서 해봤듯 C++ 에서 "Hello World" 를 찍어내려면 다음과 같이 작성하시면 됩니다.
<C와 C++의 차이점>
C++은 C언어의 문법을 그대로 계승해서 조금은 수정이 필요할 수 있지만,
웬만해선 C에서 작성한 프로그램은 C++에서도 실행시킬 수 있습니다.
세세하게 보면 조금 다르지만 main() 함수가 시작지점이라는 것, return 0 으로 잘 종료됬다고 운영체제에게 값을 던지는 것 등 구조가 거의 동일합니다.
그렇다고 해서 C++이 C언어의 확장팩 같은 개념은 아닙니다.
위쳐2와 위쳐3 처럼 게임성과 스토리는 계승했지만, 게임 자체는 완전히 대격변 되어버렸잖아요?
C와 C++은 이런 관계입니다. C는 기본 절차지향적인 개념에서만 프로그래밍을 했다면 C++은 함수형 프로그래밍, 객체 지향 프로그래밍, 절차지향 프로그래밍 모두 지원하는 멀티 패러다임 언어입니다.
때문에 C가 꼭 C++의 부분집합이 될 수도 없는 것이구요. 초심자 입장에서 C와 C++은 문법은 비슷하게 따라가지만 완전히 다른 언어라고 파악하고 접근하는것이 좋습니다.
이제 세세한 차이점을 좀 찾아봅시다.
#include <iostream>
익숙한 전처리기 문입니다. 헤더 파일 삽입을 위한 #include 키워드 입니다.
보시면 iostream 이라는 헤더파일을 포함시키고 있습니다.
iostream 헤더 파일은 C++ 에서 표준 입출력에 필요한 것들을 포함하고 있습니다.
위에서 사용하는 std::cout, std::endl 도 저곳에 포함되어 있구요.
C언어에서 printf, scanf 사용을 위해 <stdio.h> 를 include 한것과 동일한 행위입니다.
그런데 C언어와의 차이점은 헤더 파일 이름 뒤에 .h가 붙지 않고 있습니다.
C++에서는 프로그래머가 직접 정의한 헤더 파일이 아닌 표준 헤더 파일의 선언에서는 확장자를 생략하기로 약속되어 있습니다.
(그래서 iostream.h 라는 것도 있는데 옛날에 사용하던 것이고 이제 지원하지 않는 추세입니다.)
~ 참고 :: https://uzooin.tistory.com/66
int main()
C와 마찬가지로 C++에서의 main 함수는 프로그램이 실행될때 가장 먼저 실행되는 부분입니다.
std::cout << "Hello World" << std::endl;
<출력결과>
Hello World
--------------------------------
보시면 Hello World 를 출력하고 있는데 조금 특이한 방법으로 출력을 합니다.
<< 기호를 통해 출력을 하고 있고, std::endl 은 한줄 띄운다는 의미로 C에서 \n (개행) 과 동일합니다.
C++ 에서 출력을 할때 표준은 std 네임스페이스에 정의되어 있는 cout 을 사용하는데
코웃? 이라고 읽어야 하나 막막하고 생소하지만 c / out 으로 끊어 읽으시면 됩니다.
* 네임스페이스에 관한 내용은 나중에 다룹니다.
cout ==> console output의 약자입니다.
그럼 입력도 가능할까요? input도 있을까요.
네 있습니다 C++에서 입력을 받을땐 cin ==> console input 을 사용합니다.
어쨌든 C++에서 무언가 출력을 하고 싶을땐
std::cout << 출력할 대상;
으로 출력을 해주시면 됩니다.
* 여기서 cout은 객체 이고 << 기호는 일종의 연산자로써 오른쪽에 있는 내용을 객체에 던진다고 이해하시면 됩니다.
예를 들어서 std::cout << "a" 라고 하면 "a" 라는 문자열을 cout 객체에 던진다고 생각하시면 됩니다.
우선 자세한 내용은 입출력 심화편에서 다루겠습니다.
그리고 C처럼 서식문자를 지정해줄 필요도 없어서 상당히 간편합니다.
그냥 출력 대상을 << 기호로 구분해주시고 출력해주시면 됩니다.
*사실 C++에서 printf / scanf를 그대로 사용할 수는 있는데
우선은 C++에서는 cout / cin 이 표준이란것만 알아두시면 됩니다.
#include <iostream>
int main(){
int a = 10;
double b = 2.35;
char c = 'A';
std::cout << a << std::endl << b << std::endl << c;
return 0;
}
10
2.35
A
--------------------------------
Process exited after 0.01163 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
보시면 이렇게 여러 자료형으로 저장된 데이터들을 쉽게 출력 가능합니다.
중간중간 개행을 위해서 std::endl 을 넣었는데 \n을 써줘서 출력한걸로 이해하시면 되겠습니다.
return 0;
마지막으로 운영체제가 프로그램 실행을 위해 main() 함수를 호출했을 것인데,
프로그램 입장에선 운영체제에게 프로그램이 잘 끝났다고 알려주기 위해 0을 반환하고 프로그램은 종료됩니다.
#include <iostream>
using namespace std;
int main(){
int a = 0;
cout << "숫자를 입력해주세요 : ";
cin >> a;
cout << "입력받은 숫자 : " << a;
return 0;
}
숫자를 입력해주세요 : 20
입력받은 숫자 : 20
--------------------------------
Process exited after 0.8433 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
이제 한번 입력도 받아봅시다. 만약에 사용자로부터 숫자를 입력받아서 a라는 int 변수에 저장할때는 다음과 같이 std::cin 을 이용합니다.
cin 으로 입력을 받을땐 아래와 같이 합니다.
std::cin >> 저장할 대상(변수 등등);
C언어에서 scanf로 값을 받아올때는 입력을 받고 변수에 값을 넘겨주기 위해 포인터로 접근해서 a라는 변수에 저장한다면 &a 처럼 a의 주소를 넘겨줘야 했었는데
C++에서의 cin은 편리하게 앞에 & 연산자를 붙여서 주소로 넘겨줄 필요가 없습니다. 또한 scanf는 int 형태로 입력 받을지, char 로 입력받을지에 따라서 %d 나 %c 로 구분해서 적어줘야 했지만 이건 그럴 필요도 없습니다.
이것 또한 매우 간편해진 느낌입니다!
C++ 에서는 포인터 이외에도 변수를 가리키는 방법으로 레퍼런스(참조라)란 새로운 개념 덕분에 cin 을 통해 입력 받을때 서식문자, &연산자 없이 알아서 처리해줍니다.
* 자세한 내용은 참조자 편을 참고 바랍니다.
주의할 점은 출력 역할인 cout의 경우 부등호들의 방향이 << 였지만 cin의 경우엔 그 반대인 >> 입니다.
이 방향을 외우는 저만의 방법이 있는데 조금 공유해보자면,
출력 역할에 있어서 cout 과 대응되는 printf의 경우 오른쪽에 있는 변수를 왼쪽으로 끌어와서 형식대로 출력하기 때문에 화살표 방향은 <<로 기억을 하고
입력 역할에 있어서 cin 과 대응되는 scanf의 경우 입력 형식대로 콘솔 입력을 받아서 왼쪽에서 오른쪽으로 변수에 저장하기 때문에 화살표 방향은 >> 로 기억을 합니다.
다른 방법으로는
std::cout이 출력 역할을 하는 객체이므로
무언가 출력할땐 std::cout 에 << 연산자로 데이터를 던진다고 생각하면 되고,
std::cin 은 입력을 받는 객체이므로
키보드에서 입력한값을 std::cin에서 꺼내와 >> 방향으로 변수에 넣는다고 생각하시면 됩니다.
'프로그래밍 > C++' 카테고리의 다른 글
[C++] new와 delete (0) | 2022.03.12 |
---|---|
[C++] Lvalue와 Rvalue란? (0) | 2022.03.09 |
[C++] 참조자 (레퍼런스, Reference) (0) | 2022.03.08 |
[C/C++] Tricky C Quizzes (Never a good code) (0) | 2022.03.03 |
[C++ Basic] namespace(이름공간)란? (0) | 2022.03.03 |