2학기가 되어서 벌써 c++에 대한 공부에 들어갔습니다. 와.. 금세 c언어를 끝내고 c++에 들어가니까 기분이 묘한데요...
C++은 뭘까요? 1학기때 배운 C에 ++가 붙어서 C언어의 확장판인가 저는 생각을 했는데요. 자세히 알아보니까 맞긴한데, 중요한 요소가 추가됬더라구요!
C++는 C언어 스타일의 코드도 컴파일러가 컴파일 해줍니다. 그래서 C언어의 모든 것들을 할 수 있으면서도, 추가로
"클래스", 객체의 개념과 오버로딩, 디폴트 함수, 네임스페이스, 예외처리등의 C++만의 기능들이 추가 되었는데요.
심지어 C++에서 문자열을 출력하는 헤더파일과 그 방법자체도 C스타일과 매우 다릅니다.
#include<stdio.h>
void main() {
printf("안녕 c~!"); //예전의 c언어 스타일
}
위의 코드가 예전에 익숙하게 봤던 c언어식 코드 스타일이라면,
#include<iostream>
int main() { //추가로 c++에선 void main()사용 불가
std::cout << "안녕 c++~!" << std::endl;
return 0;
}
c++스타일은 헤더부터 문자열 출력 방식까지 다릅니다.
하나하나 알아보자면,
#include<iostream>은
Input/Output Stream(입출력 스트림)의 앞글자를 딴 이름의 헤더파일로, c++의 입출력을 할 때 필요합니다.
이 헤더가 있으면, std::cout << "출력되는 문자열"<<std::endl; 과 같이 해서 문자열을 출력할 수 있게 됩니다.
여기서 모르는 것 투성이죠?
cout은 출력을 하는 연산자라 생각하면 쉬운데, 사실 printf()함수같이 함수를 사용한 출력이 아니라 나중에 배울 객체를 이용한 출력입니다. 사실 그래서 cout은 함수같은 괄호가 없습니다.
<<는 오른쪽의 출력할 값을 왼쪽으로 보내주는 연산자를 의미합니다.
자세하게는 버퍼에 삽입함으로써 cout이 출력하게 합니다. (둘다 iostream헤더파일에 선언되어 있습니다.)
endl은 버퍼 값을 날리면서 개행하는 연산자며, 보통 출력의 마지막에 이것을 달아줍니다.
그런데 std와 그 오른쪽에 붙은 ::은 대체 뭘까요?
사실 std은 ANSI C++표준에서 정의한 것으로 std는 표준 형식 방법을 의미합니다.
::은 꽤 중요한데,
이것의 이름은 '범위지정 연산자' 입니다. 범위지정 연산자는 함수, 변수명 같은 이름을 namespace에 따라서 분리해 주는 역할을 수행합니다. namespace에 대해서는 다음시간에 다루기로 하겠습니다.
쉽게 이해하자면 아까 std::cout 이라는 것은 cout의 많은 종류 중에서 std(C++ 표준에서 정의한)인 cout을 사용하겠다는 것입니다.
이렇게 맨처음 문자열을 출력하는 것을 c언어에서도 맨 처음 했듯이, c++에서도 맨처음으로 문자열을 출력해봤는데요.
특히 " std::cout << ~ " 부분이 생소한 개념이 모여있어 좀 난감하긴 합니다. 다음시간에 namespace에 대해 배우면서 익숙하게 만들도록 합시다!
참고한 곳