화면 밝기
1주차 · C 언어의 개요
이번 시간에는 C언어를 처음 만납니다.
처음부터 문법을 많이 외우는 시간은 아닙니다. C언어가 무엇인지, C 프로그램은 어떤 모양인지, 그리고 내가 쓴 코드가 어떻게 실행되는지를 아주 천천히 살펴봅니다.
오늘의 목표
오늘 수업이 끝났을 때 아래 다섯 가지만 설명할 수 있으면 충분합니다.
- C언어는 컴퓨터에게 일을 시키기 위한 언어라는 것
- C 프로그램은
main()에서 시작한다는 것 printf()를 사용하면 화면에 글자를 출력할 수 있다는 것- 소스 코드는 컴파일과 링킹 과정을 거쳐 실행된다는 것
- 에러와 경고는 같은 뜻이 아니라는 것
1. C언어가 무엇인가요?
우리가 사람에게 일을 부탁할 때는 말을 사용합니다.
"문을 열어 주세요."
사람은 이 말을 듣고 뜻을 이해할 수 있습니다.
하지만 컴퓨터는 우리가 평소 사용하는 한국어 문장을 그대로 이해하지 못합니다. 그래서 컴퓨터가 알아들을 수 있도록 정해진 규칙에 맞춰 명령을 적는 방법이 필요합니다.
그 방법 중 하나가 C언어입니다.
C언어 = 컴퓨터에게 어떤 일을 시킬지 적는 언어
예를 들어 컴퓨터 화면에 안녕하세요!라고 표시하고 싶다면 C언어로 다음과 같이 적을 수 있습니다.
c
printf("안녕하세요!\n");지금은 이 문장을 외울 필요가 없습니다. 그냥 다음 정도만 보면 됩니다.
printf: 화면에 내용을 보여 달라는 뜻으로 사용합니다."안녕하세요!": 실제로 보여 줄 글자입니다.;: 하나의 명령이 끝났다는 표시입니다.
왜 이름이 C인가요?
C언어는 1970년대 초에 만들어진 프로그래밍 언어입니다. 그 이전에 사용되던 B언어의 영향을 받아 발전했고, 그 다음 이름으로 C가 사용되었습니다.
오래된 언어이지만 지금도 운영체제, 임베디드 기기, 각종 시스템 프로그램 등 여러 분야에서 사용되고 있습니다.
지금은 이것만 기억하세요
C언어의 역사 연도를 외우는 것보다 "오래전부터 사용되어 왔고, 지금도 중요한 프로그래밍 언어다" 정도를 이해하면 충분합니다.
2. 프로그램이란 무엇인가요?
**프로그램(program)**이라는 말도 어렵게 생각할 필요가 없습니다.
프로그램은 간단히 말하면 컴퓨터가 해야 할 일을 순서대로 적어 놓은 것입니다.
예를 들어 라면을 끓이는 순서를 생각해 봅시다.
- 냄비에 물을 넣습니다.
- 물을 끓입니다.
- 면과 스프를 넣습니다.
- 몇 분간 끓입니다.
- 완성된 라면을 먹습니다.
컴퓨터 프로그램도 이와 비슷합니다.
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
Mainprintf와 Printf도 다릅니다.
따라서 이미 정해진 이름을 사용할 때는 대문자와 소문자를 정확히 적어야 합니다.
규칙 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, return | C언어에서 이미 특별한 뜻으로 정해 둔 단어 |
| 이름 | 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;경고가 있다고 해서 반드시 프로그램이 실행되지 않는 것은 아닙니다.
하지만 경고는 나중에 실제 문제가 될 가능성을 알려 주는 경우가 있으므로 그냥 무시하는 습관은 좋지 않습니다.
에러: 프로그램을 만들거나 실행하기 어려운 문제
경고: 실행될 수도 있지만 확인해 보는 것이 좋은 문제
경고: 실행될 수도 있지만 확인해 보는 것이 좋은 문제
오류 메시지를 보면 어떻게 해야 하나요?
오류 메시지가 나오면 다음 순서로 확인해 봅니다.
- 오류가 발생했다고 표시된 줄 번호를 봅니다.
- 그 줄과 바로 앞줄을 함께 봅니다.
;을 빠뜨리지 않았는지 봅니다."가 양쪽에 모두 있는지 봅니다.{와}의 개수가 맞는지 봅니다.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 프로그램은 보통
③ printf()를 이용하면 화면에 글자를 출력할 수 있습니다.
④ 소스 코드 작성 → 컴파일 → 링킹 → 실행의 과정을 거칩니다.
⑤ 에러와 경고가 나오면 메시지를 읽고 코드의 해당 줄과 바로 앞줄을 함께 확인합니다.
② C 프로그램은 보통
main()에서 시작합니다.③ printf()를 이용하면 화면에 글자를 출력할 수 있습니다.
④ 소스 코드 작성 → 컴파일 → 링킹 → 실행의 과정을 거칩니다.
⑤ 에러와 경고가 나오면 메시지를 읽고 코드의 해당 줄과 바로 앞줄을 함께 확인합니다.
다음 시간 예고
다음 시간에는 C언어에서 값을 저장하는 방법을 배웁니다.
- 상수와 변수
- 정수와 실수 같은 자료형
- 변수 선언
#include와 같은 선행처리기
첫 시간에 등장했던 낯선 단어 중 일부가 다음 시간부터 하나씩 의미를 갖기 시작합니다.