C++ 알아보기

[C++ 알아보기] 1. 출력

Vfly 2025. 1. 25. 00:32

1. C 와 C++ 출력의 차이

- c의 출력

printf("test");
printf("Hello , %s%d\n", "test", 123);

 

- c++의 출력

std::cout << "test" << std::endl;
std::cout << "Hello ," << "test" << 123 << std::endl;

 

위와 같이 서로 다른 형태를 가지고 있다.

c++ 코드에서 std :: 이 놈의 정체는 뭘까? 그리고 또  << 이 기호는 비트연산자 인데 출력에서는 왜 쓰이는 걸까? 한번 알아보도록 하자.

 

2. 네임스페이스 ( namespace )

  • Java의 패키지, C#의 네임스페이스와 비슷하다.
  • C++에서 변수, 함수, 클래스 등의 식별자(Identifier)가 서로 충돌하지 않도록 관리하기 위해 제공되는 선언적 영역.

[1] 네임스페이스의 특징

  1.  이름 충돌 방지 : 여러 개발자가 동일한 이름의 함수나 변수를 정의하더라도, 네임스페이스를 통해 각각 구분할 수 있다.
  2. 논리적 그룹화 : 관련된 함수와 변수를 하나의 네임스페이스로 묶어 코드 가독성, 관리성을 높일 수 있다.
  3. 중첩 가능 : 네임스페이스 안에 또 다른 네임스페이스 선언 가능.

[2] 사용법

namespace MyNamespace 
{
    int value = 10;
    void printValue() 
    {
        std::cout << "Value: " << value << std::endl;
    }
}

 

네임스페이스 내부의 요소에 접근하려면 범위 지정 연산자 " : : " 를 사용한다.

MyNamespace::printValue();

 

[3] 표준 네임스페이스 ( std )

  • C++ 표준 라이브러리의 모든 요소들은 " std " 라는 네임스페이스에 포함되어 있다.
  • 예를 들어, " std :: cout " 과 같은 방식으로 표준 출력 스트림을 사용할 수 있다.

[4] using 지시자와 선언

  • using 지시자 : 특정 네임스페이스의 모든 요소를 범위 지정 없이 사용할 수 있게 한다. ( 타이핑 횟수 감소 )
using namespace std;
cout << "Hello World!" << endl;
  • using 선언 : 특정 요소만 범위 지정 없이 사용하도록 허용할 수도 있다.
using std::cout;
cout << "Hello World!" << endl;

 

 

3 . << 연산자

  • " << " 는 비트연산자 이기도 하지만, 데이터를 출력 스트림에 삽입하는 연산자이기도 하다.
  • 예를들어, " std::cout << "Hello ,World!\n"; " 는 문자열 "Hello ,World!" 를 표준 출력(모니터,화면)에 출력한다.
  • 이 연산자는 왼쪽 피연산자( std :: cout ) 가 출력스트림 객체이고, 오른쪽 피연산자가 출력할 데이터이다.

 

4. 조정자 ( Manipulator )

  • C++에서 조정자(Manipulator)는 입출력 스트림 ( "std::cin , std::cout " ) 의 형식을 조정하거나 데이터를 특정한 방식으로 표시할 수 있도록 도와주는 도구다.
  • 조정자는 함수처럼 동작하며, 스트림과 함께 사용되어 출력 형식을 간단하고 직관적으로 변경할 수 있다.

 

[1] 조정자의 역할

  • 출력 형식 변경 : 숫자의 진법 변경, 소수점 자시수 지정 등등..
  • 텍스트 정렬 및 채우기 : 출력 내용을 왼쪽, 오른쪽, 가운데 정렬하거나 빈 공간을 특정 문자로 채움.
  • 특수한 데이터 표현 : 부호 표시, 진법 접두사 추가 등등 ..

[2] 예제

  • 줄바꿈 : " std :: endl
std::cout << "Hello" << std::endl; // "Hello" 출력 후 줄바꿈
  • 진법 변경 : " std : : dec " , " std : : oct " , " std : : hex "
int number = 123;
std::cout << std::dec << number << std::endl; // 123 (10진수)
std::cout << std::oct << number << std::endl; // 173 (8진수)
std::cout << std::hex << number << std::endl; // 7b (16진수)
  • 부호 표시 : " std :: showpow " , " std : : noshowpos "
std::cout << std::showpos << 123 << std::endl; // +123
std::cout << std::noshowpos << 123 << std::endl; // 123
  • 소수점 자리수 지정 : " std :: setprecision "
double pi = 3.14159265358979;
std::cout << std::setprecision(3) << pi << std::endl; // 3.14
  • 고정 소수점 표시 : " std : : fixed "
std::cout << std::fixed << std::setprecision(2) << pi << std::endl; // 3.14
  • 출력 폭 설정 : " std : : setw "
int num = 42;
std::cout << std::setw(5) << num << std::endl; // "   42" (오른쪽 정렬)
  • 정렬 방식 : " std : : left " , " std : : right " , " std :: internal "
std::cout << std::left << std::setw(5) << num;    // "42   "
std::cout << std::right << std::setw(5) << num;   // "   42"
std::cout << std::internal << std::setw(5) << -42; // "-  42"
  • 채우기 문자 설정 : " std : : setfill "
std::cout << std::setfill('*') << std::setw(5) << num; // "**42"
  • 진법 접두사 표시 : " std : : showbase " , " std : : noshowbase "
int num = 123;
std::cout << std::showbase << std::hex << num; // "0x7b"
  • 대소문자 설정 : " std : : uppercase " , " std : : nouppercase "
int num = 123;
std::cout << std::uppercase << std::hex << num; // "7B"

 

[3] 조정자의 특징

  • 조정자는 대부분 <iomainip> 헤더파일에 정의되어 있다.
  • 조정자의 설정은 지속되며, 다시 변경하거나 초기화하지 않는 한 계속 유지된다.
  • 함수처럼 호출되지만 실제로는 연산자 오버로딩과 결합되어 동작한다