출력(Output)
Last updated
Last updated
c++ 프로그램은 파일이나, 콘솔에서 직접 입출력을 다루지 않고, 스트림(stream) 이라는 흐름을 통해서 다루게 된다.
스트림은 실제 입력이나 출력이 표현된 추상화 된 흐름을 의미한다.
즉 스트림은 운영체제에 의해 생성되는 가상의 연결 고리를 의미하고, 중간 매개자 역할을 한다.
스트림은 내부에 버퍼(buffer) 라는 임시 메모리 공간을 가지고 있다.
버퍼를 사용하면 다음과 같은 장점이 있다.
문자를 하나 씩 전달하는 것이 아닌, 묶어서 한번에 전달하기에, 전송 시간이 적게 걸린다는 장점이 있다. (전달에는 자원이 소모된다는 것을 잊지 말자)
사용자가 문자를 잘못 입력했을 경우 수정할 수 있다.
하지만 즉각적인 반응이 요구되는 시스템에서 버퍼를 사용하는 것은 좋지 않을 수 있다. (상황에 맞게 버퍼 사용 여부를 판단해야 한다)
다음과 같은 형식으로 출력하는 것을 볼 수 있다.
cout 은 출력하는 것 같고, endl 은 한 줄을 마무리할 때 \n 의 의미를 지니는 것 같다.
endl 은 flush 를 하고, \n 은 flush 를 하지 않는다. (flush : 버퍼에 남아있는 데이터를 다 내보낸다)
기본적으로 stream 은 입력을 받은 것을 바로 출력하는 것이 아니라, buffer 에 담아둔다.
flush 를 하지 않을 시 개발자가 의도하지 않은 대로 출력 될 수 있다.
std:: 는 c++ 에서는 namespace 라고 부르며 java 에서 package 와 같다. -> 클래스명, 메서드명, 변수명 등 겹치는 것을 방지해준다.
다음 예를 살펴보자 -> 같은 메서드명을 사용하더라도 컴파일 에러가 발생하지 않는다.
실제 코드 작성 시 namespace:: 를 사용하지 않도록 하는 방법으로 반복되는 코드 사용을 줄여준다.
해당 파일을 중복되지 않고 한번만 사용되도록 하는 문법으로 c++ 에서는 주로 헤더파일에서 사용한다.
다음 예제를 통해 조정자를 살펴보자