Skip to content

2주차 · 자료형과 선행처리기 ​

지난 시간에는 C 프로그램의 전체 모양을 살펴봤습니다.

이번 시간부터는 프로그램 안에 값을 저장하는 방법을 배웁니다.

처음에는 int, double, char 같은 영어 단어가 낯설 수 있습니다. 하지만 오늘은 이 단어들을 외우는 것보다 **"어떤 값을 담기 위한 상자인가?"**라는 느낌을 잡는 것이 더 중요합니다.

오늘의 목표

오늘 수업이 끝났을 때 아래 다섯 가지를 설명할 수 있으면 충분합니다.

  1. 상수는 값이 그대로인 것, 변수는 값을 저장해 두는 이름 있는 공간이라는 것
  2. int는 정수, double은 실수, char는 문자 한 글자를 저장할 때 주로 사용한다는 것
  3. 변수를 사용하기 전에 선언해야 한다는 것
  4. =는 수학의 "같다"가 아니라 오른쪽 값을 왼쪽에 넣는다는 뜻으로 쓰인다는 것
  5. #include, #define 같은 문장은 프로그램 실행 전에 먼저 처리된다는 것

1. 값은 어디에 보관할까요? ​

프로그램은 계산만 하는 것이 아니라 값을 잠시 기억해 두었다가 다시 사용하는 일이 아주 많습니다.

예를 들어 이런 일을 하고 싶다고 생각해 봅시다.

text
나이를 기억한다.
점수를 기억한다.
가격을 기억한다.
이름의 첫 글자를 기억한다.

사람은 종이에 이렇게 적어 둘 수 있습니다.

text
나이: 25
점수: 90
가격: 1500

컴퓨터 프로그램도 비슷합니다.

값을 저장할 공간을 하나 마련하고, 그 공간에 이름을 붙여서 사용합니다.

이런 공간을 **변수(variable)**라고 합니다.

age
25
score
90
price
1500

위 그림에서 age, score, price는 상자의 이름이고, 안에 들어 있는 숫자는 값이라고 생각하면 됩니다.

변수 = 값을 담아 두는 이름 있는 상자

2. 상수와 변수 ​

상수란 무엇인가요? ​

**상수(constant)**는 쉽게 말해 값 자체입니다.

다음 코드에서 10, 20, 3.14는 직접 적어 놓은 값입니다.

c
10
20
3.14

문자나 문자열도 값이 될 수 있습니다.

c
'A'
"안녕하세요"

지금은 이렇게 구분하면 충분합니다.

  • 10 → 정수 값
  • 3.14 → 실수 값
  • 'A' → 문자 한 글자
  • "안녕하세요" → 여러 글자로 된 문자열

변수란 무엇인가요? ​

변수는 그 값을 저장해 두고 이름으로 다시 꺼내 쓰기 위한 공간입니다.

예를 들어 다음 코드를 봅시다.

c
int age = 25;

이 문장은 이렇게 읽으면 됩니다.

"정수를 저장할 age라는 상자를 만들고, 그 안에 25를 넣어 주세요."

그림으로 보면 다음과 같습니다.

int
age
25

여기서 중요한 것은 age라는 이름으로 25라는 값을 기억해 둔다는 점입니다.


3. 변수의 값은 바꿀 수 있습니다 ​

변수(variable)라는 이름에는 변할 수 있다는 뜻이 들어 있습니다.

c
int age = 25;

처음에는 age에 25가 들어 있습니다.

그 뒤에 다음 문장을 실행하면

c
age = 26;

이제 age 안의 값은 26으로 바뀝니다.

text
처음: age → 25
변경: age → 26

=는 "같다"가 아닙니다 ​

학교 수학에서는 다음 식을 이렇게 읽습니다.

text
1 + 1 = 2

여기서 =는 "같다"라는 뜻입니다.

하지만 C언어에서 다음 문장은 조금 다르게 읽어야 합니다.

c
age = 26;

C언어의 대입문에서 =는 오른쪽 값을 왼쪽 변수에 넣는다는 뜻입니다.

age←26

따라서 머릿속에서는 다음처럼 읽으면 훨씬 쉽습니다.

age = 26; → "26을 age에 넣는다."

초보자가 가장 많이 헷갈리는 부분

C언어에서 =는 보통 대입 연산자라고 부릅니다.

수학의 "왼쪽과 오른쪽이 같다"라는 뜻으로 생각하지 말고, 오른쪽 값을 왼쪽 상자에 넣는다고 생각하세요.


4. 직접 실행해 봅시다 ​

아래 코드를 복사해서 실행해 봅니다.

c
#include <stdio.h>

int main(void)
{
    int age = 25;

    printf("나이는 %d살입니다.\n", age);

    return 0;
}

실행 결과:

text
나이는 25살입니다.

여기에서 처음 보는 %d가 있습니다.

c
printf("나이는 %d살입니다.\n", age);

지금은 %d를 정수 값이 들어갈 자리라고 생각하면 됩니다.

즉,

text
나이는 [여기에 age 값]살입니다.

처럼 동작합니다.

숫자 하나만 바꿔 봅시다 ​

c
int age = 80;

으로 바꾼 뒤 다시 실행해 봅니다.

실행 결과:

text
나이는 80살입니다.

오늘도 같은 방법입니다

복사 → 실행 → 한 곳만 수정 → 다시 실행

이 과정을 반복하면 문법을 억지로 외우지 않아도 코드의 의미가 조금씩 보이기 시작합니다.


5. 자료형이란 무엇인가요? ​

변수라는 상자를 만들 때는 어떤 종류의 값을 넣을 상자인지 컴퓨터에게 알려 줍니다.

예를 들어 집에서도 물건마다 보관 장소가 다릅니다.

text
쌀 → 쌀통
물 → 물병
옷 → 옷장

컴퓨터도 비슷합니다.

text
정수 → int
실수 → double
문자 한 글자 → char

이렇게 어떤 종류의 값을 저장할 것인지 나타내는 것을 **자료형(data type)**이라고 합니다.

자료형 = 이 변수에 어떤 종류의 값을 넣을 것인지 알려 주는 표시

6. 가장 먼저 만날 세 가지 자료형 ​

처음에는 아래 세 가지부터 익숙해지면 됩니다.

자료형주로 저장하는 값예
int정수10, -3, 1000
double소수점이 있는 실수3.14, 72.5
char문자 한 글자'A', 'B'

int · 정수 ​

정수는 소수점이 없는 숫자입니다.

c
int age = 25;
int score = 100;
int temperature = -5;

int는 영어 **integer(정수)**에서 온 이름입니다.

처음에는 그냥

int = 정수를 넣는 상자

라고 기억하면 됩니다.

double · 실수 ​

소수점이 있는 값을 저장할 때 많이 사용합니다.

c
#include <stdio.h>

int main(void)
{
    double height = 172.5;

    printf("키는 %.1fcm입니다.\n", height);

    return 0;
}

실행 결과:

text
키는 172.5cm입니다.

%.1f는 지금 단계에서는 소수점 아래 한 자리까지 실수를 보여 주는 자리라고 이해하면 됩니다.

char · 문자 한 글자 ​

문자 한 글자를 저장할 때는 char를 사용할 수 있습니다.

c
#include <stdio.h>

int main(void)
{
    char grade = 'A';

    printf("학점은 %c입니다.\n", grade);

    return 0;
}

실행 결과:

text
학점은 A입니다.

여기서 중요한 점이 하나 있습니다.

문자 한 글자는 **작은따옴표 ' '**로 감쌉니다.

c
'A'

문자열은 **큰따옴표 " "**를 사용합니다.

c
"ABC"
한 글자: 'A' → 작은따옴표

여러 글자: "ABC" → 큰따옴표

지금은 한글 한 글자를 char에 넣지 않습니다

char는 처음 배울 때 영문자 한 글자처럼 단순한 예제로 연습하는 것이 좋습니다.

한글처럼 여러 바이트가 필요한 문자는 뒤에서 문자열과 문자 인코딩을 다룰 때 더 정확히 이해할 수 있습니다.


7. 교재에서 만나게 될 다른 자료형 ​

int, double, char만으로도 오늘의 기본 실습은 충분히 할 수 있습니다.

하지만 교재나 시험 문제에서는 아래와 같은 이름도 만나게 됩니다.

이름아주 쉬운 뜻예
short비교적 작은 범위의 정수short count = 10;
int가장 기본적으로 많이 쓰는 정수int age = 30;
long정수형의 한 종류long distance = 100000L;
long long더 큰 정수를 다룰 때 쓰는 정수형long long population = 5000000000LL;
float실수형float temperature = 23.5f;
doublefloat보다 더 높은 정밀도로 실수를 다룰 때 많이 사용double pi = 3.141592;
char문자 한 글자 또는 작은 정수 값을 저장하는 기본 문자형char grade = 'A';
void"값이 없음"을 나타낼 때 사용하는 특별한 자료형main(void)의 void

void는 무엇인가요? ​

지난 시간부터 계속 보던 코드에 void가 있었습니다.

c
int main(void)

여기서 void는 **"전달받는 값이 없다"**는 뜻으로 사용됩니다.

void는 int처럼 숫자를 저장하는 상자라기보다, 값이 없음을 나타내는 특별한 자료형이라고 생각하면 됩니다.

함수를 배울 때 다시 자세히 다룹니다.

처음부터 전부 외우지 마세요

이번 주 실습에서는 우선 int, double, char 세 가지에 익숙해지는 것이 먼저입니다.

short, long, float 같은 이름은 "자료형에도 여러 종류가 있구나" 정도로 먼저 눈에 익혀 두면 됩니다.

signed와 unsigned ​

정수 자료형 앞에는 signed 또는 unsigned가 붙을 수 있습니다.

말이 어려워 보이지만 핵심은 음수를 사용할 것인가입니다.

c
signed int number = -10;
unsigned int count = 10;
  • signed : 음수와 양수를 표현할 수 있습니다.
  • unsigned : 음수를 사용하지 않고 0과 양수 범위를 사용합니다.

예를 들어 사람 수처럼 음수가 될 일이 없는 값에는 unsigned라는 개념을 생각할 수 있습니다.

하지만 초보 실습에서는 특별한 이유가 없다면 우선 int를 사용하는 편이 단순합니다.

int는 보통 signed int처럼 동작합니다

일반적으로 다음 두 선언은 같은 종류의 정수형으로 이해할 수 있습니다.

c
int number = -10;
signed int number2 = -10;

자료형의 정확한 범위는 환경에 따라 확인합니다 ​

short, int, long이라는 이름만 보고 무조건 몇 바이트라고 단정해서 외우는 것은 좋지 않습니다.

C 표준은 자료형 사이에 지켜야 할 최소 관계를 정하지만, 실제 크기는 컴파일러와 실행 환경에 따라 달라질 수 있습니다.

뒤에서 배우는 sizeof를 이용하면 현재 환경에서 실제 크기를 직접 확인할 수 있습니다.


8. 상수는 어떻게 적을까요? ​

교재에서는 상수의 종류와 표기 방법도 중요하게 다룹니다.

처음에는 평소 사용하는 숫자부터 보고, 그 다음 특별한 표기법을 살펴봅시다.

정수 상수 ​

우리가 평소 쓰는 십진수는 그대로 적습니다.

c
10
25
1000
-30

C언어에서는 8진수와 16진수 표기도 사용할 수 있습니다.

c
10      // 십진수 10
012     // 8진수 12 -> 십진수로는 10
0x0A    // 16진수 0A -> 십진수로는 10
십진수: 평소처럼 적기 → 10

8진수: 앞에 0 → 012

16진수: 앞에 0x → 0x0A

숫자 앞의 0을 가볍게 보지 마세요

C언어에서 정수 앞에 0을 붙이면 8진수로 해석될 수 있습니다.

예를 들어 010은 십진수 10이 아니라 8진수 10, 즉 십진수로 8입니다.

처음 작성하는 일반적인 정수에는 필요 없이 앞에 0을 붙이지 않는 것이 좋습니다.

실수 상수 ​

소수점이 있는 값은 다음처럼 적을 수 있습니다.

c
3.14
172.5
0.5

아주 크거나 작은 값을 나타낼 때는 지수 표기법도 사용할 수 있습니다.

c
1.0e3

이 값은 다음과 같은 뜻입니다.

text
1.0 × 10³ = 1000.0

지금 당장 자주 사용할 필요는 없지만, 교재에서 e가 들어간 숫자를 만나도 놀라지 않으면 됩니다.

문자 상수 ​

문자 한 글자는 작은따옴표로 감쌉니다.

c
'A'
'B'
'1'

여기서 '1'은 숫자 1 그 자체라기보다 **문자 '1'**입니다.

c
1      // 숫자 1
'1'    // 문자 1

둘은 서로 다릅니다.

이스케이프 문자 ​

문자열 안에는 \n처럼 역슬래시 \로 시작하는 특별한 표현이 있습니다.

우리는 이미 줄 바꿈에 사용했습니다.

c
printf("첫째 줄\n둘째 줄\n");

자주 보는 것만 몇 가지 알아봅시다.

표현뜻
\n줄 바꿈
\t탭 간격
\\역슬래시 \ 자체
\"큰따옴표 " 자체

예를 들어 큰따옴표 자체를 화면에 보여 주려면 다음처럼 씁니다.

c
printf("그가 \"안녕하세요\"라고 말했습니다.\n");

실행 결과:

text
그가 "안녕하세요"라고 말했습니다.

이런 특별한 문자를 **이스케이프 문자(escape sequence)**라고 부릅니다.

지금 가장 중요한 것은 \n

여러 이스케이프 문자를 한꺼번에 외울 필요는 없습니다.

우선 우리가 계속 사용하는 \n = 줄 바꿈부터 확실히 익숙해지면 됩니다.


9. 변수 선언이란 무엇인가요? ​

C언어에서는 변수를 사용하기 전에 보통 "이런 변수를 사용할 겁니다"라고 먼저 알려 줍니다.

이것을 **변수 선언(declaration)**이라고 합니다.

c
int age;

이 문장은

"정수를 저장할 age라는 변수를 준비해 주세요."

라는 뜻입니다.

선언하고 나중에 값을 넣기 ​

c
int age;
age = 25;

두 줄로 나눌 수도 있습니다.

만들면서 바로 값 넣기 ​

c
int age = 25;

변수를 선언하면서 처음 값을 함께 넣는 것을 **초기화(initialization)**라고 합니다.

처음에는 용어보다 코드의 차이를 보는 것이 중요합니다.

c
int age;       // 상자만 준비
int score = 90; // 상자를 준비하면서 90도 넣음

추천 습관

처음 연습할 때는 가능하면 변수를 만들면서 초기값도 함께 넣는 방법이 이해하기 쉽습니다.

c
int age = 25;

10. 변수 이름은 어떻게 만들까요? ​

변수의 이름은 우리가 직접 정할 수 있습니다.

c
int age = 25;
int score = 90;
int studentCount = 30;

하지만 몇 가지 규칙이 있습니다.

규칙 1 · 영문자, 숫자, 밑줄 _을 사용할 수 있습니다 ​

가능한 예:

text
age
score1
student_count

규칙 2 · 숫자로 시작할 수 없습니다 ​

잘못된 예:

text
1score
2026year

가능한 예:

text
score1
year2026

규칙 3 · C언어가 이미 사용 중인 단어는 변수 이름으로 사용할 수 없습니다 ​

예를 들어 int, return 등은 C언어에서 이미 특별한 뜻을 가지고 있습니다.

c
int int = 10;    // 잘못된 예

이런 단어를 **예약어(keyword)**라고 합니다.

규칙 4 · 대문자와 소문자는 다릅니다 ​

text
age
Age
AGE

C언어에서는 모두 다른 이름입니다.

이름은 의미 있게 짓는 것이 좋습니다 ​

다음 두 코드를 비교해 봅시다.

c
int a = 80;
c
int age = 80;

둘 다 사용할 수 있지만 age가 훨씬 이해하기 쉽습니다.

좋은 변수 이름

처음에는 영어가 부담스러울 수 있습니다. 자주 쓰는 간단한 단어부터 익혀도 충분합니다.

  • 나이 → age
  • 점수 → score
  • 가격 → price
  • 개수 → count
  • 합계 → total

11. 여러 변수를 사용해 봅시다 ​

아래 코드를 복사해서 실행합니다.

c
#include <stdio.h>

int main(void)
{
    int age = 30;
    int score = 95;
    double height = 170.5;
    char grade = 'A';

    printf("나이: %d\n", age);
    printf("점수: %d\n", score);
    printf("키: %.1fcm\n", height);
    printf("등급: %c\n", grade);

    return 0;
}

실행 결과:

text
나이: 30
점수: 95
키: 170.5cm
등급: A

여기에서 출력할 값의 종류에 따라 표시 방법도 달라졌습니다.

값의 종류이번 시간에 사용한 표시
int 정수%d
double 실수%f, %.1f
char 문자%c

이런 표시를 **서식 지정자(format specifier)**라고 부릅니다.

지금은 이름을 완벽히 외우지 않아도 됩니다. 실습하면서 계속 보게 됩니다.


12. 변수 값을 계산에 사용할 수 있습니다 ​

변수에 들어 있는 숫자는 계산에도 사용할 수 있습니다.

c
#include <stdio.h>

int main(void)
{
    int apple = 3;
    int banana = 2;
    int total = apple + banana;

    printf("과일은 모두 %d개입니다.\n", total);

    return 0;
}

실행 결과:

text
과일은 모두 5개입니다.

이 부분을 천천히 읽어 봅시다.

c
int total = apple + banana;

컴퓨터는 먼저 오른쪽을 계산합니다.

text
apple + banana
3 + 2
5

그리고 계산 결과인 5를 total에 넣습니다.

total←apple + banana → 5

13. 상수도 이름을 붙여 사용할 수 있습니다 ​

프로그램 안에서 계속 같은 값으로 사용할 숫자에 이름을 붙이고 싶을 때가 있습니다.

예를 들어 원주율을 여러 번 사용한다고 생각해 봅시다.

c
3.141592

이 숫자를 코드 곳곳에 계속 직접 적는 것보다 PI라는 이름을 붙이면 읽기 쉬워집니다.

C언어에서는 여러 방법이 있지만, 이번 시간에는 교재 범위에 맞춰 #define을 먼저 살펴봅니다.

c
#define PI 3.141592

이렇게 적으면 아래 코드에서 PI라고 쓴 부분을 3.141592라는 값처럼 사용할 수 있습니다.

c
#include <stdio.h>

#define PI 3.141592

int main(void)
{
    printf("원주율은 %.6f입니다.\n", PI);
    return 0;
}

실행 결과:

text
원주율은 3.141592입니다.

이름을 대문자로 쓴 이유

PI처럼 #define으로 만든 이름은 관례적으로 대문자를 많이 사용합니다.

반드시 대문자로만 써야 한다는 뜻은 아니지만, **"이 값은 일반 변수와 다르구나"**라고 알아보기 쉬워집니다.

const를 이용하는 방법도 있습니다 ​

C언어에서는 변수를 선언할 때 const를 붙여 프로그램에서 바꾸지 않을 값임을 나타낼 수도 있습니다.

c
const double PI = 3.141592;

#define PI 3.141592와 완전히 같은 방식은 아니지만, 둘 다 변하지 않을 값을 이름으로 알아보기 쉽게 사용한다는 점에서는 함께 비교해 볼 수 있습니다.

지금은 두 방법이 있다는 정도만 알아두고, 이번 주 선행처리기 설명에서는 #define에 집중합니다.


14. 선행처리기란 무엇인가요? ​

지난 시간 첫 프로그램에서 이런 줄을 봤습니다.

c
#include <stdio.h>

오늘은 이런 문장이 무엇인지 조금 더 알아봅니다.

**선행처리기(preprocessor)**는 이름 그대로 본격적으로 컴파일하기 전에 먼저 처리하는 작업을 담당합니다.

어렵게 들리지만 일상생활에 비유하면 간단합니다.

요리를 시작하기 전에

text
1. 필요한 재료를 꺼낸다.
2. 도구를 준비한다.
3. 그 다음 요리를 시작한다.

라고 할 수 있습니다.

C 프로그램도 컴파일에 들어가기 전에 필요한 준비 작업을 할 수 있습니다.

① 소스 코드우리가 작성한 C 코드
② 선행처리#include, #define 등을 먼저 처리
③ 컴파일C 코드를 번역
④ 링킹필요한 코드를 연결
⑤ 실행프로그램 실행
선행처리 = 컴파일 전에 먼저 하는 준비 작업

15. #include는 무엇을 하나요? ​

우리가 계속 사용한 문장입니다.

c
#include <stdio.h>

처음에는 다음과 같이 읽으면 됩니다.

"stdio.h에 준비되어 있는 내용을 이 프로그램에서 사용할 수 있게 가져와 주세요."

stdio는 standard input/output, 즉 표준 입출력과 관련된 이름입니다.

우리가 사용한 printf()도 이 헤더와 관련이 있습니다.

헤더 파일이란? ​

stdio.h처럼 .h로 끝나는 파일을 **헤더 파일(header file)**이라고 부릅니다.

지금은 헤더 파일의 내부를 열어서 공부할 필요가 없습니다.

"필요한 기능에 대한 정보를 미리 준비해 둔 파일"

정도로 이해하면 충분합니다.

당장 외울 것은 하나입니다

화면에 글자를 출력하는 printf()를 사용할 때는 위쪽에 다음 줄을 작성합니다.

c
#include <stdio.h>

16. #define은 무엇을 하나요? ​

#define은 어떤 이름을 특정 값이나 내용으로 미리 바꾸어 사용할 수 있게 정의합니다.

예를 들어

c
#define TAX 10

이라고 작성하면 이후 코드에서 TAX라는 이름을 사용할 수 있습니다.

c
#include <stdio.h>

#define TAX 10

int main(void)
{
    printf("세율 예제 값: %d\n", TAX);
    return 0;
}

세미콜론을 붙이나요? ​

여기서 한 가지 눈여겨볼 점이 있습니다.

c
#define TAX 10

끝에 세미콜론 ;이 없습니다.

#include, #define처럼 #으로 시작하는 선행처리 지시문은 우리가 지금까지 본 일반적인 C 문장과 모양이 조금 다릅니다.

잘못된 예:

c
#define TAX 10;

오늘 실습에서는 다음처럼 적습니다.

c
#define TAX 10

교재에서 볼 수 있는 다른 선행처리 지시문 ​

처음 실습에서는 #include와 #define만 익혀도 충분합니다.

다만 교재나 다른 C 코드에서는 다음과 같은 이름도 볼 수 있습니다.

지시문아주 쉬운 설명
#include다른 헤더 파일의 내용을 사용할 수 있게 준비
#define이름이나 매크로를 정의
#undef앞에서 만든 매크로 정의를 해제
#if, #ifdef, #ifndef조건에 따라 어떤 코드를 포함할지 결정
#else, #elif, #endif조건부 선행처리의 다른 경우와 끝을 표시

예를 들어 다음 코드는 DEBUG라는 이름이 정의되어 있을 때만 해당 부분을 포함합니다.

c
#include <stdio.h>

#define DEBUG

int main(void)
{
#ifdef DEBUG
    printf("디버그 모드입니다.\n");
#endif

    return 0;
}

지금은 읽을 수만 있으면 됩니다

이런 조건부 선행처리를 직접 능숙하게 작성하는 것이 이번 주의 핵심은 아닙니다.

시험이나 교재에서 #ifdef를 봤을 때 **"컴파일 전에 조건에 따라 코드를 고르는 선행처리 지시문이구나"**라고 알아볼 수 있으면 충분합니다.


17. 전처리기? 선행처리기? ​

책이나 인터넷을 보다 보면 전처리기라는 말도 볼 수 있습니다.

영어 preprocessor를 우리말로 옮길 때 선행처리기, 전처리기라는 표현이 모두 사용됩니다.

이 스터디에서는 방송대 교재 표현에 맞춰 선행처리기라고 부르겠습니다.

용어가 달라도 놀라지 마세요

  • 선행처리기
  • 전처리기
  • preprocessor

문맥에 따라 같은 대상을 가리키는 표현을 만날 수 있습니다.


18. 자료형의 크기는 왜 다를까요? ​

컴퓨터 안에서 값을 저장하려면 실제 기억 공간이 필요합니다.

작은 물건과 큰 물건에 필요한 상자 크기가 다르듯이, 자료형마다 사용하는 저장 공간의 크기도 다를 수 있습니다.

C언어에서는 sizeof를 이용해 자료형이나 변수의 크기를 확인할 수 있습니다.

c
#include <stdio.h>

int main(void)
{
    printf("int 크기: %zu 바이트\n", sizeof(int));
    printf("double 크기: %zu 바이트\n", sizeof(double));
    printf("char 크기: %zu 바이트\n", sizeof(char));

    return 0;
}

실행 환경에 따라 결과가 달라질 수 있지만, 많은 Windows 환경에서는 다음과 비슷하게 보입니다.

text
int 크기: 4 바이트
double 크기: 8 바이트
char 크기: 1 바이트

바이트가 무엇인가요? ​

**바이트(byte)**는 컴퓨터가 기억 공간의 크기를 셀 때 사용하는 단위 중 하나입니다.

지금은 정확한 내부 구조를 모두 알 필요가 없습니다.

"자료형마다 컴퓨터 안에서 차지하는 공간의 크기가 다를 수 있다."

정도만 기억하면 됩니다.

숫자 자체를 무조건 외우지 마세요

C언어의 자료형 크기는 컴파일러와 실행 환경에 따라 달라질 수 있습니다.

따라서 int는 무조건 몇 바이트라고 외우기보다, 필요할 때 sizeof로 확인할 수 있다는 것을 알아두는 편이 좋습니다.


19. 일부러 틀려 보고 고쳐 봅시다 ​

오류를 직접 만나 보면 규칙이 더 잘 기억납니다.

문제 1 · 변수 이름이 숫자로 시작했습니다 ​

c
#include <stdio.h>

int main(void)
{
    int 1score = 90;
    printf("%d\n", 1score);

    return 0;
}
정답 보기

변수 이름은 숫자로 시작할 수 없습니다.

예를 들어 다음처럼 바꿀 수 있습니다.

c
int score1 = 90;
printf("%d\n", score1);

문제 2 · 문자를 큰따옴표로 적었습니다 ​

다음 코드는 char 변수에 문자 한 글자를 저장하려는 예입니다.

c
char grade = "A";
정답 보기

문자 한 글자는 작은따옴표를 사용합니다.

c
char grade = 'A';

큰따옴표 "A"는 문자열을 나타냅니다.

문제 3 · 변수 선언 전에 사용했습니다 ​

c
#include <stdio.h>

int main(void)
{
    age = 25;
    int age;

    printf("%d\n", age);
    return 0;
}
정답 보기

age를 사용하기 전에 먼저 선언해야 합니다.

c
int age;
age = 25;

또는 한 줄로 작성할 수 있습니다.

c
int age = 25;

문제 4 · #define의 위치와 모양 살펴보기 ​

다음 두 줄 중 오늘 배운 방식으로 올바른 것은 무엇일까요?

c
#define MAX_SCORE 100
c
#define MAX_SCORE 100;
정답 보기

오늘 배운 #define 지시문에는 끝에 세미콜론을 붙이지 않습니다.

c
#define MAX_SCORE 100

20. 오늘의 작은 실습 · 내 정보 출력하기 ​

아래 코드를 복사합니다.

c
#include <stdio.h>

int main(void)
{
    int age = 30;
    double height = 170.5;
    char bloodType = 'A';

    printf("나이: %d세\n", age);
    printf("키: %.1fcm\n", height);
    printf("혈액형 첫 글자: %c\n", bloodType);

    return 0;
}

1단계 · 그대로 실행 ​

먼저 아무것도 바꾸지 말고 실행합니다.

2단계 · 나이 바꾸기 ​

c
int age = 30;

숫자를 자신의 나이에 맞게 바꿔 봅니다.

3단계 · 키 바꾸기 ​

c
double height = 170.5;

값을 바꿔 봅니다.

4단계 · 문자 바꾸기 ​

c
char bloodType = 'A';

'B', 'O'처럼 영문자 한 글자로 바꿔 봅니다.

AB형은 어떻게 하나요?

char는 여기서 문자 한 글자를 연습하기 위해 사용했습니다.

AB처럼 여러 글자를 저장하는 방법은 뒤에서 문자열과 배열을 배울 때 다룹니다.


21. 조금 더 해보기 · 가격 계산 ​

아래 코드를 복사해서 실행합니다.

c
#include <stdio.h>

int main(void)
{
    int price = 1500;
    int count = 3;
    int total = price * count;

    printf("한 개 가격: %d원\n", price);
    printf("개수: %d개\n", count);
    printf("총 가격: %d원\n", total);

    return 0;
}

실행 결과:

text
한 개 가격: 1500원
개수: 3개
총 가격: 4500원

여기서 *는 곱하기입니다.

c
price * count

즉,

text
1500 × 3 = 4500

을 계산한 뒤 그 결과를 total에 넣습니다.

직접 바꿔 보기 ​

price를 2000으로 바꾸거나 count를 5로 바꾸어 결과가 어떻게 달라지는지 확인해 봅니다.


22. 오늘 배운 내용 확인하기 ​

1번 ​

변수는 무엇인가요?

정답 보기 값을 저장해 두고 이름으로 다시 사용할 수 있는 공간이라고 생각하면 됩니다.

2번 ​

정수를 저장할 때 이번 시간에 가장 먼저 배운 자료형은 무엇인가요?

정답 보기 `int`입니다.

3번 ​

소수점이 있는 값을 저장할 때 사용한 자료형은 무엇인가요?

정답 보기 `double`입니다.

4번 ​

다음 코드에서 =는 어떤 뜻인가요?

c
age = 30;
정답 보기 오른쪽의 `30`을 왼쪽 변수 `age`에 넣는다는 뜻입니다.

5번 ​

문자 한 글자 A를 char 변수에 저장하려면 어느 것이 맞을까요?

  • A. char grade = "A";
  • B. char grade = 'A';
정답 보기 B입니다.
c
char grade = 'A';

문자 한 글자는 작은따옴표를 사용합니다.

6번 ​

#include, #define 같은 문장을 컴파일 전에 먼저 처리하는 것을 무엇이라고 하나요?

정답 보기 선행처리라고 하며, 이를 담당하는 것을 선행처리기(preprocessor)라고 합니다.

7번 ​

printf()를 사용할 때 이번 수업에서 포함한 헤더 파일은 무엇인가요?

정답 보기
c
#include <stdio.h>

에서 사용하는 stdio.h입니다.


23. 이번 주 핵심 요약 ​

오늘 모든 자료형과 규칙을 외울 필요는 없습니다.

아래 내용만 다시 한번 읽어 봅니다.

① 변수는 값을 저장하는 이름 있는 공간입니다.

② 자료형은 어떤 종류의 값을 저장할지 알려 줍니다.

③ int는 정수, double은 실수, char는 문자 한 글자를 저장할 때 주로 사용합니다.

④ =는 오른쪽 값을 왼쪽 변수에 넣는다는 뜻으로 사용됩니다.

⑤ #include, #define 같은 지시문은 컴파일 전에 먼저 처리됩니다.

오늘 꼭 기억할 코드 세 줄 ​

c
int age = 30;
double height = 170.5;
char grade = 'A';

그리고

c
#include <stdio.h>

이 네 줄의 모양과 의미가 익숙해지는 것만으로도 오늘 공부는 충분합니다.

다음 시간 예고 ​

다음 시간에는 프로그램이 사람과 값을 주고받는 방법을 배웁니다.

  • 함수란 무엇인가?
  • 화면에 출력하는 printf()
  • 키보드로 값을 입력받는 방법

지금까지 우리가 코드 안에 직접 적었던 숫자를 다음 시간부터는 사용자가 직접 입력할 수 있게 됩니다.