본문 바로가기

C언어 강좌

[C언어_02] 변수의 선언과 자료형 & 서식문자

 

안녕하세요, 이번 포스팅에서는 변수를 선언하는 방법과 자료형에 대해서 알아보도록 하겠습니다.

추가로 뒷부분에서는 서식문자에 대한 부분도 다루어 보도록 하겠습니다.


 

지난 강좌 Review

지난 강좌 보기: 2020/10/02 - [C언어 강좌] - [C언어_01] Hello, world! & 기본 입출력

 

[C언어_01] Hello, world! & 기본 입출력

| C언어란? 1972년 켄 톰슨과 데니스 리치가 벨 연구소에서 일 할 당시 유닉스 운영체제를 만들기 위해 고안한 프로그래밍 언어이다. 많은 프로그래밍 언어에 기반이 되는 언어이며, 절차적 프로��

swdoodle.tistory.com

지난 강좌에서는 개발 환경을 만들고, 만들어진 개발 환경이 잘 동작하는지 확인하기 위해 Hello, World!라는 문자열을 출력해 보았었죠? 또 뒷부분에서는 기본적인 입력, 출력에 대해서도 배워보았습니다.

 

하지만 여러분은 printf, scanf에 대한 예제 코드에서 많은 의문이 생기셨을 것 같은데요,

그것은 아직 여러분이 자료형(data type)이나 변수(variable)에 대한 개념이 없어서 그렇습니다.

그래서 관련 내용을 다룬 뒤 해당 내용을 다시 살펴보는 시간도 갖도록 하겠습니다.


| 변수(Variable)란?

변수데이터(data)를 저장할 수 있는 메모리 공간을 의미합니다.

라고 정제된 표현으로 쓸 수 있겠지만, 당장의 이해를 위해 쉽게 표현하면,

컴퓨터 메모리 공간에 값(value)을 저장할 수 있는 '방'을 만든다고 생각하시면 됩니다.

이 변수라는 방에 들어있는 값은 특별한 옵션이 없다면 임의로 변경할 수 있는 것이죠.

이 말 그대로 해석해서 "변화하는 수" 라서 "변수"다! 라고 이해하셔도 일단은 무방합니다.

blogpost2_variable

 

 

변수를 선언하는 방법

int number;

그렇다면 변수를 한번 선언해 볼까요?

변수를 선언하는 형식은 위와 같습니다. 조금더 일반화해서 쉽게 표현하면,

(해당 변수의 자료형) (변수의 이름);

이렇게 나타낼 수 있습니다.

int가 자료형이고, number가 변수의 이름인 것이죠.

즉, int 뿐만 아니라 다른 자료형도 쓸 수 있다는 이야기입니다.

변수의 이름 또한 사용자가 마음대로 지정할 수 있지만, 지켜야 하는 몇 가지 규칙들이 있습니다.

변수 이름짓기 규칙

1. 변수의 이름은 알파벳, 숫자, 언더바(_)로만 구성해야 합니다.
2. 대소문자를 구분합니다. (number과 Number은 다른 변수입니다.)
3. 변수 이름의 첫글자는 숫자로 시작할 수 없습니다.
4. 변수 이름에 공백을 포함할 수 없습니다.
5. 예약어(키워드)를 사용할 수 없습니다. (int, main 등)


도현, 「자료형과 변수/변수와 연산/변수 이름 규칙」, 『C언어 초급(국제공부연맹)』, 2015.3.30, wikidocs.net/2145, 2020.10.3.

이러한 규칙에 따르면 "student name", "1number", "variable!@#"와 같은 변수 이름은 잘못된 것이겠죠.

"student name"처럼 단어 사이의 의미를 구분해 주어야 하는 경우에는 공백 대신 언더바(_)를 사용합니다.

"student_name"이라고 바꾸면 올바른 변수명이 되겠네요.

 

| 변수의 초기화(initialization)

변수를 초기화 한다는 것은 변수 안에 초기 값을 할당해 준다는 의미입니다.

int number; 처럼 변수를 선언만 하고 초기화를 해주지 않으면, 그 방 안에는 "쓰레기 값(garbage value)"이라는 무의미한 값이 할당되어 후에 문제를 야기할 수 있습니다. 따라서 초기화라는 과정은 매우 중요합니다.

 

초기화를 하는 방법은 간단한데요,

int number;
number = 10;

위와 같이 변수를 선언한 뒤, 대입 연산자 '='을 이용해서 값을 할당해 주시면 됩니다.

위의 코드가 실행된다면 number라는 이름의 변수에는 10이라는 값이 저장이 되겠죠.

int number = 10;

또는 위와 같이 변수를 선언함과 동시에 초기화 해주는 것도 가능하니 참고해 주세요.

 

대입 연산자

한편, 대입 연산자 '='는 여러분이 생각하시는 수학에서의 등호 '='와 전혀 다른 연산자입니다.

수학에서는 단순히 "같다"라는 의미이지만, 프로그래밍에서는 "우측에 있는 피연산자를 좌측에 있는 피연산자에 할당하는"의미의 이항 연산자입니다. 따라서 앞서 살펴보았던 number = 10; 이라는 구문을 이해하실 때

 

"number라는 변수와 10이라는 값이 같아진다."라고 이해하시기 보다는

"number(좌측 피연산자)에 10이라는 값(우측 피연산자)이 할당된다."라고 이해하는 것이 바람직합니다.

 

 

| 변수의 자료형(data type)

다음은 변수의 자료형에 대해서 알아보겠습니다.

앞선 코드에서 아주 많이 등장했던 int 라는 녀석은 사실 integer(정수)의 약자입니다.

즉, int number; 로 만들었던 변수 공간에 정수값만 들어갈 수 있도록 명시적으로 제한해 주는 역할인 것이죠.

그리고 당연히, int 대신 다른 자료형도 올 수 있습니다. 다른 자료형에는 float, double, char 등이 있습니다.

 

int number; -> 정수가 들어갈 수 있는 방

float number; -> 실수가 들어갈 수 있는 방

char number; -> 문자가 들어갈 수 있는 방

 

이렇듯 자료형이 바뀌면 해당 변수의 속성이 바뀐다고 생각하시면 됩니다.

blogpost_datatypes

다음은 자료형의 상세한 정보입니다. 이런 것이 있구나 하고 훑어보시고 나중에 상세한 공부가 필요하실 때 다시 찾아보시는 것을 추천드립니다.

 

자료형 크기(Byte) 범위(Range)
정수형 부호있는 short 2 -32,768 ~ 32,767
int 4 -2,147,483,648 ~ 2,147,483,647
long 4 -2,147,483,648 ~ 2,147,483,647
부호없는 unsigned short 2 0 ~ 65,535
unsigned int 4 0 ~ 4,294,967,295
unsigned long 4 0 ~ 4,294,967,295
문자형 부호있는 char 1 -128 ~ 127
부호없는 unsigned char 1 0 ~ 255
부동소수점형 float 4 -3.4*10^38 ~ 3.4*10^38
double 8 -1.79*10^308 ~ 1.79*10^308

 

| 서식문자(번외)

#include<stdio.h>
void main()
{
    int number1 = 10;
    int number2;
    number2 = 20;
	
    printf("number1의 값은 %d 입니다.\n", number1);
    printf("number2의 값은 %d 입니다.\n", number2);
}
실행결과:
number1의 값은 10 입니다.
number2의 값은 20 입니다.

위의 코드를 보고 규칙을 찾으셨나요?

바로 문자열의 "%d"가 있는 자리에 변수의 값이 들어간다는 점입니다. 이러한 역할을 하는 특수 기호를 "서식문자"라고 합니다. 서식문자의 종류도 방금 전에 배웠던 자료형(data type)과 같이 다양하고, 사용할 때도 꼭 해당 자료형에 맞는 서식문자를 사용해야 합니다. 다음은 서식문자의 종류와 그에 대응되는 자료형입니다.

 

int --> %d

float --> %f

double --> %lf

char --> %c

 

이보다 더 많은 자료형과 서식문자가 존재하지만, 우선은 이 정도로만 다루도록 하겠습니다.

여튼 위의 코드에서 %d를 사용한 이유도 변수 number1과 number2 가 integer형이어서 그런 것이고, 만약 이것들이 float이나 double형 변수라면 각각 %f, %lf를 사용해서 표현해 주어야 하겠죠?

 


 

지금까지 변수를 선언하는 방법과 자료형, 그리고 서식문자까지 자세한 내용을 알아보았습니다.

피드백 사항이나 질문이 있으시다면 댓글 달아주시고, 공감도 한 번씩 눌러주시면 감사하겠습니다.