Programming/C Basic

2. C Programming - 자료형과 변수

양디 2016. 1. 7. 15:17


이미지 출처 : http://www.pskills.org/c.jsp

자료형 ? Data Type?

C 언어를 시작하기 위해 가장 먼저 알아야 할 것은 바로 자료형 입니다.

우리가 표현하는 모든 것은 데이터라고 할 수 있습니다. 사람의 이름, 나이, 사는곳 .........

생각해 보면 사실 우리가 표현하는것은 종류가 한정되어 있다는 것을 알 수 있습니다.

바로 숫자 문자입니다.


이것을 컴퓨터가 이해할 수 있도록 만드는게 바로 자료형입니다.


흔이 알려진 상식으로, '컴퓨터는 1과 0밖에 모른다' 라는 것이 있습니다.

즉 컴퓨터는 2진수를 사용한다는 것이죠.


2진수를 배워보셨다면 아시겠지만, 예를들어 15는 2진수로 1111 으로 표현됩니다.

10을 2진수로 표현하면 1010 이 되겠지요.


이런식으로 2진수는 각 자리수마다 0 또는 1 만 들어갈 수 있습니다.

이런 자리수를 컴퓨터에서는 비트(bit)라고 표현합니다.


그리고 8개의 bit가 모이면 1 byte가 됩니다. 아래 소개할 자료형의 크기는 byte를 단위로 합니다.


위의 내용에 이어서, 사람이 표시하는 숫자와 문자를 컴퓨터는 조금 더 세분화 시켜서 알려주어야 합니다.

그렇게 해서 나누어진 것이 Void , 정수 , 실수 , 문자 입니다.


  • Void
void는 영어 단어로, 공허한, 아무것도 없는, 빈 공간 등의 의미를 갖고 있습니다.
컴퓨터가 표현하는 0은 void가 아닙니다. void 아무것도 없는 상태, 0도 1도 아닌 상태를 의미합니다.
void는 다음과 같은 상황에서 사용합니다.
  1. 함수의 return 값이 없을 때, 혹은 parameter가 없을 때
  2. void 포인터
위의 내용들은 모두 아직은 설명하기가 이르므로 나중에 함수 선언 부분과 포인터 부분에서 설명하도록 하겠습니다.
  • 정수형
정수는 말그대로 정수를 표현하고 저장하기 위한 자료형입니다.

자료

Byte

범위

char

1

 

short

2

 

long

4

 

int

OS / 컴파일러에 따라 다름 

 OS / 컴파일러에 따라 다름

 long long

8

 


숫자의 범위의 경우에는 Byte를 bit로 바꾼 후, 2의 bit 제곱만큼의 갯수를 숫자로 표현할 수 있습니다.

예를 들어 char은 1byte인데, 이는 8bit 에 해당하므로 2의 8승, 즉 256개의 숫자를 표현할 수 있습니다.

이는 0을 기준으로 -128 ~ 127 까지인데, 128까지가 아닌 이유는 가운데에 이 있기 때문입니다. 

음수가 필요 없다면 자료형의 앞에 unsigned 를 붙이면 0부터 해당 갯수 만큼의 숫자를 표현하게 됩니다. 

unsigned char 의 경우는 256개의 숫자를 표현하므로, 0 ~ 255 의 숫자를 입력할 수 있는 것이지요.

특별하게도 int의 경우에는 OS 의 bit 수나 컴파일러에 따라서 2바이트 혹은 4바이트로 설정됩니다.

  • 실수형
실수는 우리가 흔히 말하는 소수점자리를 포함한 숫자입니다.

 자료형

Byte

범위

확도

float

4

 1.2E-38 ~ 3.4E+38

소수점이하 6자리

double

8

 2.3E-308 ~ 1.7E+308

소수점이하 15자리

 long double

10

 3.4E-4932 ~ 1.1E4932

소수점이하 19자리


컴퓨터는 사실 실수를 표시하기에 좋은 기계는 아닙니다.

0과 1만을 가지고 소수를 저장하기에는 문제가 생깁니다.

따라서 실수를 저장하게되면 정확도가 떨어지게 됩니다.


예를들어 float 자료형에 1.01이라는 숫자를 저장하게 되면, 이 숫자는 정확하게 1.01이 되지 않습니다.

  • 문자형
문자형은 우리가 쓰는 문자를 뜻합니다.
컴퓨터는 0과 1의 숫자밖에 사용할 수 없으므로 이를 위해 아스키코드라는 것이 나왔습니다.


위의 10진수 숫자를 문자와 묶는 것입니다.
예를 들어 T는 10진수 84에 묶여 있습니다.
char 변수에 숫자 84를 집어 넣는다면, 이를 문자로 출력하면 T가 나오게 되는것입니다.

문자형은 char 형을 사용합니다.
지금은 char에 문자 하나만 넣어서 사용할 수 있습니다. 나중에 배열을 배우게 되면 우리가 사용하는 문장 등을 사용할 수 있게 됩니다.


* 위의 자료형들은 기본형이고, 나중에 기본형을 응용해서 사용하는 유도형 도 나오게 됩니다.

변수


우리가 프로그램을 만들게 되면, 다양한 숫자나 문자 등을 저장해서 사용해야 합니다.

이러한 숫자를 저장하는 곳이 바로 변수입니다.

변수는 할 수 있는 라고 생각하시면 편합니다.


변수 선언

1
2
int intVar;
float floatVar;
cs


변수를 사용하기 위해서는 위와 같이 선언해주어야 합니다.

참고로 코드의 한줄이 끝났다는것을 표시하기 위해 항상 세미콜론( ; )을 끝에 붙여주어야 합니다.


위의 경우에는 intVar라는 정수형 하나와 floatVar라는 실수형 변수를 하나씩 선언했습니다.


위에서 볼 수 있듯이 변수를 선언하기 위해서는

<자료형> <변수명>;

의 형식으로 변수를 선언하게 됩니다. 선언하게 되면 변수명을 이용해서 값에 접근할 수 있습니다.


변수명을 정하는 것도 아주 중요한 부분입니다.

변수명을 정할 때에 몇가지 제한사항이 있습니다.

  • 변수는 숫자로 시작할 수 없다. (int 5val 같은 것은 불가능!)
  • 변수는 대문자와 소문자를 구분하여야 한다. (int ivar와 iVar은 다르다!)
  • 언더바 (_)를 제외한 특수문자는 들어갈 수 없다. (int my$dollor 같은건 불가능)
  • C 언어의 키워드를 변수명으로 지정할 수 없다.(키워드는 int, float 등 기존에 사용하기 위해 정의되 있는 용어들. int int 같은건 불가능)
  • 변수명 길이의 제한은 없다.(아무리 길어도 상관 없음. 아무리 짧아도 상관 없음.)
위의 내용들은 반드시 지켜야 할 사항이고, 제한사항을 지키면서 변수명을 선언할 때에 고려하여야 할 부분들이 있습니다.
변수명을 깔끔하고 알아보기 쉽게 선언하여야 유지 보수하는데에 편합니다.
몇가지 팁들을 알아봅시다.
  • 변수의 자료형을 표현해 주는것은 도움이 된다.
    ex) int iValue, float fValue 등...
  • 변수명은 그 자체로 변수가 어떻게 사용될지에 대한 간단한 설명이 되어야 한다.
    ex) int count, int age ...
  • 그러나 너무 긴 설명이 되면 곤란하다.
    ex) int thisistheageofmyfirstgirlfriend ..... (당황)
  • 코딩에서 자주 쓰는 단어는 약어로 표시하는것을 고려해보자.
    ex) int count -> int cnt, int index -> int idx , int variable -> int var 등.. 필수는 아님.
  • Camel Case를 활용하자. 낙타 등처럼 생긴 변수명이다.
    2개 이상의 단어가 들어갈 때에, 단어와 단어의 구분을 위하여 각자의 단어 첫글자는 대문자로 사용한다.
    ex) personname -> personName ...
이것들은 필수는 아니지만, 훨씬 깔끔한 코딩을 만드는 데 큰 도움을 줍니다.
또한 Refactoring 등에 있어서 편리함을 주므로 습관을 들여두는것이 좋습니다.



1
2
int intVar;
intVar = 5;
cs


위와 같은 식으로 변수에 값을 집어넣을 수 있게 됩니다. 

변수를 선언하고 변수에 값을 집어 넣는 것을 변수 초기화 라고 합니다.

초기화를 하지 않고 변수에 접근하게 되면 바로 에러가 뜹니다.

따라서 이를 막고자 변수를 선언하면서 초기화 하는 방식도 사용하곤 합니다.


1
int intVar = 5;
cs


똑같이 intVar에는 5가 들어가 있습니다.


그럼 이 변수를 한번 출력해 보겠습니다.


1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
void main() {
 
    int intVar = 5;
 
    printf("int Value is.. %d \n", intVar);
 
}
cs


위의 printf 함수는 콘솔 창에 내용을 출력시켜주는 역할을 합니다.

중간에 보면 %d라는 표시가 있는데, 이것은 정수를 뜻합니다. 다음 포스팅때 I/O에 대해 다룰때 더 자세히 다루겠습니다.

7번째 줄의 내용을 보면, %d의 위치에 intVar의 정수를 집어 넣어서 출력해라 ! 라는 뜻이 됩니다.


위와 같이 Visual Studio에 입력하고 Ctrl + F5로 실행해 봅시다.



그래서 위와 같이 intVar에 저장되어있는 5를 출력하는 것을 볼 수 있습니다.

<직접 해보세요!>


변수는 언제든지 바꿀 수 있습니다.

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
void main() {
 
    int intVar = 5;
 
    printf("int Value is.. %d \n", intVar);
    intVar = 10;
    printf("changed value is.. %d \n", intVar);
}
cs


8번째 줄이 변수의 값을 바꾸는 코드입니다.

변수의 값을 바꾸기 위해서는 등호 (=) 를 사용합니다.


<변수명> = <바꿀 값>


으로 사용합니다. 8번째를 보면, intVar라는 변수의 값을 10으로 바꾸어라! 라는 의미가 되겠죠.

직접 실행해서 어떻게 되나 확인해보세요 !


출력할 때에 정수는 %d, 실수는 %f, 문자는 %c 를 사용해서 출력할 수 있습니다.

다양한 자료형을 변수로 만들어서 사용해 봅시다.



지역변수와 전역변수


변수는 사용되는 범위에 따라 지역 변수와 전역 변수로 나뉩니다.


전역 변수는 프로그램 전체에서 사용되는 변수이고,


지역 변수는 프로그램 내부의 일정 지역에서만 사용되는 변수입니다.


코딩을 할 때에 지역이란 것은 중괄호 { } 내부를 한 지역이라고 표시합니다.


지역 변수는 선언되어지고 , 지역이 종료되면 사라집니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void main() {
 
    int localVar = 5;
 
    printf("local Value is.. %d \n", localVar);
    {
        int localVar = 10;
        printf("inside local value is.. %d \n", localVar);
    }
    printf("local Value is.. %d \n", localVar);
 
}
cs


이렇게 한번 코딩을 해봅시다.


똑같은 이름의 변수가 2개가 있지만, 이 경우에는 지역이 다르기 때문에 변수명이 같다고 해서 문제가 되지 않습니다.


같은 이름의 변수를 사용할 경우에, 가장 자신의 지역에 가까운 변수를 사용하게 됩니다.


똑같은 localVar에 5를 넣고, 안의 지역에 10을 넣고 지역이 종료되면 어떻게되는지 실행해봅시다.



왜 이렇게 되었을지 한번 생각해 봅시다.


전역변수는 프로그램이 실행되면 선언되고, 종료하면 사라집니다.

따라서 지역 외의 공간에 선언이 되어야합니다.


코딩을 할때에 지역 {}의 바깥 공간은 딱 한 공간밖에 없습니다. 위의 main 위쪽 부분이죠.


저 부분에 변수를 선언해두면 프로그램 내부 어느곳에서든 변수를 사용할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int globalVar = 7;
 
void main() {
 
    int localVar = 5;
 
    printf("local Value is.. %d \n", localVar);
    printf("global Value is.. %d \n", globalVar);
    {
        int localVar = 10;
        printf("inside local value is.. %d \n", localVar);
        printf("inside global Value is.. %d \n", globalVar);
    }
    printf("local Value is.. %d \n", localVar);
 
}
cs


위 코드의 3번째 줄이 전역변수 선언입니다.

어떤 지역에서든지 사용할 수 있습니다.


실행해보면 다음과 같은 결과가 나옵니다.



전역변수는 시작부터 프로그램이 종료할때까지 메모리를 소모하기 때문에, 필요한 경우에만 사용하는 것이 효과적입니다.

상수


변수와 반대되는 개념이 상수입니다.

변수가 변할수 있는 수였다면

상수는 항 변하지 않는 수 라고 기억해 둡시다.


상수에는 두가지 종류가 있습니다.


Literal 과 Symbolic 의 두가지 상수입니다.


Literal 은 선언되지 않은 그 자체의 자료입니다.


예를 들어 숫자 10은 상수입니다. 10에다가 15를 저장할 수는 없습니다.


10 = 15 이런것이 불가능하다는 것이지요.


반면에 Symbolic은 개발자가 정의한 상수입니다.


const라는 키워드를 사용하여 정의할 수 있습니다.


1
const int CONST_VAR = 10;
cs


위의 내용처럼 자료형 앞에 const를 붙이면 상수를 선언할 수 있습니다.

보통 상수는 변수처럼 사용하지 않기 때문에 구분하기 위하여 전체를 대문자로 쓰고, 단어와 단어는 언더바로 구분합니다.


위의 내용처럼 선언을 했다면, 아래에서 CONST_VAR = 5; 와 같은 식으로 값을 변경하려고 하면 에러가 떠버리게 됩니다.


오늘 내용은 여기까지입니다.



Point !

자료형의 종류 : Void, 정수형, 실수형, 문자형 (+유도형)

변수 선언과 초기화

지역 변수와 전역 변수

상수의 두가지 종류 : Literal, Symbolic



오늘의 과제


정수형 변수 3개 a, b, c를 선언하고

a에는 5, b에는 10을 집어 넣는다.


c에는 a와 b를 더한 값을 집어 넣도록 코드로 작성하여 넣고


printf와 %d를 이용하여

a의 값 + b의 값 = c의 값 이라는 결과물이 출력되도록 하라.




위와 같은 화면이 나온다면 성공.




댓글