본문 바로가기
C언어

C언어 기초 4. 변수와 자료형

by algosketch 2019. 8. 4.
  • 변수와 자료형
  • 정수 자료형
  • 실수 자료형

1) 변수와 자료형

#include <stdio.h>

int main(void)
{
    printf("Hello, World!");
	
    return 0;
}

 

 우리의 첫 번째 코드이다. 이 코드에도 자료형이 숨어있다. int가 바로 자료형이다. 자료형의 역할은 숫자를 다룰 때 C언어에게 이 숫자가 어떤 숫자인지 알려주는 역할을 한다. C언어에서는 정수와 실수로 구분한다. int는 integer에서 세 글자를 따 온 것으로 정수를 나타낸다. 실수를 나타내는 자료형은 double이다. (double floating point에서 따온 것 같다.)

 이전에 printf()함수를 공부하면서 %d를 이용해 다룬 숫자를 일회용으로 사용한 숫자이다. 숫자를 일회용으로 사용할 것이 아니라면 변수라는 형태로 저장할 수 있다. 즉, 변수는 숫자를 저장해놓은 것이다. 저장을 했기 때문에 당연히 메모리 공간을 차지하게 된다.

 새로운 변수를 만드는 것을 "변수를 선언한다"고 하고 변수에 값을 대입하는 것을 "변수를 초기화한다"고 한다. 변수를 만들기 위해선 어떠한 숫자를 저장할 것인지 지정해줘야 한다. 숫자에 대한 정보로써 자료형을 적어 준다. 변수에 정수를 저장하고 싶다면 int로 선언하면 되는 것이다. 그리고 변수의 이름을 정해줘야 한다. 한 번 변수를 초기화한 이후에는 변수 이름으로 접근할 수 있다. 다음 예제 코드를 보자.

#include <stdio.h>

int main(void)
{
    int num = 5;
    int newNum;
    newNum = 10;
    printf("%d행 %d열\n", num, newNum);
	
    return 0;
}
output
5행 10열

 

 처음에 num이라는 이름의 변수를 선언하면서 동시에 5로 초기화해주고 있다. newNum이라는 변수는 선언 후 10이라는 숫자로 초기화 해줬다. 이처럼 변수의 선언과 초기화는 동시에 해도 되고 분리하는 것도 가능하다. 변수는 변수라는 이름에 맞게 저장된 숫자를 얼마든지 변경할 수 있다.

 그리고 자료형에는 한 가지 정보가 더 담겨 있는데, 그것은 숫자의 범위이다. 이는 메모리 공간을 효율적으로 사용하기 위해 자료형을 나누어 놓은 것이다. 당연히 숫자의 범위가 좁을수록 메모리를 적게 차지하고 숫자의 범위가 넓을수록 차지하는 메모리 크기가 크다.

 

2) 정수 자료형

자료형 서식문자 메모리 크기 숫자 범위
char %c 1 byte -128 ~ 127
byte %d 1 byte -128 ~ 127
short %d 2 byte -32768 ~ 32767
int %d 4 byte -2147483648 ~ 2147483647
long (int) %ld 4 byte -2147483648 ~ 2147483647
long long %ll 8 byte -9223372036854775808 ~ 9223372036854775807
long long int %lld 8 byte -9223372036854775808 ~ 9223372036854775807

 0을 표현하기 위해 음수의 범위가 1 넓다. 정수 자료형에 unsigned를 붙이면 음수를 표현할 수 없고 그만큼 양수의 표현 범위가 늘어난다. 1 byte = 1 bit 이고 bit는 메모리의 가장 작은 표현 단위로 0과 1만 표현할 수 있다.

 

3) 실수 자료형

자료형 서식문자 메모리 크기 정밀도
float %f 4 byte 6자리
double %lf 8 byte 15자리

 실수 자료형의 숫자 표현 범위는 매우 넓다. 그 대신 정밀도라는 개념을 기억하자. 1.0005와 같은 숫자는 float형으로 나타낼 수 있다. 하지만 1.0000000005와 같은 숫자를 저장하면 1.0이 저장된다. 정밀도는 얼마나 정밀하게 표현할 수 있는지 나타낸다. 대신에 0.00000000005는 나타낼 수 있다. 하나의 숫자에서 가장 큰 자리수와 가장 작은 자리수의 차이가 6이상 벌어지면 작은 자리수의 숫자를 잘라버린다.

 많은 자료형이 있다. 가장 흔히 사용하는 정수 자료형은 int형이고 실수 자료형은 double이다. 프로그램을 짜면서 적절한 자료형을 선택하는 기준은 무엇일까? 본인은 다음과 같이 선택한다. 실수 자료형은 무조건 double, 정수 자료형은 숫자의 범위가 10억 단위가 넘어가는가? long long. 아니라면 int. 저장하려는 변수의 정보가 문자 혹은 문자열이라면 char를 사용한다. char는 숫자도 표현할 수 있지만 기본적으로 문자를 저장하라고 만든 자료형이기 때문에 이 자료형을 사용했다면 코드 작성자가 문자를 다룰 것이라고 예상할 수 있다. 그런데 char에 단순히 숫자를 저장하기 위한 용도로 사용했다면 예상과 다른 코드를 만나게 되므로 가독성이 떨어진다. 좋은 코드를 짜는 팁을 주자면 읽기 쉬운 코드를 작성하는 것이다. 코드의 가독성도 실력이다. (char자료형은 character에서 나왔다.)

 추가로 자료형 앞에 const(constant)를 붙이면 그 변수에 저장된 값은 바꾸지 못 한다.

const int num = 5;

 이런 변수를 상수라고 한다. 필요하지 않지만 필요한 존재이다. 프로그램이 돌아가는 중에는 필요하지 않지만 값을 바꾸면 안 되는 변수를 바꿔버리는 실수를 방지하기 위해 사용하며 코드의 안정성을 높여준다.

 

2019.09.28. 내용추가

 만약 int와 같은 정수 자료형에 2.3과 같은 실수를 대입하면 어떻게 될까? 컴파일 에러는 발생하지 않지만 컴파일시 경고문 한 줄이 뜰 것이다. 데이터가 소실될 수 있다는 내용의 경고이다. 실수를 정수 자료형으로 선언된 변수에 대입하면 소수점 이하의 수는 버려진다. a = 2.3이든 a = 2.99 이든 a에는 소수점을 버린 값 2가 저장된다.