language/c++

[C++] 01_C++ 기초와 입출력

렁치 2026. 6. 29. 08:50

C++은 C언어 위에 객체 지향이라는 새로운 패러다임을 얹은 언어다. C로 짠 코드를 거의 그대로 쓸 수 있을 만큼 C와의 호환을 목표로 설계됐지만, 거기에 클래스와 객체 개념을 더해 더 큰 프로그램을 체계적으로 다룰 수 있게 했다.

이 글에서는 C++의 첫 프로그램과 입출력 방식(cin/cout)을 보며, C와 무엇이 같고 무엇이 달라졌는지를 짚는다.


1. C++ 개요와 첫 프로그램

#include <iostream>      // 입출력 헤더
using namespace std;     // std 네임스페이스 사용

int main() {
    cout << "Hello, C++!" << endl;
    return 0;
}

 

C의 #include <stdio.h>, printf 자리에 #include <iostream>, cout이 들어온 게 한눈에 보인다. main 함수 구조는 C와 같다.

 

네임스페이스(namespace)
이름 충돌을 막기 위해 식별자들을 담아두는 공간이다. C++ 표준 라이브러리는 모두 std라는 네임스페이스에 속해 있어, 원래는 std::cout처럼 써야 한다. using namespace std; 를 한 줄 적어두면 std::를 생략하고 cout, cin을 바로 쓸 수 있다.

C++은 객체 지향 언어지만, C와의 호환을 위해 클래스 밖의 전역 변수·함수도 허용한다. 그래서 위 예처럼 클래스 없이 C 스타일로도 작성할 수 있다(순수 객체 지향 언어와 다른 점이다).


2. 변수와 자료형

변수는 C와 마찬가지로 선언 후 사용한다(자료형 변수이름;). 자료형도 대부분 같지만, C++에서 새로 추가되거나 편해진 것들이 있다.

분류 자료형
정수 int, short, long
실수 float, double
문자 char
논리 bool (true / false)
문자열 string (<string> 헤더)

특히 눈여겨볼 것이 두 가지다.

  • bool: C에는 없던 논리형이 C++엔 정식으로 있어, 참/거짓을 true/false로 명확히 표현한다.
  • string: C에서 문자 배열과 strcpy로 고생하던 문자열을, C++은 string 타입으로 = 복사·+ 연결까지 자연스럽게 다룬다.

상수는 const로 선언하며, 한 번 정한 값을 바꿀 수 없다(const double PI = 3.14;).


3. 입출력: cin과 cout

C++의 입출력은 스트림(stream)이라는 개념 위에서 연산자로 이뤄진다.

출력은 <<, 입력은 >>

  • 출력: cout << 값; (삽입 연산자 <<)
  • 입력: cin >> 변수; (추출 연산자 >>)
  • endl 또는 '\n' 으로 줄바꿈
int iNo;
cout << "정수 입력 : ";
cin >> iNo;                        // 입력 (& 불필요!)
cout << "3을 더한 값 : " << iNo + 3 << endl;

C의 scanf와 비교하면 편리함이 분명하다. %d 같은 형식 지정자도, &도 필요 없다. cin >> iNo라고만 쓰면 컴파일러가 iNo의 타입(int)을 보고 알아서 정수로 읽어준다.

화살표 방향은 "데이터가 흘러가는 방향"으로 기억하면 헷갈리지 않는다. cin >> 변수는 입력에서 변수로, cout << 값은 값에서 출력으로 흐른다.


4. 수업 코드로 보는 초 변환 입출력

cin, cout, 정수 나눗셈, 나머지 연산을 함께 쓰는 초반 실습이었다.

#include <iostream>
using namespace std;

int main()
{
    int iTotalSeconds;
    int iHour;
    int iMinute;
    int iSecond;

    cout << "초를 입력하세요: ";
    cin >> iTotalSeconds;

    iHour = iTotalSeconds / 3600;
    iMinute = (iTotalSeconds % 3600) / 60;
    iSecond = iTotalSeconds % 60;

    cout << iHour << "시간 "
         << iMinute << "분 "
         << iSecond << "초" << endl;

    return 0;
}
입력 초 iHour iMinute iSecond
3661 1 1 1
85490 23 44 50

 

이 예제는 C의 scanf/printf와 같은 문제를 C++의 cin/cout으로 푼 것이다. & 없이 입력하고, 여러 값을 <<로 이어 붙여 출력한다는 차이가 핵심이다.


한 걸음 더

  • cin >> iNo&가 필요 없는 이유는, C++의 참조(reference) 덕분이다. >> 연산자가 내부적으로 변수를 참조로 받아 직접 값을 채우도록 만들어져 있다. C에서 포인터(&)로 명시적으로 하던 일을, C++은 참조로 가려준 셈이다. 참조는 이후 함수 인자 전달에서 본격적으로 다룬다.
  • using namespace std;는 입문 단계에선 편하지만, 큰 프로젝트에선 권장되지 않는다. std의 모든 이름을 끌어와 다른 라이브러리와 충돌할 수 있기 때문이다. 실무에서는 std::cout처럼 명시하거나 필요한 것만(using std::cout;) 가져오는 방식을 선호한다.
  • C++의 coutprintf보다 타입 안전하다. printf("%d", 3.14)처럼 형식과 값이 안 맞아도 C는 그냥 실행해 엉뚱한 값을 내지만, cout << 3.14는 컴파일러가 타입을 보고 알맞게 출력한다. 대신 출력 서식(자릿수 맞춤 등)을 세밀히 제어하기엔 printf가 더 간결한 면도 있어, 둘은 장단이 갈린다.