안녕하세요, 이번 포스팅에서는 변수를 선언하는 방법과 자료형에 대해서 알아보도록 하겠습니다.
추가로 뒷부분에서는 서식문자에 대한 부분도 다루어 보도록 하겠습니다.
| 지난 강좌 Review
지난 강좌 보기: 2020/10/02 - [C언어 강좌] - [C언어_01] Hello, world! & 기본 입출력
지난 강좌에서는 개발 환경을 만들고, 만들어진 개발 환경이 잘 동작하는지 확인하기 위해 Hello, World!라는 문자열을 출력해 보았었죠? 또 뒷부분에서는 기본적인 입력, 출력에 대해서도 배워보았습니다.
하지만 여러분은 printf, scanf에 대한 예제 코드에서 많은 의문이 생기셨을 것 같은데요,
그것은 아직 여러분이 자료형(data type)이나 변수(variable)에 대한 개념이 없어서 그렇습니다.
그래서 관련 내용을 다룬 뒤 해당 내용을 다시 살펴보는 시간도 갖도록 하겠습니다.
| 변수(Variable)란?
변수란 데이터(data)를 저장할 수 있는 메모리 공간을 의미합니다.
라고 정제된 표현으로 쓸 수 있겠지만, 당장의 이해를 위해 쉽게 표현하면,
컴퓨터 메모리 공간에 값(value)을 저장할 수 있는 '방'을 만든다고 생각하시면 됩니다.
이 변수라는 방에 들어있는 값은 특별한 옵션이 없다면 임의로 변경할 수 있는 것이죠.
이 말 그대로 해석해서 "변화하는 수" 라서 "변수"다! 라고 이해하셔도 일단은 무방합니다.
| 변수를 선언하는 방법
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; -> 문자가 들어갈 수 있는 방
이렇듯 자료형이 바뀌면 해당 변수의 속성이 바뀐다고 생각하시면 됩니다.
다음은 자료형의 상세한 정보입니다. 이런 것이 있구나 하고 훑어보시고 나중에 상세한 공부가 필요하실 때 다시 찾아보시는 것을 추천드립니다.
자료형 | 크기(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를 사용해서 표현해 주어야 하겠죠?
지금까지 변수를 선언하는 방법과 자료형, 그리고 서식문자까지 자세한 내용을 알아보았습니다.
피드백 사항이나 질문이 있으시다면 댓글 달아주시고, 공감도 한 번씩 눌러주시면 감사하겠습니다.
'C언어 강좌' 카테고리의 다른 글
[C언어_06] C언어 문제 풀이 #2 (0) | 2020.10.14 |
---|---|
[C언어_05] 다양한 조건문 (if, if...else, if...else if...else, switch) (0) | 2020.10.11 |
[C언어_04] C언어의 다양한 연산자 & 참, 거짓 (0) | 2020.10.09 |
[C언어_03] C언어 문제 풀이 #1 (0) | 2020.10.05 |
[C언어_01] Hello, world! & 기본 입출력 (0) | 2020.10.02 |