본격적으로 전에 학습했던 절차 지향 언어인 C언어에서 C++로 문법을 갈아타는 공부를 시작해보자.
우선, 코딩 공부를 처음 시작했을 때 했던 것처럼 "Hello World!" 를 출력해보자!!!
#C 스타일!!!
#include <stdio.h>
int main()
{
printf("Hello world!");
return 0;
}
바로 C++로 같은 결과를 출력해보자.
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!";
return 0;
}
보시다시피 큰 차이는 없다.
using namespace std;
위의 코드는 왜 쓰는가 하면 C++ 표준 라이브러리인 std네임스페이스의 멤버들을 사용할 때, 매번 std::접두사를 붙여야한다는 번거로움을 피하기 위해서인데, 이게 무슨 말인지 직관적으로 이해하기 위해서 위의 C++코드를 using namespace std; 없이 짜보고, 비교해보자!
#include <iostream>
int main()
{
std::cout << "Hello World!";
return 0;
}
이처럼 std::를 내가 무언가 출력하거나 입력받을 때, 아니 어떠한 함수를 사용하던 간에 붙여야 한다는 번거로움을 피하기 위해서 쓴다고 생각하면 된다.(사실 그냥 iostream 쓰면서 같이 습관처럼 작성하자)
앞의 출력에서는 솔직히 큰 메리트를 못 느끼지만, cin은 나름 매력적인 장점을 가지고 있기에 잘 살펴보자.
우선, 앞에서 학습한 느낌 그대로 C로 코드를 짜보고 같은 결과를 C++로 짜보고 비교해보자!
#include <stdio.h>
int main()
{
int a;
double b;
char k;
printf("정수를 입력하세요: ");
scanf("%d", &a);
printf("실수를 입력하세요: ");
scanf("%lf", &b);
printf("문자를 입력하세요: ");
scanf(" %c", &k);
printf("%d %lf %c", a, b, k);
}
#include <iostream>
using namespace std;
int main()
{
int a;
double b;
char k;
cout << "정수 입력";
cin >> a;
cout << "실수 입력";
cin >> b;
cout << "문자 입력";
cin >> k;
cout << a << b << k << endl;
return 0;
}
가장 큰 장점은 바로 형식 지정자를 굳이 안 적어도 된다는 점이다.
(C에서 형식지정자 잘못 적어서 에러 뜬 적이 한 두 번이 아님을 감안하면 필자에겐 매우 큰 장점이라고 생각된다.)
또한 여기서 중요한 점은 cout과 cin의 화살표 방향이 다르다는 점이다. 이를 꼭 인지한 상태로 자주 사용하며 익숙해져야한다. 사실 직관적으로 이해하려면 사용자가 입력해야하는 cin의 경우에 >> 방향으로 작성하는데 우리가 gcc에 입력해왔던 경험을 떠올려보면 << 뒤에 쓰는 것보다는 합리적이라는 생각이 든다.
printf("Hello World!\n");
cout << "Hello World!" << endl;
줄바꿈 문자를 C에서는 \n으로 지원하듯이, C++ 에서는 endl을 지원한다.
end line의 약자라고 생각하면 되는데 매우 중요한 사실은 endl이 \n에 비해서 시간이 꽤 걸린다는 것이다.
코딩테스트와 같이 코드의 작동 시간에 제한이 있는 경우를 위해서라도 endl보다는 \n을 적극적으로 사용하길 추천한다.
#BEST
cout << "Hello World!" << "\n";
우선, 다음 reference를 읽어보고 오길 바란다.
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL
아직 연습하는 단계인 우리에게 시간 초과는 큰 문제는 아니긴 하지만, 실력이 올라 대부분의 문제들을 어느 정도 구현할 줄 아는 상태라면, 위와 같은 사실을 인지한 채로 코드 최적화까지 진행할 수 있으면 좋겠다.