우리는 printf 함수를 통하여 화면에 출력하고자 하는 글자가 있다면 어떻게 출력해야 하는가에 대해서 공부해 보았습니다.

 

이번장에서는 변수라는 것을 통하여 컴퓨터 어떻게 숫자를 기억하고 계산을 하는지에 대해서 알아 보겠습니다.

 

우선 변수라는 것은 변하는 숫자라는 뜻으로

자료 또는 숫자를 기억하는 공간이다. 라고 정의해 두겠습니다.

 

쉽게 생각하면 아래 그림과 같은 자료를 넣는 이름이 적힌 네모난 상자 정도로 생각하시면 됩니다.

 

 

 

 

그럼 변수명은 자료 또는 숫자를 기억하는 공간 즉, 상자의 이름이 되는 것이겠죠?

 

 

그렇다면 이러한 변수명(상자 이름)은 아무렇게나 지어도 되는것이냐?

 

반은 맞고 반은 맞지 않은 이야기입니다.

 

변수명은 어떠한 것을 사용해도 되지만 몇가지 규칙만 지켜주면 됩니다.

 

변수명은 대소문자를 구분하므로 num 과 NUM은 완전히 다른 변수명이며 C언어 고유 예약어(명령어)를 사용해서는 안됩니다.

 

또한 세모, 네모, 별모양 같은 특수문자를 포함할수 없으며

반드시 문자 혹은 _(언더바)로 시작해야며 숫자 0~9는 시작문자로 사용할수 없습니다.

특수문자는 사용할수 없지만 _(언더라인)은 사용할수 있어서 변수명이 길 경우 변수명을 좀더 알아보기 편하게 단어와 단어를 구분하는 용도로 사용하기도 합니다.(예약어는 부록을 참조하세요.)

 

그리고 변수명 중간에 공백을 포함할수 없습니다.

 

예를 들어 보자면

 

abc : 올바른 사용

Ab : 올바른 사용

_ab : 올바른사용

a_b : 올바른 사용

a b : 잘못된 사용  <--공백이 포함됨

9ab : 잘못된 사용 <--- 숫자로 시작됨

 

대략적으로 위와 같습니다.

 

그리고 대 소문자를 구분하므로

Ab 변수와 ab 변수는 다른 변수로 취급됩니다.

물론 AB 변수와 Ab 변수도 다른 변수로 취급됩니다.

 

요즘 컴파일러는 변수명 길이에 크게 제약이 따르지 않으며 무제한이지만 보통 255자 이내는 거의 모든 컴파일러에서 지원합니다. 실제 프로그래밍에서는 30자 이내로 사용을 권장 드리며 불필요하게 긴 변수명 사용을 하지 않는 것이 좋으며 반대로 아무런 의미가 없는 변수면, a, b, c, d 이렇게 외자로 사용하는 것은 자제하는 것이 좋습니다.

 

아주 짧은 프로그램이나 처음 프로그램을 작성후 얼마 되지 않은 기간에는 변수의 사용목적을 정확하게 기억하지만

시간이 지날수록 변수의 사용목적은 기억속에서 흐려지게 됩니다.

그리고 내가 만는 프로그램을 내가 아닌 타인이 수정(유지 보수)할일도 있을것입니다.

이경우 나만 알수있는 기호 형태의 변수명을 사용한다면 타인이 내가 작성한 프로그램을 읽고 해석하기가 매우 힘들겠지요.

 

따라서, 변수명만 보고도 그 변수가 어떤 목적으로 만들어졌고 어떻게 사용되는지 짐작이 가능한 변수명을 사용하는것이 유지 보수 측면에서 차후 많은 도움이 될것입니다.

 

그러나!!! 변수명이 길 경우 초보자분들은 변수명에 현혹되는 현상이 많으므로 이책에서는 당분간 무의미 하고 짧지만 이해하기 편한 a, b, c 변수명을 사용하여 간혹 사용하여 설명 드리겠습니다.

 

 

실제 프로그램 문장을 빌려서 설명해 보겠습니다.

 

 

#include <stdio.h>
int main(void){
   int a;
   a=3;
   printf("%d", a);
   return 0;
}

 

 

int a;

a=3;

 

위 두가지 문장이 새로 보는 형태의 문장입니다.

 

각각의 문장 뒤에 세미콜론이 있다는점을 주의깊게 봐두시기 바랍니다.

앞서 설명드린바와 같이 모든 실행문의 뒤에는 세미콜론을 적어야 합니다.

 

 

첫 번째 문장인 int a; 의 뜻은

 

a라는 정수(int)를 기억할수 있는 기억공간을 만들어 주세요 라는 뜻입니다.

 

이때 앞에 int는 정수(integer)를 뜻하며 a라는 공간을 만들어 주세요 그리고 a에는 정수(소수정이 없는수)만 넣겠습니다라고 컴퓨터에게 알려 주는 것입니다.

 

다르게 이야기 하면 정수를 넣을수 있는 a라는 공간을 만들어달라는 뜻으로 해석할수도 있습니다. 해석은 어느 방식으로 하시던 상관없습니다.

 

결론적으로 말하면 컴퓨터는 정수를 넣을수 있는 기억공간을 만들고 그 공간이름을 a라고 부를수 있게 해주는 것입니다.

(그러나 여기에는 재미있는 C 언어만의 특징이 숨겨져 있습니다. 차후 설명 드리겠습니다.)

 

 

두 번째 문장 a=3 은 a라는 공간에 3을 넣어 달라는 뜻입니다.

 

a=3라는 문장은 수학에서 말하는 a와 3이 같다는 뜻이 아니라.

 

=(등호) 기준으로 오른쪽에 있는 3이라는 숫자를 왼쪽 a 라는 공간에 넣어 달다른 뜻입니다.

 

즉, a라는 공간에 숫자 3을 넣으라고 컴퓨터에게 시키는 것이 됩니다.

 

위와 같이 어떤 공간에 자료를 넣는 것을 치환이라고 합니다.

 

거의 모든 프로그래밍언어에서는 =(등호) 기준으로 오른쪽에 있는 값이 왼쪽에 들어 가게 되는데요

 

유식하게 이야기 하면

 

우항(오른쪽 항목)이 좌항(왼쪽항목)에 치환(대입,넣기)된다라고 표현합니다.

 

우항이 좌항에 치환된다. 꼭 기억하세요!!!

 

 

다른 예를 한번 보겠습니다.

 

b=5; 라는 문장이 있었다면

 

이는 b라는 공간에 5을 넣어 달라는 뜻이 됩니다.

 

c=2+5; 라는 문장이 있다면

 

우측항목인 2+5의 결과인 7을 좌측항목 c에 넣어 달라는 뜻으로 최종적으로 보면 c라는 기억공간안에 7이 있다고 볼수 있습니다.

 

대략적으로 이해가 되셨는지요?

 

 

자 그럼 위 프로그램을 다시 한번 적어 보겠습니다.

 

int a;

 

위문장은 정수를 넣는 공간을 만든다고 한 것 기억하시나요?

 

조금더 자세하게 설명해 보겠습니다.

int 라는 것이 정수의 약자로써 a라는 공간을 만들고 정수만 넣을수 있게 해달라는 뜻입니다.

이와같이 기억공간을 할당(배정) 받는 것을 선언문이라고 이야기 합니다.

 

 

a=3;

 

위와 같은 문장은 치환(대입)문이라고 한다는 것은 배우셨지요?

 

 

자 이제 위 문장을 한문장으로 줄여 보겠습니다. 즉 선언과 동시에 값을 넣어 버리는 겁니다.

이때 a라는 공간안에 처음 값이 들어간다고 해서 초기치라고도 합니다.

 

선언과 초기치를 한꺼번에 하여 한문장으로 줄이면

 

int a=3; 과 같은 형태가 됩니다.

 

위 문장은 앞서 설명드린바와 같이 a라는 정수가 들어갈수 있는 공간을 만들고 그곳에 3을 넣어라, 이렇게 컴퓨터는 똑똑하게 인식을 한다는 겁니다.

 

2줄에 적는 불편함이 사라지겠지요?

 

무조건 두줄에 적는 것이 불편한 것은 아니지만 가능하면 모든 변수는 선언후 바로 초기치를 주는 것이 좋습니다. 선언한 변수를 어떻게 활용하느냐에 따라서 반드시 초기치가 필요한 변수도 있고 필요 없는 변수들도 있지만 여기서 기억해야 할 것은 초기치를 주는 방법만 기억하시면 됩니다. 추후 초기치가 반드시 필요한 변수에 대해서는 뒷장에서 살펴 보겠습니다.

 

그럼 여기서 앞의 프로그램을 다시 한번 가져와 보겠습니다.

 

#include <stdio.h>
int main(void){
   int a;
   a=3;
   printf("%d", a);
   return 0;
}

 

 

4번라인까지는 이제 이해를 하셨으리라 생각합니다.

그럼 5번라인 printf("%d", a); 라는 문장만 분석하면 됩니다.

 

a라는 공간에 숫자공간에 3이 들어갔다는 것 까지 이해를 하셨죠?

 

그렇다면 

printf("%d", a); 라는 문장은

printf("%d", 3); 으로 생각할수 있습니다.

 

1장에서 배우신바와 같이 %d는 정수를 출력하는 특수문자이고 그 출력데이터는 오른쪽 a변수에서 가져 오므로 %d 대신에 모니터에 3이 출력되게 될것입니다.

 

그럼 또다른 예제를 통하여 변수 선언을 동시에 여러개 하는 것을 살펴보겠습니다.

 

#include <stdio.h>
int main(void){
   int a;
   a=3;
   int b=4, c=5;
   printf("%d %d %d", a, b, c);
   return 0;
}

 

 

5번라인과 같이 int형 변수 b와 c를 선언할 때 한줄에 선언할수 있으며 초기치 또한 바로 줄 수 있습니다. 이때 변수와 변수를 구분하기 위해서 구분자 콤마(,)를 사용하는 것 주의 하셔야 합니다.

 

 

- 주석문을 배워보자

자 그럼 여기서 설명을 더 빠르게 돕기 위해서 우리는 주석문이라는 것을 배울것입니다.

 

주석문이란 프로그램에 설명글을 추가하는 것으로 실제 프로그램 수행관는 상관없으므로 컴파일되지 않습니다. 주석문은 자신이 작성한 프로그램을 좀더 잘 알아보기 위해서 남기는 메모라고 볼수 있습니다. 이러한 주석문을 남기는 방식은 크게 두가지로 나누어 집니다.

 

여기서부터 여기까지가 주석문입니다. 라고 컴퓨터에게 알려 주는 블록형 주석문

여기 이후로 한줄은 모두 주석문입니다. 라고 컴퓨터에게 알려주는 라인형 주석문이 있습니다.

 

블록형 주석문은 오래전부터 C언어에서 사용되던 형태이며

라인형 주석문은 C++에서 새로 추가되어 사용되는 형태입니다.

하지만 요즘 사용하시는 C 컴파일러가 대부분 C++ 주석문 형태를 지원하므로 혼용해서 사용해도 크게 상관은 없습니다.

 

블록형 주석문은 /* 으로 시작하면 그 끝은 */ 으로 끝납니다.

간단히 예를 들어보면

 
#include <stdio.h>
int main(void){
   int a;
   a=3;
   /* 여기서부터
   주석문입니다.
   여기 안에는 아무거나 적어도 됩니다.
   프로그램 실행과는 관련이 없습니다.
   */
   printf("%d", a);
   return 0;
}


 

위와 같은 형태가 블록형 주석문이며

 
#include <stdio.h>
int main(void){
   int a;  //정수변수 a선언
   a=3;    //a에 3을 넣었습니다.
     // 여기서부터 뒤로는 주석문입니다. 단, 한줄만!!!
   printf("%d", a); //이렇게 실제 프로그램 뒤에 적어도 됩니다.
   return 0;
}//여기는 프로그램 끝입니다.

 

 

보시는 바와 같이 int a; 뒤에 /(슬러쉬) 2개를 적은 다음 주석내용을 작성하면 // 이후로만 주석처리 되면 // 앞쪽의 int a; 주석문이 아닌 실제 프로그램으로 인식입니다.

또한 // 여기서부터 뒤로는 주석문입니다. 단, 한줄만!! 같은 형태로

프로그램 중간 중간에 필요한 부분 한줄 전체를 주석문으로 활용할수도 있습니다.

 

어느 형태를 사용하든 아무런 상관이 없습니다. 제가 이장에서 주석문을 알려 드리는 이유는 앞으로 보게될 예제 프록그램들은 그 라인수가 점점 늘어나게 될것입니다.

 

위 간단한 예제도 8줄 정도인데 조금 긴 예제의 경우 100라인 정도 될것입니다. 그렇다고 당장 100라인 짜리 프로그램을 가지고 설명을 드리겠다는 뜻은 아니니 안심하셔도 됩니다.

 

지금 이후의 프로그램 설명에서는 추가되는 부분은 자세히 설명하고

나머지 부분에 대해서는 주석문을 통하여 앞에 배운 내용을 상기 시켜 드리고자 주석문에 대해서 먼저 배워 봤습니다.

 

자 그럼 조금더 자료형에 대해서 깊이 있는 학습을 시작해 보겠습니다.

 

우리는 간단한 예제를 통하여 정수형 변수 선언 및 초기화 까지 배웠습니다.

 

자료형은 앞서 printf 문에서 보신바와 같이 정수형, 실수형, 문자형, 문자열형 등으로 구분이 가능합니다.

 

문자열형은 문자들을 모아 놓은 형태에 불과하지만 아직 배우지 않은 배열을 이용해야 하며 그 사용법이 까다로우므로 일단은 정수형(int), 실수형(float, double), 문자형(char)에 대해서만 학습하도록 하겠습니다.

 

int : 정수형

float : 단정도 실수형

double : 배정도 실수형

char : 문자형

 

이번장에서는 위와 같이 4개의 자료형에 대해서만 학습해 보겠습니다.

 

자 그럼 앞서 배운 내용을 이용하여 조금더 연결해 볼까요?

 

int

정수형

%d

float

단정도 실수형

%f

double

배정도 실수형

%f

char

문자형

%c

 

 

위 표와 같이 정리 할수 있습니다.

 

그럼 새로 나온 용어인 단정도 실수형과 배정도 실수형에 대해서 알아 보겠습니다. 실수형은 소수점이 있는 숫자를 뜻한다고 배웠습니다. 그럼 단정도와 배정도에 대해서만 이해를 하시면 될 듯 합니다.

 

단정도란 정밀도가 짧다는 뜻이며 이때 단은 한자로 홋단 자를 사용합니다. 적할한 예를들자면 긴칼을 장검이라 부르고 짧은 칼은 단검이라고 부르지요? 머리 많이 아파 보셨던 수학에서 말하는 단수, 복수도 그 예가 될수 있겠네요.

 

그럼 배정도의 배는 한배 두배 세배 할 때 그 배를 말하는 거겠죠?

요약하면 단정도 실수형은 그 정밀도가 조금 낮으며 배정도 실수형은 그 정밀도가 단정도 실수형에 비해서 약 두배정도 높다라고 생각하시면 됩니다.

하지만 아직까지 우리가 배운 지식과 예제로는 단 정도와 배정도에 대해서 정확하게 이해하기는 힘들것입니다. 따라서 여기서는 뜻만 기억해 두고 그냥 실수형이다 라고만 생각하도록 하겠습니다.

 

자 그럼 적절한 선언과 초기화 그리고 출력문 사용법등에 대한 예제를 보도록 하겠습니다.

 

#include <stdio.h>
int main(void){
   int a=65;              //정수형
   float fa=21.354;      //단정도 실수
   double dd=15.14;      //배정도 실수
   char ch= 'A';         //문자형
   
   printf("%d \n", a); 
   printf("%f \n", fa); 
   printf("%f \n", dd); 
   printf("%c \n", ch); 
   
   //심화 학습(뭔가 잘못 적은 것 같은데?)
   printf("%c \n", a); 
   printf("%d \n", ch); 
   
return 0;
}//여기는 프로그램 끝입니다.

 

 

그런 한줄씩 같이 분석해 보도록 하겠습니다.

 

int a=65;

 

int형 변수 a를 선언한뒤 65로 초기화 합니다.

 

이정도는 이제 분석이 잘 되실꺼라고 생각합니다. 이게 분석이 안되신다면 책을 되돌려서 충분이 이해하신뒤 학습하시기 바랍니다.

 

 

float fa=21.354;      

단정도 실수형 변수 fa를 선언한뒤 21.354로 초기화 합니다.

 

double dd=15.14;      

배정도 실수형 변수 dd를 선언한뒤 15.14로 초기화 합니다.

 

char ch= 'A';         

문자형 변수 ch를 선언한뒤 대문자 A로 초기화 합니다.(대문자 A를 상자에 집어 넣은겁니다.)

 

앞서 배우셔는데 기억이 나시나요? 문자형 변수는 데이터를 ‘(홋따옴표)로 둘러싸야 하며 문자열은 "(쌍따옴표)를 둘러 싸줘야 합니다. 

 

이는 데이터를 입력하거나 직접 표현할때만 쌍따옴표 또는 홋 따옴표를 사용하는 것입니다.

 

좀더 자세히 설명 드리면

 

char ch= 'A';

 

위 문장을 실행하면  ch 변수에 대문자 A가 들어 가게 됩니다. 이때 이를 출력하기 위해서는

printf("%c", ch); 라고 하면 되는 것이지 ch 변수가 문자형이므로 

printf("%c", ‘ch’); 와 같이 홋따옴표로 ch를 둘러쌀 필요가 없는 것입니다.

 

웃기시나요? 전혀 웃기지 않습니다. 실제로 저렇게 코딩하시는 분들을 많이 바왔으며 나름의 논리대로 홋따옴표를 둘어 싸신겁니다. 웃자고 하는 이야기나 비아냥이 아니라 저렇게 둘러싸시는 응용력과 창의력에 박수를 보내고 싶습니다. 저런분들이 나중에 프로그램 개발하시면 정말로 창의적이고 멋진 프로그램이 나올꺼라 믿습니다.

 

본론으로 돌아와서 자료를 넣은 부분은 분석이 끝났습니다. 그럼 이제 출력문을 분석해보도록 하겠습니다.

 

 

printf("%d \n", a); 

a는 int(정수형) 변수이므로 %d를 사용합니다. 이때 d는 Decimal을 의미하며 정수를 의미한다기 보다는 10진수를 의미합니다.(추후 좀더 보강설명 드리겠습니다.)

 

printf("%f \n", fa); 

printf("%f \n", dd); 

 

단정도 실수형 변수 fa와 배정도 실수형 변수 dd 값을 출력하는 문장입니다. 그런데 printf에서 단정도와 배정도를 다른게 구분하지 않고 %f로 동일하게 사용합니다. 조금 이상하신가요? 네 이상하게 생각하셔야 합니다. 그렇다고 틀린 것은 아니구요. 추후 배우실 scanf에서는 %f와 %lf로 다를것이라는 것 미리 말씀 드립니다. printf에는 %f로 동일하다는 것 꼭 기억하시기 바랍니다.

 

 

 

printf("%c \n", ch);

문자형 변수 ch 값을 출력하는 문장입니다. ch에는 대문자 A가 들어 있으므로 화면에 A라고 출력됩니다.

 

그럼 이제 심화 학습으로 넘어가 보겠습니다.

 

첫번째로

printf("%c \n", a); 

 

앞서 우리는 분명 a라는 공간에 65를 넣었으며 이는 정수입니다. 그렇치만 보시는 바와 같이 a변수 값을 출력할 때 %c 라는 문자 출력형식을 사용하였습니다. 과연 어떤 결과가 나오게 될까요?

 

결과는 화면에 대문자 A가 출력 될것입니다.

 

두 번째로

printf("%d \n", ch); 

 

앞서 우리는 분명 ch라는 변수에 대문자 A를 넣었습니다. 하지만 %d를 사용하여 숫자 형태의 출력형식을 사용하였습니다. 과연 어떤 결과가 출력될까요?

 

결과는 화면에 65라는 숫자가 출력됩니다.

 

자 정리해 보겠습니다.

앞서 a라는 변수에는 65를 집어 넣었는데 출력형식은 문자형인 %c로 하니깐 대문자 A가 나왔으며 ch라는 변수에는 대문자 A를 집어 넣었는데 숫자 출력형식인 %d를 사용하니깐 65가 나왔습니다.

 

여기서 알수 있는 것이 65라는 것과 대문자 ‘A'는 같다는 것을 알수 있습니다. 실제로 컴퓨터는 모든 데이터를 숫자 형태로 저장하며 대문자 ’A'는 숫자 65로 대문자 B는 숫자 66 대문자 C는 67 이런식으로 저장을 하게 됩니다. 이를 ASCII코드라고 부릅니다.

 

다르게 표현하면 컴퓨터는 A, B, C 와 같은 문자형 데이터를 이해하지 못합니다.

 

여러분들이 사용하시는 %d라는 출력 형식은

단지 출력할 때 ASCII코드 표를 참조하여 65번째 있는 문자 그림을 화면에 출력해 달라는 뜻에 불과 하다는 겁니다.

ASCII 코드는 미표준정보교환용 코드(약속)으로 C언어뿐 아니라 거의 모든 언어에서 널리 통용되는 코드입니다.

 

간단히 정리하면 우리가 char 이라고 하는 것은 숫자를 8비트 크기로 나타내는 것으로 총 2의 8승개의 문자 또는 숫자 표현이 가능하며 int 라고 하는 것은 32비트 컴파일러의 경우는 32비트 크기 즉 4byte 크기를 가지며 2의 32승 크기의 숫자까지 표현할수 있으며 64비트 컴파일러의 경우는 2의 64승 크기의 숫자까지 표현 가능한 저장공간을 말합니다.

 

갑작스럽게 많이 어렵겠지만 한가지 더 재미난 사실은

 

int ab;

ab = 'A'+1;

 

위와같이 정수형 변수 ab를 선언한뒤 ab변수에 대문자 A값(65) 더하기 1을 해서 66을 집어 넣을수도 있다는 뜻이기도 합니다.

 

즉,

 

ab = 'A'+1;

 

ab = 65 + 1

 

위 두문장은 완전히 같은 문장이라는 뜻입니다. 비록 C언어와 같은 하드웨어를 직접제용으로 개발된 언어들에 대해서만이지만요.

 

컴퓨터는 문자를 모른다고 했지요? 단지 문자코드 표를 참조해서 출력해줄 뿐이며 역으로 문자 코드 표를 참조해서 문자를 숫자로 바꿀 뿐입니다.

 

점점 미궁으로 빠져 들지요?

 

이부분을 완전히 이해하기 위해서는 컴퓨터에 관한 좀더 많은 이야기가 필요 합니다.

 

위와 같이 컴퓨터가 작동 하는 정확한 이유는 다음장을 통해서 살펴 보겠습니다.



List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 C언어 입문자를 위한 C언어 안내서 : 목차(모든 강의 링크 제공) 좋은아빠되기 2025.11.19 8
공지 C언어 입문자를 위한 C언어 안내서 : 필자의 말 좋은아빠되기 2025.11.19 5
14 무료 공개강좌 문제없다 C언어 강의 교재 다운로드 안내 file 좋은아빠되기 2015.11.22 2507
13 문제없다 C언어 문제 1 좋은아빠되기 2015.11.22 4037
12 문제없다 C언어 문제 2 좋은아빠되기 2015.11.22 1437
11 문제없다 C언어 문제 3 좋은아빠되기 2015.11.22 922
10 문제없다 C언어 문제 4 좋은아빠되기 2015.11.22 757
9 문제없다 C언어 문제 5 좋은아빠되기 2015.11.22 805
8 문제없다 C언어 문제 5-1 좋은아빠되기 2015.11.22 966
7 문제없다 C언어 문제 5-2 좋은아빠되기 2015.11.22 2592
6 1장. C언어와의 만남 : - 처음으로 만드는 C언어 프로그램 좋은아빠되기 2025.11.19 7
5 컴파일러 설치 임시본 좋은아빠되기 2025.11.19 4
4 1장. C언어와의 만남 : - printf는 명령어가 아니고 함수다! 좋은아빠되기 2025.11.20 5
3 C언어를 공부하지전 알아두면 피가 되고 살이 되는 컴퓨터 이야기 1(진법) 1 좋은아빠되기 2025.11.20 4
» 2장. 자료형에 따른 변수 선언 및 대입문과 연산자 : int, float, double, char 좋은아빠되기 2025.11.21 3
1 2장. 자료형에 따른 변수 선언 및 대입문과 연산자 : 2진법과 비트 그리고 바이트 좋은아빠되기 2025.11.21 4
Board Pagination Prev 1 Next
/ 1