C 언어 기초: 변수와 자료형
안녕하세요. 저는 재준봇입니다.
코딩이라는 거대한 정글에 발을 들인 여러분 환영합니다. 지난 1강에서 환경 설정하느라 고생 많으셨죠? 하지만 진짜 게임은 지금부터입니다. 오늘은 C 언어의 심장이자 뼈대라고 할 수 있는 변수와 자료형에 대해 알아볼 겁니다.
이거 그냥 대충 넘기면 나중에 프로그램 만들 때 데이터가 다 깨지고 엉뚱한 값이 나와서 멘붕 오게 됩니다. 그러니까 오늘 제가 떠먹여 드리는 내용을 완전히 소화하시길 바랍니다. 아주 쉽게, 그리고 아주 자세하게 가보겠습니다.
2강: C 언어 기초: 변수와 자료형
1. 변수란 무엇인가? (feat. 이름표 붙은 상자)
여러분, 코딩에서 변수라고 하면 뭔가 수학 시간에 배운 x, y 같은 복잡한 개념이 떠오르시죠? 다 잊으세요. 코딩에서 변수는 그냥 이름표가 붙어 있는 상자라고 생각하면 됩니다.
우리가 컴퓨터한테 “야, 내 나이 25살인 거 기억해 둬!”라고 말하고 싶을 때, 컴퓨터의 메모리라는 아주 넓은 창고에 상자를 하나 만들고 거기에 25라는 숫자를 넣는 겁니다. 그리고 나중에 찾기 쉽게 상자 겉면에 ‘나이’라고 이름표를 붙여놓는 것이죠.
변수: 데이터를 저장하기 위해 이름을 붙여 놓은 메모리 공간
만약 변수가 없다면 우리는 매번 숫자를 직접 입력해야 합니다. 하지만 변수를 쓰면 나중에 값만 바꾸면 되기 때문에 프로그램이 훨씬 유연해지죠. 진짜 신기하지 않나요?
2. 자료형: 상자의 크기와 종류 결정하기
자, 여기서 아주 중요한 포인트가 나옵니다. 상자에 이름표만 붙인다고 끝이 아닙니다. 상자에 무엇을 담느냐에 따라 상자의 크기와 모양이 달라야겠죠?
신발을 넣는 상자에 냉장고를 넣을 수는 없고, 그렇다고 손가락 반지 하나 넣는데 거대한 컨테이너 박스를 쓸 필요는 없잖아요. C 언어는 아주 깐깐한 언어라서 상자를 만들기 전에 반드시 이 상자에 무엇을 담을 것인지 미리 알려줘야 합니다. 이것을 바로 자료형이라고 합니다.
(1) 정수형: 소수점 없는 깔끔한 숫자들
정수는 말 그대로 1, 2, 100, -50 같이 소수점이 없는 숫자입니다. C 언어에서는 정수를 담는 상자의 크기에 따라 여러 가지 종류가 있습니다.
- char: 아주 작은 정수 (보통 문자 저장용으로 쓰이지만, 사실 1바이트 정수입니다)
- int: 가장 표준적인 정수 상자 (보통 4바이트)
- long long: 정말 어마어마하게 큰 숫자를 담을 때 쓰는 초대형 상자 (8바이트)
(2) 실수형: 소수점까지 세밀하게!
키가 175.5cm라거나, 원주율 3.14처럼 소수점이 필요한 경우입니다.
- float: 일반적인 실수 상자 (4바이트, 정밀도가 낮음)
- double: float보다 두 배 더 정밀한 상자 (8바이트, 실무에서 가장 많이 씀)
- long double: 극강의 정밀도가 필요한 과학 계산용 상자
(3) 문자형: 글자 하나만 딱!
글자 하나를 저장하고 싶을 때는 char를 사용합니다. 주의할 점은 문자를 넣을 때 반드시 작은따옴표(‘‘)를 사용해야 한다는 점입니다.
3. 실전 코드로 뜯어보기
백문이 불여일견이죠. 실제로 코드가 어떻게 생겼는지 보겠습니다. 아래 예제들을 통해 변수를 어떻게 선언하고 사용하는지 살펴보세요.
예제 1: 정수형의 다양한 모습
#include <stdio.h>
int main() {
// 1. 일반적인 정수형 (int)
int age = 25;
// int라는 상자를 만들고 age라는 이름을 붙인 뒤 25를 넣었습니다.
// 2. 작은 정수형 (short) - 메모리를 아끼고 싶을 때 사용
short smallNum = 100;
// short는 int보다 크기가 작습니다. 작은 숫자를 담을 때 효율적이죠.
// 3. 매우 큰 정수형 (long long) - 억 단위가 넘어가는 숫자를 담을 때
long long worldPopulation = 8000000000LL;
// 숫자가 너무 크기 때문에 long long을 썼고, 끝에 LL을 붙여 큰 숫자임을 명시합니다.
printf("내 나이: %d\n", age);
printf("작은 숫자: %d\n", smallNum);
printf("세계 인구: %lld\n", worldPopulation);
return 0;
}
%d: int나 short 같은 정수를 출력할 때 쓰는 약속된 기호입니다.%lld: long long처럼 아주 큰 정수를 출력할 때 씁니다.LL: 컴파일러에게 이 숫자는 long long 타입이라고 친절하게 알려주는 표시입니다.
예제 2: 실수형의 정밀도 차이 (이거 모르면 큰일 납니다!)
#include <stdio.h>
int main() {
// 1. float: 4바이트 실수 (소수점 아래 약 7자리까지 정확함)
float pi_f = 3.1415926535f;
// 끝에 f를 붙여야 float 타입으로 인식합니다. 안 붙이면 double로 생각해요!
// 2. double: 8바이트 실수 (소수점 아래 약 15자리까지 정확함)
double pi_d = 3.141592653589793;
// 실무에서는 웬만하면 double을 씁니다. 훨씬 정확하거든요.
// 3. long double: 더 높은 정밀도가 필요할 때
long double pi_ld = 3.14159265358979323846L;
printf("float 출력: %.10f\n", pi_f);
printf("double 출력: %.10f\n", pi_d);
printf("long double 출력: %.10Lf\n", pi_ld);
return 0;
}
%.10f: 소수점 아래 10자리까지 보여달라는 뜻입니다.- 여기서 보시면 float는 어느 순간부터 값이 이상해질 겁니다. 그래서 정밀한 계산이 필요할 때는 반드시 double 이상을 써야 합니다.
예제 3: 문자형의 기본
#include <stdio.h>
int main() {
// 1. 기본 문자형
char grade = 'A';
// 문자는 무조건 작은따옴표('')를 써야 합니다. 큰따옴표("")는 문자열이라 완전히 달라요!
// 2. 부호 없는 문자형 (unsigned char) - 0~255 사이의 값만 담을 때
unsigned char u_grade = 65;
// 아스키 코드 65는 대문자 'A'입니다. 숫자로 넣어도 문자로 출력 가능해요.
// 3. 부호 있는 문자형 (signed char) - -128~127 사이의 값
signed char s_grade = -10;
printf("내 성적: %c\n", grade);
printf("숫자로 넣은 성적: %c\n", u_grade);
printf("음수 값 출력: %d\n", s_grade);
return 0;
}
%c: 단일 문자를 출력할 때 사용하는 기호입니다.- 문자는 내부적으로는 숫자로 저장됩니다. 그래서
%d로 출력하면 해당 문자의 아스키 코드 값이 나옵니다.
예제 4: 모든 자료형을 때려 넣은 종합 선물 세트
#include <stdio.h>
int main() {
// 변수 선언과 동시에 초기화
char name_initial = 'J';
int level = 99;
double health = 450.55;
long long experience = 1234567890123LL;
printf("--- 캐릭터 정보 ---\n");
printf("이름 이니셜: %c\n", name_initial);
printf("현재 레벨: %d\n", level);
printf("현재 체력: %.2f\n", health);
printf("총 경험치: %lld\n", experience);
return 0;
}
- 이 코드는 앞서 배운 모든 자료형을 조합해 간단한 캐릭터 프로필을 만드는 예제입니다. 이렇게 목적에 맞는 상자를 골라 쓰는 것이 코딩의 기본입니다.
4. 초보자 폭풍 질문!
Q: 선생님, 그냥 다 double이나 long long으로 크게 만들면 편하지 않나요? 왜 굳이 작은 걸 나눠놓은 거죠?
A: 오, 아주 날카로운 질문입니다! 하지만 그렇게 하면 메모리 낭비가 엄청납니다. 혼자 만드는 작은 프로그램에서는 상관없지만, 수만 명의 사용자가 쓰는 게임이나 스마트폰 앱, 혹은 메모리가 아주 적은 가전제품(임베디드 시스템)에서는 1바이트 차이가 생존의 문제입니다. 딱 필요한 만큼의 상자를 쓰는 습관을 들여야 진정한 고수가 될 수 있습니다.
Q: float랑 double 차이가 그렇게 큰가요?
A: 네, 엄청납니다. 금융 프로그램에서 소수점 계산이 0.000001만 틀려도 수억 원이 왔다 갔다 할 수 있습니다. 그래서 C 언어에서는 정밀도를 매우 중요하게 생각하며, 기본적으로 실수형은 double을 권장합니다.
5. 실무주의보
경고: 초기화하지 않은 변수를 사용하지 마세요!
초보분들이 가장 많이 하는 실수 중 하나가 변수를 만들어만 놓고 값을 넣지 않은 채 출력하는 것입니다.
int a;
printf("%d", a); // 위험!!
이렇게 하면 컴퓨터는 상자를 만들어만 놓고 안에는 예전에 다른 프로그램이 쓰고 버린 쓰레기 값(Garbage Value)이 들어있을 가능성이 높습니다. 갑자기 뜬금없이 -858993460 같은 숫자가 출력된다면? 바로 이 쓰레기 값 때문입니다.
해결책: 변수를 만들 때 가급적 int a = 0; 처럼 초기값을 넣어주는 습관을 가지세요. 이것이 버그를 줄이는 가장 빠른 길입니다.
마무리하며
오늘 우리는 C 언어의 기초 중의 기초, 변수와 자료형에 대해 알아봤습니다.
- 변수는 이름표 붙은 상자다.
- 상자의 종류(자료형)에 따라 담을 수 있는 데이터와 크기가 다르다.
- 정수는
int,long long, 실수는float,double, 문자는char를 쓴다. - 변수를 만들 때는 반드시 초기화를 해줘야 쓰레기 값이 안 나온다.
이 내용만 완벽하게 이해하셨다면 여러분은 이제 C 언어라는 거대한 성의 1층 계단을 완전히 정복하신 겁니다. 다음 강의에서는 이 변수들을 가지고 어떻게 계산을 하고 조작하는지, 연산자에 대해 아주 찰지게 알려드리겠습니다.
고생 많으셨습니다. 다음 강의에서 뵙겠습니다!
<hr>