C++2011.05.15 11:44


이번 강좌에서는
  • C++ 과 C 언어와의 동일한 문법 구조들에 대해 살펴본다.
  • 예를 들어 if - else, while, for, switch 문 등이다.
  • 변수 정의에 대해 알아본다.

  안녕하세요 여러분~ Psi 입니다. 저의 C++ 세번째 강좌 이네요. 이번 강좌에는 여러분과 많이 친숙할 듯 한데요, 왜냐하면 C++ 이 C 언어의 여러가지 문법들을 어떻게 사용하는지 살펴볼 것입니다. 사실 C 언어에서 작성된 코드를 그대로 C++ 에 붙여 넣기 해도 큰 문제가 없다고 말해도 과언이 아닌 만큼 C++ 은 C 언어의 문법을 거의 완전하게 포함하고 있습니다.

// 변수의 정의
#include <iostream>
using namespace std;

int main()
{
    int i;
    char c;
    double d;
    float f;

    return 0;
}

  일단 가장 기초적인 부분으로 변수를 정의하는 것 부터 봅시다. 사실 위 코드를 볼 때 의위 #include  와 using ... 만 빼면은 C 언어에서 작성한 코드라고 말해도 똑같이 생각할 것입니다. 변수를 정의하는 부분에서 만큼은 C 언어때와 달라진 것이 없습니다. 물론 변수 명 이름 작성 규칙도 바뀐 것이 없지요. 변수명도 C 언어 때와 마찬가지로 알파벳과 _ 기호, 숫자들를 사용할 수 있고 그 외의 것들은 사용할 수 없습니다. (Visual C++ 2010 에서는 한글 변수명도 사용 가능하지만 바람직한 일이 절대로 아닙니다) 또한 변수 이름의 맨 앞부분에는 숫자가 오면 안되지요.

  Google 의 C++ 변수 이름 짓기 가이드에 따르면 (http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#General_Naming_Rules) 에서 보실 수 있습니다. 다음과 같이 하기를 권장합니다.

  먼저 변수의 이름은 변수의 이름만을 딱 보았을 때 무엇을 하는지 확실히 알 수 있어야 합니다.

    int number_of_people; // OK
    double interest_rate; // OK

    int num_of_ppl; // BAD
    double intrst_rt; // BAD


  맨 위의 두 변수 이름들은 딱 보았을 때 '아, 사람의 인원수이고 아래는 이자율 이구나' 라는 느낌이 확 들지만 아래의 두 변수 이름을 보았을 때에는 그러한 느낌을 받기 힘듭니다. 따라서 변수 이름이 조금 길더라도 확실히 이해할 수 있는 변수 이름을 짓는 것이 매우 중요합니다.

  둘째로 변수 이름의 띄어쓰기에 관한 규칙인데, 보통 변수 이름을 지을 때

    int number_of_people; // OK
    int NumberOfPeople; // Ok


  위 처럼 두 가지 방법을 사용하는데 하나는 이름의 띄어쓰기 부분에 _ 를 넣는 것이고 다른 하나는 띄어쓰기 부분에 대문자로 구분하는 것인데, 저의 경우 전자의 방법을 선호합니다. 물론 이는 사람 마다 개인차가 있겠지만, 가장 중요한 것은 소스 상에서 위 둘을 같이 사용하는 것을 막는 것인데, 예를 들어서

    int NumberOf_People; // BAD


  는 전혀 권장할 것이 못됩니다. 저는 앞으로 제 소스에서 전자의 방법을 취할 것입니다 :)

아무튼 제 C++ 강좌를 보고 계실 여러분들의 실력은 이미 상당한 수준(아마도 C 언어 정도는 다룰 줄 아실 분들) 이실 테니 이러한 내용들도 중간에 짬짬히 이야기 하고 지나갈 것입니다 ㅎㅎ

이렇게 해서 변수의 정의는 C 나 C++ 이 차이가 없다는 것을 보실 수 있으셨을 것입니다. 마찬가지로 배열이나 포인터를 정의하는 방법도 C 나 C++ 이 동일합니다. 물론 포인터의 경우 C 에서 * 와 & 가 하였던 역할을 C++ 에서도 그대로 물려 받았습니다.
  예를 들어 C 에서

    int arr[10];
    int *parr = arr;

    int i;
    int *pi = &i;


  게 했던 것들을 C++ 에서는 어떻게 할까요? 답은 간단합니다. 똑같이

    int arr[10];
    int *parr = arr;

    int i;
    int *pi = &i;


 로 쓰면 됩니다. 쉽지요? 어떠한 것들을 선언하는 방법은 정말로 C++ 이나 C 가 차이가 하나도 없음을 알 수 있습니다.

그렇다면 다른 문법 구조들은 어떻까요. 반복문(for, while)이라던지 조건문(if, else, switch) 이라던지.. 일단 for 부터 살펴보도록 합시다.

// C++ 의 for 문
#include <iostream>
using namespace std;

int main()
{
    int i;

    for(i=0;i<10;i++)
    {
        cout << i << endl;
    }
    return 0;
}


  성공적으로 컴파일 하였다면


와우! 정말로 똑같습니다. C 언어 때와 for 문은 달라진 것이 없군요. 그렇다면 C++ 에서 for 문을 이용해 1 부터 10 까지 더하는 문장은 어떻게 만들까요.

/* 1 부터 10 까지 합*/
#include <iostream>
using namespace std;

int main()
{
    int i, sum = 0;

    for(i=1;i<=10;i++)
    {
        sum += i;
    }

    cout << "합은 : " << sum << endl;
    return 0;
}


  성공적으로 컴파일 하였다면


  역시 기존의 C 언어 때와 동일합니다.

  사실 for 문은 C++ 에서도 그 문법이 바뀌지 않았습니다. 그냥 여러분이 기억하시는대로 사용하시면 됩니다. 한 가지 달라진 점이 있다면 변수의 선언이 반드시 최상단에 있어야 되는 것은 아닙니다. 기존의 C 에서는 변수를 정의할 때 언제나 소스 맨 위부분에 선언을 하였습니다. 예를 들어

    int i, sum = 0;

    for(i=1;i<=10;i++)
    {
        sum += i;
    }

와 같이 말이지요. 하지만 C++ 에서는 변수를 사용하기 직전 어느 위치에서 든지 변수를 선언할 수 있게 됩니다. 예를 들어서 다음과 같이 해도 상관이 없습니다.

/* 변수는 변수 사용 직전에 선언해도 된다.*/
#include <iostream>
using namespace std;

int main()
{
    int sum = 0;

    for(int i=1;i<=10;i++)
    {
        sum += i;
    }

    cout << "합은 : " << sum << endl;
    return 0;
}


성공적으로 컴파일 하였다면


로 동일한 결과를 보입니다.
그렇다면 while 문은 어떨까요. 역시 동일합니다

/* while 문 이용하기 */
#include <iostream>
using namespace std;

int main()
{
    int i = 1, sum = 0;

    while (i <= 10)
    {
        sum +=i;
        i++;
    }

    cout << "합은 : " << sum << endl;
    return 0;
}


성공적으로 컴파일 하였다면


와 같이 우리가 기존에 알고 있었던 while 문과 동일한 결과를 나타냅니다.

C++ 에서 if - else 문 역시 C 와 동일한 문법 구조로 되어 있습니다. 아래의 예제를 볼까요.

/* 행운의 숫자 맞추기*/
#include <iostream>
using namespace std;

int main()
{
    int lucky_number = 3;
    cout << "내 비밀 수를 맞추어 보세요~" << endl;

    int user_input; // 사용자 입력
   
    while (1)
    {
        cout << "입력 : ";
        cin >> user_input;
        if(lucky_number == user_input)
        {
            cout << "맞추셨습니다~~" << endl;
            break;
        }
        else
        {
            cout << "다시 생각해보세요~" << endl;
        }
    }
    return 0;
}

  성공적으로 컴파일 했다면


와 같이 역시 우리가 C 에서 생각했던 대로 동일하게 나옵니다. 위 코드에서 살펴볼 부분은 바로

        cout << "입력 : ";
        cin >> user_input;

입니다. 일단 cout 은 앞에서 배웠지만 << 를 이용하여 출력을 시키지요.  그리고, 이미 예상했다 싶이 cin 은 사용자로 부터 입력을 받아서 >> 를 통해 user_input 에 넣습니다. scanf 에서는 & 를 붙였는데 C++ 에서는 편리하게도 앞에 & 연산자를 붙일 필요가 없네요. 심지어, scanf 에서는 int 형태로 입력받을 지 아니면 char 인지에 따라서 %d 냐 %c 냐로 구분하였는데 여기서는 그냥 변수를 보고 cin 이 알아서 처리해 줍니다. 매우 편리하지요

  아직까지 여러분은 cin 이 뭔지, cout 이 뭔지 이게 도대체 함수인건지 변수인건지 구조체 인건지, 기본의 쉬프트 연산자로 사용되었던 << 나 >> 는 뭔지 도저히 감이 잡히지 않을 것입니다. 그래도 상관은 없습니다. 일단 사용하세요! 사용하시고 편리하게 될 쯤에는 제 강좌에서 뭔지 배우실 것입니다.


        if(lucky_number == user_input)
        {
            cout << "맞추셨습니다~~" << endl;
            break;
        }
        else
        {
            cout << "다시 생각해보세요~" << endl;
        }


   C 에서와 마찬가지로 C++ 에서도 if 문은 동일하게 사용함을 알 수 있습니다. 그렇다면 switch 문은 어떨까요?

// switch 문 이용하기
#include <iostream>

using namespace std;
int main()
{
    int user_input;
    cout << "저의 정보를 표시해줍니다" << endl;
    cout << "1. 이름 " << endl;
    cout << "2. 나이 " << endl;
    cout << "3. 성별 " << endl;
    cin >> user_input;

    switch(user_input)
    {
    case 1:
        cout << "Psi ! " << endl;
        break;

    case 2:
        cout << "99 살" << endl;
        break;

    case 3:
        cout << "남자" << endl;
        break;

    default:
        cout << "궁금한게 없군요~" << endl;
        break;
    }
    return 0;
}


  성공적으로 컴파일 하였다면


 으로 switch 문이 잘 작동하는 것을 보실 수 있습니다.


switch(user_input)
    {
    case 1:
        cout << "Psi ! " << endl;
        break;

    case 2:
        cout << "99 살" << endl;
        break;

    case 3:
        cout << "남자" << endl;
        break;

    default:
        cout << "궁금한게 없군요~" << endl;
        break;
    }


위를 보면 기존의 C 에서 사용하였던 switch 문과 다를 바 없다는 것을 아실 수 있습니다.
그렇습니다. 늘 말해왔듯이 C와 C++ 은 기본적인 문법 구조(조건문 - if, else, switch ,  제어문 - for, whlie, break, continue ...)는 똑같습니다.

자 그럼 이번 강좌에서는 이것으로 마치도록 하겠습니다:) C 에서 기본적으로 다뤘던 예제들을 C++ 로 바꿔 보는 것도 재밌는 작업 일 것 같습니다.



강좌를 보다가 조금이라도 궁금한 것이나 이상한 점이 있다면 꼭 댓글을 남겨주시기 바랍니다. 그 외에도 강좌에 관련된 것이라면 어떠한 것도 질문해 주셔도 상관 없습니다. 생각해 볼 문제도 정 모르겠다면 댓글을 달아주세요.

현재 여러분이 보신 강좌는<<씹어먹는 C++ - <2 - 1. C++ 은 C 친구 - C 와 공통점>>> 입니다. 이번 강좌의 모든 예제들의 코드를 보지 않고 짤 수준까지 강좌를 읽어 보시기 전까지 다음 강좌로 넘어가지 말아주세요




Posted by Psi

댓글을 달아 주세요

  1. 스프

    오랜만에 올라온 c++강좌네요~~
    역시 잘 보고 갑니다 ^^
    강좌가 천천히 올라와서 아쉽지만... ㅋ 여전히 감사하게 생각하고있습니다 ^.^;;
    지금 저는 학교에서 자바를 배우고있는데, 일단 한번 c언어를 통해서 개념을 잘 다져놓으니
    다른 언어를 하더라도 그냥 그 언어의 암기해야할 '무엇'만 잘 알아두면 되더라구요~!!
    언제나 제게 psi님은 잊을 수 없는 선생님이에요 ㅋㅋㅋㅋㅋㅋㅋ 오글거리지만 진짜 부인 할 수가없네요..
    제 c언어 기본의 80% 는 여기서 배운 것이라서요 : )
    올 한해 좋은 강좌 부탁드리고, 좋은 날만 있으시길 바라겠습니다 ^^

    2011.05.15 18:42 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. 오랜만의 강좌군요!
    요즘 딜레마(???)라 VS는 전혀 키지도 못 하고 있네요 ㅠ

    수고하셨습니다~
    잘 보고 갑니다~

    2011.05.16 07:50 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. 호일

    C++ 강좌 잘보고 있습니다. 댓글 다신 분들의 평이 장난이 아니네요(극찬을 아끼지 않는). 아직 C강좌를 보지 않고 C++ 검색어로 바로 들어와 보고 있습니다. 앞으로 좋은 강좌 잘 부탁드립니다.

    2011.05.16 22:55 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 넵 :) 감사합니다. C 언어 강좌도 봐보시기 바랍니다

      2011.05.23 00:13 신고 [ ADDR : EDIT/ DEL ]
  4. ㅎㅎ

    잘 봤습니다ㅎ 오래만에 나왔네요 기달리고 있었는데
    글고보니 프로그램을 전혀 안만들고 있었는데
    만들라고 보니 기억도잘안나고,,,ㅎㅎ

    강의 올려주셔서 감사합니다ㅎㅎ

    2011.05.17 21:26 신고 [ ADDR : EDIT/ DEL : REPLY ]
  5. 김태연

    대학교 1학기가 끝나고 C언어를 마쳤습니다
    이제 C++ 예습하고 있는데 C언어를 미리 다 해놓으니 정말 수월하네요 ㅎㅎ
    전부 psi님 덕분입니다! 감사합니다

    그리고 강의 보다가 의문이 든게 있었는데

    int arr[10];
    int *parr = arr;

    int i;
    int *pi = &pi;

    이부분에서 혹시 int *pi = &i; 가 아닌가요..?;

    2011.06.30 00:47 신고 [ ADDR : EDIT/ DEL : REPLY ]
  6. 건우다...

    C++강좌도 올리시네요 ㅋㅋ 이 강좌들은 재범이 니가 직접 외국 사이트 같은데서 찾아서 올리시나요??

    2011.07.06 12:41 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 내가 만든거고 오른쪽의 Reference 는 www.cplusplus.com/reference/ 과 msdn 참조한것 ㅋㅋ

      2011.07.15 13:10 신고 [ ADDR : EDIT/ DEL ]
  7. 이제 연재 안하십니까

    2011.08.30 07:59 신고 [ ADDR : EDIT/ DEL : REPLY ]
  8. ㅠㅠ

    이제 연재안하시나요? 이해 잘됐었는데.. 아쉽

    2011.10.03 10:07 신고 [ ADDR : EDIT/ DEL : REPLY ]
  9. skj5183

    다음강좌가 너무나 궁금하고
    듣고 싶습니다^^
    Psi님의 강좌를 기다리는 사람이 너무나도 많다는걸 기억해주세요 ㅎㅎ

    2011.10.28 13:15 신고 [ ADDR : EDIT/ DEL : REPLY ]
  10. c++ 도전자

    안녕하세요 ㅎㅎ 궁금해서 질문드립니다.
    #include <iostream>
    using namespace std;
    int main()
    {
    int sum=0;
    while(int m < 11)
    {
    m = 1;
    sum += m;
    m++;

    }
    cout << sum << endl;
    return 0;
    }
    이렇게 하면 오류뜨는데, while문에서는 변수선언을 바로 안에서 int m 이렇게 하면 왜 안되나요?

    2013.08.10 13:10 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • for 문에서는 가능했던 이유가, for 문의 구조 상
      for(초기식;조건식;증감식) 이렇게 되어 있는데, 초기식은 딱 한번씩만 수행되는 부분입니다. 따라서, 초기식 부분에는 int i 처럼 변수의 정의를 쓸 수 있었습니다. 하지만

      while 문의 경우 구조가 while (조건식) 인데, 조건식에는 변수의 정의를 쓸 수 없습니다. (매번 실행되는 것이니까요)

      2013.08.15 13:01 신고 [ ADDR : EDIT/ DEL ]
  11. 물아메리카노

    강의 잘보았습니다! 질문이 있는데요,맨 처음에 int sum;처럼 선언만 하고 초기화를 안하고, 바로 sum+=i;로 정의하면 오류가 나는데 왜그런걸까요?

    2014.08.16 20:02 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 당연히 sum 에는 쓰레기 값이 들어 있기 때문에 sum 을 어떤 값으로 초기화 하지도 않은 채 i 를 더하면 문제가 생기게 됩니다.

      2014.11.23 10:56 신고 [ ADDR : EDIT/ DEL ]
  12. if문에서도 break를 써야 하나요?

    2016.05.02 22:23 신고 [ ADDR : EDIT/ DEL : REPLY ]
  13. if문에서도 break를 써야 하나요?

    2016.05.02 22:23 신고 [ ADDR : EDIT/ DEL : REPLY ]
  14. if문에서도 break를 써야 하나요?

    2016.05.02 22:23 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • break 는 for 나 while, switch 문에서만 사용 가능합니다.

      2016.07.18 21:20 신고 [ ADDR : EDIT/ DEL ]
  15. C++

    오래된 강좌지만 혹시나 싶어서 질문드려봅니다!

    /* 변수는 변수 사용 직전에 선언해도 된다.*/
    #include <iostream>
    using namespace std;

    int main()
    {
    int sum = 0;

    for(int i=1;i<=10;i++)
    {
    sum += i;
    }

    cout << "합은 : " << sum << endl;
    return 0;
    }

    요기서 sum 자리에 i를 넣어서 출력을 하려하니까 i가 정의가 돼있지 않다면서 실행이 안되는데요
    for문을 빠져나오면 i가 11이 되는데 왜 정의가 안돼있다고 하는지 모르겠네여 ㅜ

    2016.11.14 19:03 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 멸천대성

      for문 안에서 변수를 선언 시,
      for문이 종료되면 그 변수는 사라집니다.

      int i를 먼저 위에 선언해주고
      for(i=1;i<=10;i++) 로 for문을 바꿔주면
      해결 될거에요.

      2016.11.21 22:29 신고 [ ADDR : EDIT/ DEL ]
  16. Cmongky

    비밀수를 맞춰라에 if문 쓰실 때 정답일 시 출력문 아래 break를 쓰셨는데 어떤의도인가요
    작동상 문제는 없겠지만 쓸 이유도 없는 것 같아서요. 밑에 case문을 쓰려다 보니 생긴 오타같은데 맞나요?
    다른 이유가 있으셨다면 답변부탁드립니다.

    2018.01.16 19:19 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • ㄹㄱ

      지금쯤 아시고 계시겠지만 break붙이는 이유는 반복문 탈출 때문입니다. 안쓰면 맞췄는데도 계속 입력을 받겠죠.

      2018.03.31 18:51 신고 [ ADDR : EDIT/ DEL ]