C++/카루의 C++ 강좌

[카루의 C++ 강좌] 1-2. 문장과 주석, 중괄호와 블록

카루-R 2020. 3. 20. 17:24
반응형

오늘은 조금 난이도를 올려보겠습니다. 간단한 입력을 받고 그 결과를 가지고 출력해 보겠습니다.

// 1-2.cpp
#include <iostream>

int main()
{
    int age;                   // 나이를 저장하는 변수
    std::cout << "당신의 나이를 입력하세요: ";
    std::cin >> age;           // 입력을 받음

    std::cout << "당신의 나이는 " << age << "살 입니다." << std::endl;
    return 0;
}

자, 일단 출력을 해 보면

당신의 나이를 입력하세요: 

이렇게만 나오고 커서가 깜박거릴 겁니다. 이건 입력을 대기하는 상태입니다.

콘솔 창에 자신의 나이를 숫자로 입력하고 Enter 키를 누르면 입력이 됩니다.

당신의 나이를 입력하세요: 539 (엔터)
당신의 나이는 539살 입니다.

자신이 입력한 나이에 따라 출력값이 바뀝니다. 만약 출력 결과가 올바르지 않다면 오류가 생긴 것이니,

위의 소스코드와 자신이 입력한 코드를 잘 비교해서 확인하시길 바랍니다.

몇가지 주의사항을 말씀드리겠습니다.

  • - int main() 의 뒤부터 여는 중괄호 '{' 사이에 세미콜론을 입력하지 않습니다.
  • - "을 '으로 입력하지 않습니다.
  • - ;을 올바른 곳에 입력했는지 확인합니다.
  • - 대소문자를 잘 살펴봅니다.
  • - <<을 < <으로 쓰지는 않았는지 확인합니다.
  • - std::cout를 std:cout으로 쓰지는 않았는지 확인합니다.

처음 하신다면 쉬운 건 없을겁니다.

C계열 언어에 익숙하신 분들이라면 이 부분은 아마 쉽게 넘어가실 수 있으리라 생각합니다.

 

문장

int age; std::cout << "당신의 나이를 입력하세요: "; std::cin >> age; std::cout << "당신의 나이는 " << age << "살 입니다." << std::endl; return 0;

int age;
std::cout << "당신의 나이를 입력하세요: ";
std::cin >> age;

std::cout << "당신의 나이는 " << age << "살 입니다." << std::endl;
return 0;

여기 있는 모든 것들을 문장이라고 부릅니다. C++에서 문장은 반드시 세미콜론 ';' 으로 끝나야 합니다.

int age;

이 부분은 age라는 이름의 정수형 변수를 선언하는 문장입니다. C++에선 변수를 먼저 선언해야 사용할 수 있습니다. 변수 선언에 관해선 다음 포스팅에 더욱 자세히 설명하니 여기선 간단하게 설명만 하고 넘어가겠습니다.

std::cout << "당신의 나이를 입력하세요: ";

익숙한 문장이죠? 출력을 하는 문장입니다. 끝에 << std::endl 이 없으면 출력을 하고 다음줄로 넘어가지 않습니다.

std::cin >> age;

입력을 받는 문장입니다. 사용자가 나이를 입력하면 아까 선언한 age라는 변수에 저장합니다.

std::cout << "당신의 나이는 " << age << "살 입니다." << std::endl;

이 부분이 조금 의아하실 수 있는데, 풀어서 쓰면 다음과 같습니다.

std::cout << "당신의 나이는 ";
std::cout << age;
std::cout << "살 입니다." << std::endl;

즉, '당신의 나이는 '이란 문장을 출력하고 사용자가 입력한 나이를 출력합니다.

그리고 그 뒤에 '살 입니다'란 문장을 출력하고 줄을 바꿉니다.

출력할 것들이 여러 개 있으면 위처럼 << 를 통해 한 줄로 표현할 수 있는 겁니다.

체인 연결하는 것 처럼 계속해서 조립하듯 출력하는 것이라고 보시면 됩니다.

 소스 코드 내부에서 수식을 사용할 수 있습니다. 자세한 것은 '2-2. 연산자 I', '2-3. 연산자 II'에서 다루겠지만 우선 덧셈, 뺄셈, 곱셈, 나눗셈 등을 할 수 있다는 걸 확인하고 진행하겠습니다.

#include <iostream>

int main()
{
    int age;                   // 나이를 저장하는 변수
    std::cout << "당신의 나이를 입력하세요: ";
    std::cin >> age;           // 입력을 받음

    std::cout << "5년 후의 당신의 나이는 " << age + 5
        << "살 입니다." << std::endl;
    return 0;
}
std::cout << "5년 후의 당신의 나이는 " << age + 5
    << "살 입니다." << std::endl;

 위 문장은 가로의 길이가 너무 길어지면 보기가 불편해서 << 의 앞에서 줄을 바꾸어줬습니다.

이때, 윗줄 (age + 5로 끝나는 줄)에는 세미콜론을 붙이지 않습니다. 세미콜론을 붙이지 않으면 문장이 아랫줄까지 계속 이어진다는 의미입니다.

 저 문장은 age에 저장된 나이에 5를 더해서 출력합니다. 이때, age안에 있는 값은 바뀌지 않습니다.

age안에 있는 값에 5를 더해서 다시 저장하고 싶다면 아래와 같이 사용합니다.

age = age + 5

 등호가 있지만 등호라고 부르지 않고 대입 연산자라고 부릅니다. 오른쪽의 값을 왼쪽에 대입하는 연산자입니다. 예를 들어, age에 저장된 값을 10이라고 가정하겠습니다. 대입연산자의 오른쪽을 먼저 봐 주세요.

age = 10 + 5;

 age에 저장된 10이라는 값을 꺼내오면 위처럼 치환이 됩니다. 그리고 10+5를 연산합니다.

age = 15;

그리고 마지막에는 age 변수에 새롭게 15라는 값을 대입한다는 뜻이 됩니다. 즉, age는 이제 15라는 값을 가지게 되었습니다. 만약 여기서 5를 한 번더 더해서 20을 만들려면 어떻게 해야 할까요?

맞습니다. 한번 더 반복하면 됩니다.

덧셈 뿐만 아니라 뺄셈, 곱셈, 나눗셈도 가능합니다.

age = 35 - 16;
age = age * 3;
age = 300 / 5;

위 코드에서 age 변수는 각각 19, 57, 60의 값을 갖게 됩니다.

 

주석

주석은 딱히 어렵지 않습니다. 주석은 코드에 대해 설명하는 부분인데, 소스코드가 컴파일 될 때 주석은 모두 삭제되어 프로그램에 아무런 영향으 주지 않습니다. 하지만 나중에 자신이 이 코드를 왜 썼는지 등에 대해 설명할 수 있기 때문에 주석을 잘 쓰는 습관이 중요합니다.

주석은 /*과 */을 사용하여 표현할 수 있고, // 를 사용하여 한 줄만 주석으로 만들 수도 있습니다.

int age;                   // 나이를 저장하는 변수
std::cin >> age;           // 입력을 받음

위처럼 '//' 를 사용하면 //부터 그 문장 끝까지는 주석으로 처리됩니다.

int age;                
/* age는 나이를 저장하는 정수형 변수
아래 문장은 age에 값을 입력받는다 */   
std::cin >> age;

이렇게 '/*', '*/'를 사용하면 그 사이에 있는 내용은 모두 주석이 됩니다. 여러 줄에 걸쳐 사용해도 문제가 없습니다.

단, /* */ 주석 안에 또 /* */ 주석을 사용하면 문제가 발생합니다.

/* 주석 
/* 주석 안 주석
*/ 주석
*/

 색깔이 모두 회색이 아니라 아래 일부는 검은색이죠? 주석이 아니란 뜻입니다. 즉, 주석에서 제외된 부분이란 거죠. 왜냐하면 두번째 줄의 '/*' 가 첫째, 셋째 줄의 주석 안에 갇혀서 의미가 없어지고, 넷째 줄의 '*/' 만 따로 남게 되기 때문입니다. 주석 안에 주석을 사용하려면 '//' 더블 슬래시 주석을 사용해야 합니다.

// 주석을 여러 줄에 사용하려면 줄마다 //를 입력하면 됩니다.

// 주석
// 오늘은 추석
// 아 아니구나

 

중괄호와 블록

int main()
{

}

 main() 함수는 이제 익숙하시죠? 이때 main() 함수의 아래쪽에 중괄호 {, }는 각각 main() 함수의 시작과 끝을 의미합니다. 중괄호를 통해 블록, 즉 하나의 구역을 만드는 겁니다. 지금 보는 중괄호는 main() 함수와 붙어있기 때문에 main() 함수의 본체가 되는데,

int main();
{

}

 저렇게 main(); 하고 세미콜론을 붙여버리면 main()함수의 머리와 몸통이 떨어지게 됩니다. (세미콜론 부분에서 문장이 끝난 것으로 간주) 저런 상황에선 당연히 오류가 납니다.

int main() {

}

 세미콜론으로 분리된 게 아니라면, main함수와 중괄호 사이엔 공백이 아무리 있어도 상관이 없습니다. 위처럼 스페이스바 만큼만 띄워도 되고, 예제 코드처럼 한 줄 아래로 내려도 됩니다.

이 부분은 각자의 코딩 스타일에 따라 편한 방식을 사용하면 됩니다. 저는 주로 중괄호를 함수 머리에 붙여씁니다.

 반대로, 많은 입문자분들께선 중괄호를 한 줄 밑으로 내려씁니다. 보기 편하고 가독성이 좋기 때문입니다. 저도 처음에 C언어를 배울 땐 그런 방식을 사용했습니다.

#include <iostream>

int main()
{
    {
        int num = 30 * 27;
    }
    std::cout << num;
}

 중괄호를 쓸 때에는 안에 탭(Tab)키 한칸, 또는 스페이스 네 칸으로 들여쓰기를 해 줘야 합니다. 가독성이 좋아지기 때문인데요, 비주얼 스튜디오를 포함한 대부분의 IDE에서는 자동으로 들여쓰기를 해 줍니다.

위에 보시면 main() 함수 안에 또다른 중괄호 블록이 있습니다. 함수의 내부에는 마음대로 중괄호를 열고 닫을 수 있습니다. 저런 걸 내포 블록이라고 하는데, 함수 안에 영역을 따로 지정해주는 역할을 합니다.

 그런데 주의할 점이 있습니다. 저걸 사용하는 이유기도 한데, 변수의 특성상 자신이 속해있는 블록이 끝나면 소멸해버립니다.

{                         // 내포 블록 시작
    int num = 30 * 27;    // num 변수 선언
}                         // 내포 블록 종료. num 변수가 사라진다!
std::cout << num;         // 오류: num이라는 변수를 찾을 수 없음.

 아시겠나요? num은 내포 블록에서 만들어졌기 때문에 해당 블록이 끝나면 사라집니다. 내포 블록 밖에서는 해당 변수에 접근할 수 없습니다. 사실 내포 블록은 저렇게 쓰는 경우는 거의 없고, 나중에 배울 if~else나 for문등에서 사용합니다.

 

1-2. 도전과제

  1. sum이라는 정수형 변수를 선언해 보세요.
  2. 1부터 5를 곱한 값을 sum에 대입하고, 출력해 보세요.
  3. sum에 '5 팩토리얼'이라는 주석을 달아보세요.
  4. sum을 내포블록에 선언하고, 내포블록에서 출력해 보세요.

난이도가 소폭 상승했죠? 아직은 기본중의 기본이니 조금 더 힘을 내서 달려봅시다.

다음 강좌는 정말 머리가 터질수도 있으니 주의하세요.

다음 시간엔 '변수의 선언과 자료형'에 대한 주제로 찾아뵙겠습니다.

반응형