프로그래밍/C++

cout을 이용한 출력

GSW 2018. 12. 8. 18:43
반응형

프로그래밍 언어를 처음 배우면서 제일 많이 쓰는 예제는 아마도 "Hello World" 출력 함수가 아닐까 생각한다. 이번 포스트에서도 마찬가지로 cout을 이용해서 "Hello World"를 출력하는 내용을 다룰 예정이다.


std::cout

 cout은 c out, 즉 씨아웃이다. 이름에서 알 수 있듯이 out 즉, 무엇인가를 내보내는 것이라는 느낌을 받을 수 있다. 바로 코드를 보도록 하자.

 

Hello_World.cpp

#include <iostream>

int main()
{
    std::cout<<"Hello World"<<std::endl;

    return 0;
}

 코드를 차례대로 보면 제일 먼저 #include <iostream>이 있다. 이 줄은 전처리기에 iostream파일의 내용을 추가하라는 지시문이다. 이 지시문은 컴파일이 실행되기 전에 먼저 실행된다. 전처리기 지시문은 #으로 시작하는 것이 특징이며 #define, #if 등 다른 지시문들도 많이 존재한다. iostream파일에는 C++ 입출력과 관련된 여러가지 정의들이 포함되어있고 이런 종류의 파일을 헤더파일이라고 부른다. iostream의 io는 각각 input과 output을 의미한다고 보면 된다. 위에서 사용된 std::cout와 std::endl 또한 iostream과 관련되어 있다. 

 그 다음으로는 int main()이 있다. 이 줄은 함수 정의문의 시작이며 그 다음줄에 있는 { 부터 } 사이의 내용이 함수의 몸통이 된다. int는 함수의 출력값이 int형 데이터라는 것을 뜻하고 main은 함수의 이름 그리고 ()는 함수가 필요로 매개 변수 목록이다. 괄호 안에 매개 변수를 입력하면 되는데 이 경우에는 괄호안에 매개 변수가 없으므로 이 함수는 매개 변수를 전달받지 않는 함수임을 알 수 있다. 여기서 함수의 이름이 main이라는 것에 주목해야한다. C++에서 main함수는 프로그램이 시작되는 부분이며 main함수가 없다면 실행할 수 있는 프로그램으로 컴파일하지 못한다. 또한 main함수가 2개여도 마찬가지로 컴파일하지 못한다. main함수는 프로그램 그 자체라고 생각하면 된다. 이것이 불만일 수도 있지만 전 포스트에서 얘기한 C++ 표준에 해당되는 내용이기 때문에 어쩔 수 없이 따라야 한다.

 그 다음으로는 {로 시작해서 }로 끝나는 함수의 몸통 부분이 있다. 이 몸통 부분에서 함수가 실행되는 절차를 정의한다. std::cout<<"Hello World" 부분을 보면 출력할 메세지가 큰따옴표로 둘러 쌓여있다. 이것을 C++에선 문자열이라고 부른다. 그리고 std::cout는 iostream에 미리 정의된 출력을 담당하는 객체이고 <<는 이와 관련된 연산자이다. 간단하게 생각해서 <<가 가리키는 방향으로 데이터가 이동한다고 생각하면 된다. 위의 코드의 경우 "Hello World"문자열 데이터가 std::cout 객체로 이동하고 std::cout객체에 의해 출력되는 것이다. std::endl은 새로운 줄을 시작하도록 지시하는 객체이며 std::cout과 마찬가지로 iostream에 정의되어있다. 정리하자면 "Hello World"문자열이 std::cout에 전달되어 출력되고 이어서 std::endl이 전달되어서 줄바꿈이 출력된다. 위의 코드를 다음과 같이 쓸 수도 있다.

Hello_World.cpp

#include <iostream>

int main()
{
    std::cout<<"Hello ";
    std::cout<<"World";
    std::cout<<std::endl;

    return 0;
}

 실행 결과는 전의 코드와 같다. "Hello "가 먼저 std::cout에 전달되어 출력되고 다음문장에서 이어서 "World"가 전달되어 출력되고 다음문장에서 마지막으로 std::endl이 전달되어서 줄바꿈이 일어난다. 줄의 가장 뒤에 있는 세미콜론(;)은 한 문장이 끝났음을 의미한다. 모든 문장은 세미콜론으로 끝내야하고 만약 세미콜론이 없다면 컴파일러는 아직 문장이 끝나지 않은것으로 간주한다. 

 그 다음 마지막으로 return 0;가 있다. 이 문장은 함수의 끝을 의미한다. 이 문장은 함수에게 0을 반환하도록 지시하는 문장이다. return 문장은 함수에따라 없어도 되고 다른 반환값을 써도 되지만 main함수의 경우에는 0을 반환값으로 하는것이 일반적이다. 이는 반환값이 0이면 성공적으로 프로그램이 종료했다고 판단하고 0이외의 다른값을 반환한다면 실패한 것으로 판단하는 근거가 된다. 

 

-std::cout은 문자열 뿐만 아니라 개별문자, 숫자 등 도 출력할 수 있다. 

double A=5.3;

std::cout<<30;         //숫자 30 출력
std::cout<<'A';        //문자 A출력
std::cout<<A           //변수 A에 저장된 값 5.3 출력

 이는 << 연산자의 오버로딩 덕분에 가능한것인데 오버로딩에 관해서는 나중에 포스팅할 예정이다. 

-using namespace std; 문장을 통해 cout, endl에 붙어있는 std::를 생략할 수 있다. 이럴 경우 코드는 다음과 같다.

Hello_World.cpp

#include <iostream>

int main()
{
    using namespace std;

    cout<<"Hello World"<<endl;

    return 0;
}

 하지만 using namespace를 사용하는 습관은 나중에 안좋게 작용할 수 있으므로 되도록이면 std::cout과 같이 확실하게 표현해주는것이 좋다. 이것은 namespace와 범위지정연산자 ::에 관한 것인데 이것도 나중에 포스팅할 예정이다.


'프로그래밍 > C++' 카테고리의 다른 글

조건식과 조건문  (0) 2019.01.23
연산자  (1) 2019.01.05
데이터와 변수  (0) 2018.12.29
이스케이프 시퀀스  (0) 2018.12.27
C++의 역사  (0) 2018.12.08