Skip to content

1주차 · C 언어의 개요

이번 시간에는 C언어를 처음 만납니다.

처음부터 문법을 많이 외우는 시간은 아닙니다. C언어가 무엇인지, C 프로그램은 어떤 모양인지, 그리고 내가 쓴 코드가 어떻게 실행되는지를 아주 천천히 살펴봅니다.

오늘의 목표

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

  1. C언어는 컴퓨터에게 일을 시키기 위한 언어라는 것
  2. C 프로그램은 main()에서 시작한다는 것
  3. printf()를 사용하면 화면에 글자를 출력할 수 있다는 것
  4. 소스 코드는 컴파일과 링킹 과정을 거쳐 실행된다는 것
  5. 에러와 경고는 같은 뜻이 아니라는 것

1. C언어가 무엇인가요?

우리가 사람에게 일을 부탁할 때는 말을 사용합니다.

"문을 열어 주세요."

사람은 이 말을 듣고 뜻을 이해할 수 있습니다.

하지만 컴퓨터는 우리가 평소 사용하는 한국어 문장을 그대로 이해하지 못합니다. 그래서 컴퓨터가 알아들을 수 있도록 정해진 규칙에 맞춰 명령을 적는 방법이 필요합니다.

그 방법 중 하나가 C언어입니다.

C언어 = 컴퓨터에게 어떤 일을 시킬지 적는 언어

예를 들어 컴퓨터 화면에 안녕하세요!라고 표시하고 싶다면 C언어로 다음과 같이 적을 수 있습니다.

c
printf("안녕하세요!\n");

지금은 이 문장을 외울 필요가 없습니다. 그냥 다음 정도만 보면 됩니다.

  • printf : 화면에 내용을 보여 달라는 뜻으로 사용합니다.
  • "안녕하세요!" : 실제로 보여 줄 글자입니다.
  • ; : 하나의 명령이 끝났다는 표시입니다.

왜 이름이 C인가요?

C언어는 1970년대 초에 만들어진 프로그래밍 언어입니다. 그 이전에 사용되던 B언어의 영향을 받아 발전했고, 그 다음 이름으로 C가 사용되었습니다.

오래된 언어이지만 지금도 운영체제, 임베디드 기기, 각종 시스템 프로그램 등 여러 분야에서 사용되고 있습니다.

지금은 이것만 기억하세요

C언어의 역사 연도를 외우는 것보다 "오래전부터 사용되어 왔고, 지금도 중요한 프로그래밍 언어다" 정도를 이해하면 충분합니다.


2. 프로그램이란 무엇인가요?

**프로그램(program)**이라는 말도 어렵게 생각할 필요가 없습니다.

프로그램은 간단히 말하면 컴퓨터가 해야 할 일을 순서대로 적어 놓은 것입니다.

예를 들어 라면을 끓이는 순서를 생각해 봅시다.

  1. 냄비에 물을 넣습니다.
  2. 물을 끓입니다.
  3. 면과 스프를 넣습니다.
  4. 몇 분간 끓입니다.
  5. 완성된 라면을 먹습니다.

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

text
1. 숫자를 입력받는다.
2. 숫자에 10을 더한다.
3. 결과를 화면에 보여 준다.

이런 일을 C언어의 규칙에 맞게 적으면 C 프로그램이 됩니다.


3. 첫 번째 C 프로그램을 만나 봅시다

아래 코드를 먼저 전체 모습만 바라봅시다.

c
#include <stdio.h>

int main(void)
{
    printf("안녕하세요!\n");
    return 0;
}

처음 보면 기호도 많고 영어도 많아서 복잡해 보일 수 있습니다. 하지만 한 줄씩 나누어 보면 생각보다 단순합니다.

한 줄씩 살펴보기

#include <stdio.h>

c
#include <stdio.h>

printf()처럼 화면에 글자를 출력하는 기능을 사용하기 위해 필요한 준비입니다.

지금은 이렇게 이해하면 됩니다.

"화면 입출력 도구를 사용할 수 있게 준비해 주세요."

#include에 대한 자세한 내용은 다음 주 선행처리기에서 다시 배웁니다.

int main(void)

c
int main(void)

C 프로그램은 보통 main 함수에서 시작합니다.

main은 영어로 "주요한", "중심이 되는"이라는 뜻이 있습니다.

즉, 컴퓨터가 프로그램을 실행할 때 "여기서부터 시작하면 되는구나" 하고 찾는 시작점이라고 생각하면 됩니다.

int, (void)의 정확한 뜻은 함수와 자료형을 배울 때 다시 자세히 다룹니다.

{}

c
{
    // 이 안에 프로그램의 내용을 적습니다.
}

중괄호 { }는 여러 명령을 하나의 묶음으로 감싸는 데 사용합니다.

상자를 하나 만들고 그 안에 해야 할 일을 넣는다고 생각해도 좋습니다.

printf()

c
printf("안녕하세요!\n");

화면에 글자를 출력합니다.

여기에서 \n줄을 바꾸라는 표시입니다.

예를 들어 다음 코드는 두 줄로 출력됩니다.

c
printf("첫 번째 줄\n");
printf("두 번째 줄\n");

실행 결과:

text
첫 번째 줄
두 번째 줄

return 0;

c
return 0;

main()의 일이 정상적으로 끝났다는 것을 운영체제에 알려 주는 표현입니다.

처음에는 아래처럼 기억하면 충분합니다.

"프로그램이 정상적으로 끝났습니다."


4. 직접 따라 해 봅시다

이제 첫 번째 실습입니다.

아래 코드를 직접 전부 입력하지 않아도 됩니다. 코드 상자 오른쪽 위의 복사 버튼을 눌러 복사한 뒤 실습 환경에 붙여 넣어 실행해 봅니다.

c
#include <stdio.h>

int main(void)
{
    printf("C언어 공부를 시작합니다!\n");
    return 0;
}

실행 결과는 다음과 같습니다.

text
C언어 공부를 시작합니다!

한 부분만 바꾸어 보기

이번에는 큰 구조는 그대로 두고, 따옴표 안의 글자만 바꿔 봅시다.

c
#include <stdio.h>

int main(void)
{
    printf("반갑습니다. 저는 홍길동입니다.\n");
    return 0;
}

홍길동 부분을 자신의 이름으로 바꾸어 실행해 봅니다.

실습할 때 중요한 습관

처음에는 전체 코드를 복사 → 실행 → 한 군데만 수정 → 다시 실행 순서로 해 보는 것이 좋습니다.

한꺼번에 여러 곳을 바꾸면 문제가 생겼을 때 어느 부분에서 문제가 생겼는지 찾기 어려워집니다.


5. 내가 쓴 글이 어떻게 프로그램이 되나요?

우리가 작성한 C 코드는 사람이 읽기 편한 글입니다.

예를 들어 이런 코드입니다.

c
printf("안녕하세요!\n");

하지만 컴퓨터의 CPU는 이 문장을 그대로 이해하지 못합니다.

그래서 중간에 번역 과정이 필요합니다.

① 소스 코드사람이 C언어로 작성한 코드
② 컴파일컴파일러가 코드를 번역
③ 목적 파일번역된 중간 결과
④ 링킹필요한 여러 조각을 연결
⑤ 실행 파일컴퓨터에서 실행할 수 있는 프로그램

하나씩 아주 쉽게 살펴보겠습니다.

① 소스 코드 작성

우리가 C언어로 직접 작성한 글을 **소스 코드(source code)**라고 합니다.

C언어 소스 파일은 보통 파일 이름 끝에 .c가 붙습니다.

예:

text
hello.c
study.c
main.c

② 컴파일

**컴파일(compile)**은 우리가 작성한 C 코드를 컴퓨터가 처리할 수 있는 형태로 번역하는 과정입니다.

번역을 담당하는 프로그램을 **컴파일러(compiler)**라고 합니다.

일상생활에 비유하면 다음과 비슷합니다.

text
한국어 문장 → 통역사 → 영어 문장
C 소스 코드 → 컴파일러 → 컴퓨터가 처리할 수 있는 코드

③ 목적 파일

컴파일이 끝나면 **목적 파일(object file)**이라는 중간 결과가 만들어질 수 있습니다.

지금 단계에서는 목적 파일의 내부를 알 필요는 없습니다.

"컴파일은 끝났지만 아직 최종 프로그램은 아닌 중간 파일"

이라고 이해하면 됩니다.

④ 링킹

프로그램은 내가 작성한 코드만으로 만들어지지 않는 경우가 많습니다.

printf()처럼 이미 만들어져 있는 여러 기능도 함께 사용합니다.

**링킹(linking)**은 이렇게 필요한 코드 조각들을 서로 연결해 최종 프로그램으로 만드는 과정입니다.

레고 블록을 여러 개 연결해 하나의 완성품을 만드는 것과 비슷합니다.

⑤ 실행

링킹까지 끝나면 우리가 실제로 실행할 수 있는 실행 파일이 만들어집니다.

Windows에서는 실행 파일 이름 끝에 .exe가 붙는 경우가 많습니다.

text
hello.exe

이 실행 파일을 실행하면 우리가 만든 프로그램이 동작합니다.

전체 흐름 다시 보기

소스 코드 작성 → 컴파일 → 링킹 → 실행

처음에는 이 네 단어의 순서만 기억해도 좋습니다.


6. C 프로그램을 작성할 때 알아둘 기본 규칙

C언어에는 몇 가지 작성 규칙이 있습니다.

모든 규칙을 오늘 외울 필요는 없습니다. 코드를 작성하면서 계속 만나게 됩니다.

규칙 1 · 대문자와 소문자를 구별합니다

C언어에서는 다음 두 이름을 서로 다르게 봅니다.

text
main
Main

printfPrintf도 다릅니다.

따라서 이미 정해진 이름을 사용할 때는 대문자와 소문자를 정확히 적어야 합니다.

규칙 2 · 명령 끝에는 ;이 자주 사용됩니다

c
printf("안녕하세요!\n");

맨 끝의 ;세미콜론이라고 부릅니다.

문장의 마침표처럼 하나의 명령이 끝났음을 나타낸다고 생각하면 쉽습니다.

잘못된 예:

c
printf("안녕하세요!\n")

올바른 예:

c
printf("안녕하세요!\n");

규칙 3 · 글자는 큰따옴표 " "로 감쌉니다

화면에 출력할 글자는 다음처럼 큰따옴표로 감쌉니다.

c
printf("오늘도 즐겁게 공부합니다.\n");

큰따옴표 하나를 빠뜨리면 오류가 발생합니다.

c
printf("오늘도 즐겁게 공부합니다.\n);

규칙 4 · 보기 좋게 들여쓰기를 합니다

컴퓨터는 아래 코드도 어느 정도 이해할 수 있습니다.

c
int main(void)
{
printf("안녕하세요!\n");
return 0;
}

하지만 사람은 읽기 불편합니다.

그래서 보통 중괄호 안쪽 코드는 조금 오른쪽으로 들어가게 작성합니다.

c
int main(void)
{
    printf("안녕하세요!\n");
    return 0;
}

이렇게 줄의 시작 위치를 맞추는 것을 들여쓰기라고 합니다.

규칙 5 · 설명을 적고 싶을 때는 주석을 사용합니다

주석은 프로그램을 설명하기 위해 적는 메모입니다.

컴퓨터는 주석의 내용을 실행하지 않습니다.

한 줄 주석:

c
// 화면에 인사말을 출력합니다.
printf("안녕하세요!\n");

여러 줄 주석:

c
/*
    이것은 여러 줄로
    작성할 수 있는 주석입니다.
*/
printf("안녕하세요!\n");

주석은 누구를 위한 것일까요?

주석은 컴퓨터보다 사람을 위한 메모입니다.

며칠 뒤의 나 자신이나 다른 사람이 코드를 읽을 때 큰 도움이 됩니다.


7. C 프로그램을 이루는 여러 가지 요소

교재에서는 C 프로그램을 이루는 여러 요소가 등장합니다.

처음부터 이름을 모두 암기하기보다 실제 코드에서 찾아보겠습니다.

c
int age = 20;
printf("나이: %d\n", age);

여기에는 여러 종류의 요소가 들어 있습니다.

종류아주 쉬운 설명
예약어int, returnC언어에서 이미 특별한 뜻으로 정해 둔 단어
이름age, main변수나 함수 등에 붙이는 이름
상수20, 100코드 안에 직접 적은 값
연산자=, +, -계산이나 대입 등에 사용하는 기호
구분 기호;, ,, {, }문장이나 영역을 나누는 기호
주석// 설명사람이 읽기 위해 적는 설명

이 내용들은 이후 각 주차에서 다시 하나씩 자세히 배웁니다.


8. 에러와 경고 메시지

프로그램을 작성하다 보면 컴퓨터가 메시지를 보여 줄 때가 있습니다.

대표적으로 **에러(error)**와 **경고(warning)**가 있습니다.

둘은 같은 뜻이 아닙니다.

에러(error)

에러는 프로그램을 정상적으로 만들 수 없을 정도의 문제가 있다는 뜻입니다.

예를 들어 세미콜론을 빼먹었다고 해 봅시다.

c
#include <stdio.h>

int main(void)
{
    printf("안녕하세요!\n")
    return 0;
}

여기에서는 printf() 뒤의 ;이 빠졌습니다.

컴파일러는 이 코드를 보고 오류 메시지를 보여 줍니다.

이 경우에는 보통 오류를 고치기 전까지 정상적인 실행 파일을 만들 수 없습니다.

경고(warning)

경고는 프로그램을 만들 수는 있지만 확인해 보는 것이 좋은 부분이 있다는 뜻입니다.

예를 들어 변수를 만들어 놓고 전혀 사용하지 않은 경우 컴파일러 설정에 따라 경고가 나올 수 있습니다.

c
int number = 10;

경고가 있다고 해서 반드시 프로그램이 실행되지 않는 것은 아닙니다.

하지만 경고는 나중에 실제 문제가 될 가능성을 알려 주는 경우가 있으므로 그냥 무시하는 습관은 좋지 않습니다.

에러: 프로그램을 만들거나 실행하기 어려운 문제
경고: 실행될 수도 있지만 확인해 보는 것이 좋은 문제

오류 메시지를 보면 어떻게 해야 하나요?

오류 메시지가 나오면 다음 순서로 확인해 봅니다.

  1. 오류가 발생했다고 표시된 줄 번호를 봅니다.
  2. 그 줄과 바로 앞줄을 함께 봅니다.
  3. ;을 빠뜨리지 않았는지 봅니다.
  4. "가 양쪽에 모두 있는지 봅니다.
  5. {}의 개수가 맞는지 봅니다.
  6. printf 같은 이름의 철자가 맞는지 봅니다.

중요한 점

오류 메시지가 가리키는 줄이 항상 실제 실수한 바로 그 줄인 것은 아닙니다.

예를 들어 앞줄에서 ;을 빼먹으면 그 다음 줄에서 오류가 발견될 수도 있습니다. 그래서 표시된 줄뿐 아니라 바로 위쪽도 함께 확인하는 습관이 좋습니다.


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

오류를 무서워하지 않기 위한 실습입니다.

문제 1 · 세미콜론 찾기

아래 코드를 복사해서 어떤 부분이 잘못되었는지 찾아봅니다.

c
#include <stdio.h>

int main(void)
{
    printf("안녕하세요!\n")
    return 0;
}
정답 보기

printf() 문장 마지막에 세미콜론 ;이 빠졌습니다.

c
printf("안녕하세요!\n");

문제 2 · 철자 찾기

c
#include <stdio.h>

int main(void)
{
    pritnf("안녕하세요!\n");
    return 0;
}
정답 보기

pritnf가 아니라 printf입니다.

c
printf("안녕하세요!\n");

문제 3 · 큰따옴표 찾기

c
#include <stdio.h>

int main(void)
{
    printf("안녕하세요!\n);
    return 0;
}
정답 보기

\n 뒤의 큰따옴표 "가 빠졌습니다.

c
printf("안녕하세요!\n");

10. 오늘의 작은 실습

아래 프로그램을 복사하고 따옴표 안의 내용만 자신에게 맞게 바꿔 봅니다.

c
#include <stdio.h>

int main(void)
{
    printf("안녕하세요.\n");
    printf("저는 홍길동입니다.\n");
    printf("C언어 공부를 시작했습니다!\n");

    return 0;
}

예를 들어 다음과 같이 바꿀 수 있습니다.

c
#include <stdio.h>

int main(void)
{
    printf("안녕하세요.\n");
    printf("저는 김방송입니다.\n");
    printf("천천히 C언어를 배워 보겠습니다!\n");

    return 0;
}

실행 결과:

text
안녕하세요.
저는 김방송입니다.
천천히 C언어를 배워 보겠습니다!

조금 더 해보고 싶은 분

아래 한 줄을 하나 더 추가해 봅니다.

c
printf("오늘 수업도 끝까지 따라왔습니다.\n");

어느 위치에 넣으면 어느 순서로 출력되는지도 확인해 봅니다.


11. 오늘 배운 내용 확인하기

1번

C언어는 무엇을 하기 위한 언어인가요?

정답 보기 컴퓨터에게 어떤 일을 시킬지 표현하기 위한 프로그래밍 언어입니다.

2번

C 프로그램이 보통 시작되는 함수의 이름은 무엇인가요?

정답 보기 `main()`입니다.

3번

화면에 글자를 출력할 때 이번 시간에 사용한 함수는 무엇인가요?

정답 보기 `printf()`입니다.

4번

다음 중 올바른 순서는 무엇일까요?

  • A. 실행 → 컴파일 → 소스 코드 작성
  • B. 소스 코드 작성 → 컴파일 → 링킹 → 실행
  • C. 링킹 → 실행 → 소스 코드 작성
정답 보기 B입니다. **소스 코드 작성 → 컴파일 → 링킹 → 실행** 순서로 이해하면 됩니다.

5번

에러와 경고는 완전히 같은 의미일까요?

정답 보기 아닙니다. 에러는 프로그램 생성이나 실행을 막는 문제가 될 수 있고, 경고는 실행 가능하더라도 확인해 보는 것이 좋은 문제를 알려 줍니다.

12. 이번 주 핵심 요약

오늘 모든 내용을 외울 필요는 없습니다.

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

① C언어는 컴퓨터에게 일을 시키기 위한 프로그래밍 언어입니다.

② C 프로그램은 보통 main()에서 시작합니다.

③ printf()를 이용하면 화면에 글자를 출력할 수 있습니다.

④ 소스 코드 작성 → 컴파일 → 링킹 → 실행의 과정을 거칩니다.

⑤ 에러와 경고가 나오면 메시지를 읽고 코드의 해당 줄과 바로 앞줄을 함께 확인합니다.

다음 시간 예고

다음 시간에는 C언어에서 값을 저장하는 방법을 배웁니다.

  • 상수와 변수
  • 정수와 실수 같은 자료형
  • 변수 선언
  • #include와 같은 선행처리기

첫 시간에 등장했던 낯선 단어 중 일부가 다음 시간부터 하나씩 의미를 갖기 시작합니다.