C언어 강의 2편: 변수와 데이터 타입
안녕하세요! 오늘은 프로그래밍에서 정말 중요한 개념인 변수에 대해 배워볼게요. 변수를 이해하면 프로그래밍의 절반을 이해한 거예요!
C언어 강의 2편: 변수와 데이터 타입
변수란 무엇일까요?
변수(Variable)를 쉽게 설명하면, 데이터를 저장하는 상자예요. 마치 우리가 물건을 보관할 때 상자에 넣고 이름을 붙이는 것처럼, 컴퓨터의 메모리 공간에 이름을 붙여서 데이터를 저장하는 거예요.
실생활 비유:
- 학교 사물함을 생각해보세요. 각 사물함에는 번호가 있고, 그 안에 물건을 넣을 수 있어요.
- 변수도 마찬가지예요. 변수 이름(사물함 번호)이 있고, 그 안에 값(물건)을 저장할 수 있어요.
int age = 25; // "age"라는 이름의 상자에 25라는 숫자를 넣었어요
변수 선언하기
변수를 사용하려면 먼저 “이런 종류의 데이터를 저장할 상자를 만들겠다”고 선언해야 해요.
기본 문법:
데이터타입 변수명;
예시:
int age; // 정수를 저장할 상자 만들기
float height; // 실수를 저장할 상자 만들기
char grade; // 문자를 저장할 상자 만들기
기본 데이터 타입 알아보기
C언어에는 여러 종류의 데이터 타입이 있어요. 각각의 용도가 다르니 하나씩 알아볼게요!
1. 정수형 (Integer) - int
정수는 소수점이 없는 숫자예요. 나이, 개수, 점수 같은 것들을 저장할 때 사용해요.
int age = 25; // 나이
int score = 100; // 점수
int count = 5; // 개수
int temperature = -10; // 음수도 가능해요!
다양한 정수 타입:
short s = 5; // 작은 정수 (2바이트)
int num = 10; // 일반 정수 (4바이트) - 가장 많이 사용
long l = 1000000L; // 큰 정수 (4바이트 이상)
long long ll = 1000000000LL; // 아주 큰 정수 (8바이트)
언제 뭘 쓸까요?
- 보통은
int를 사용하시면 돼요 - 메모리가 부족한 임베디드 시스템에서는
short를 사용하기도 해요 - 아주 큰 숫자가 필요하면
long long을 사용해요
2. 실수형 (Floating Point) - float, double
실수는 소수점이 있는 숫자예요. 키, 몸무게, 가격 같은 것들을 저장할 때 사용해요.
float height = 175.5f; // 키 (f를 붙여야 해요)
float weight = 65.3f; // 몸무게
double pi = 3.14159; // 원주율 (더 정밀해요)
double price = 1234.56; // 가격
float vs double:
float: 4바이트, 소수점 6~7자리 정도 정밀도double: 8바이트, 소수점 15~17자리 정도 정밀도 (더 정확해요!)
실무 팁:
- 보통은
double을 많이 사용해요 (더 정확하니까요) - 메모리가 부족한 경우에만
float를 사용해요
3. 문자형 (Character) - char
문자는 한 글자를 저장할 때 사용해요. 작은따옴표(')를 사용해야 해요!
char grade = 'A'; // 등급
char firstLetter = 'B'; // 첫 글자
char symbol = '+'; // 기호
문자열은? 문자열(여러 글자)은 나중에 배울 거예요. 지금은 한 글자만 기억하세요!
char c = 'A'; // ✅ 한 글자 - 작은따옴표
char str[] = "Hello"; // 여러 글자 - 큰따옴표 (나중에 배울 거예요)
4. 불린형 (Boolean) - bool
불린은 참(true) 또는 거짓(false)만 저장할 수 있어요. 조건을 체크할 때 사용해요.
#include <stdbool.h> // bool을 사용하려면 이게 필요해요
bool isStudent = true; // 학생인가요? 네!
bool isPassed = false; // 합격했나요? 아니요
bool isRaining = true; // 비가 오나요? 네!
C언어에서 bool 사용하기:
- C99 이상 버전에서만 사용 가능해요
#include <stdbool.h>를 맨 위에 추가해야 해요- 없으면
int로 1(true), 0(false)을 사용하기도 해요
변수 초기화하기
변수를 만들 때 바로 값을 넣을 수 있어요. 이것을 “초기화”라고 해요.
int age = 25; // 선언과 동시에 초기화
float height = 175.5f;
char grade = 'A';
bool isStudent = true;
초기화하지 않으면?
int age; // 값을 넣지 않았어요
printf("%d", age); // ⚠️ 쓰레기 값이 나올 수 있어요!
초기화하지 않은 변수는 예상치 못한 값이 들어있을 수 있어요. 항상 초기화하는 습관을 기르세요!
상수 (Constants) - 변하지 않는 값
상수는 한 번 값을 정하면 바꿀 수 없는 변수예요. 마치 학교 규칙처럼요!
방법 1: const 키워드 사용
const int MAX_SIZE = 100; // 최대 크기는 100
const float PI = 3.14159f; // 원주율
const int MIN_AGE = 18; // 최소 나이
// MAX_SIZE = 200; // ❌ 에러! 상수는 변경할 수 없어요
방법 2: #define 매크로 사용
#define MAX_SIZE 100
#define PI 3.14159
#define MIN_AGE 18
// 세미콜론(;)을 붙이지 않아요!
언제 뭘 쓸까요?
const: 변수처럼 사용하고 싶을 때#define: 단순한 숫자나 문자열을 정의할 때
변수명 짓기 - 좋은 이름의 힘
변수 이름을 잘 지으면 코드를 읽기가 훨씬 쉬워져요!
변수명 규칙
- 영문자, 숫자, 언더스코어(_)만 사용 가능
- 숫자로 시작할 수 없음
- 대소문자를 구분함 (age와 Age는 다른 변수예요!)
- 예약어는 사용할 수 없음 (int, if, for 등)
좋은 예:
int studentAge; // ✅ 의미가 명확해요
int student_count; // ✅ 언더스코어 사용 가능
int maxSize; // ✅ 대소문자 구분
int totalScore; // ✅ 여러 단어는 대문자로 구분
나쁜 예:
int 2age; // ❌ 숫자로 시작
int student-age; // ❌ 하이픈 사용 불가
int int; // ❌ 예약어 사용 불가
int a; // ❌ 의미가 불명확해요
변수명 짓기 팁:
- 의미 있는 이름을 사용하세요:
x보다는age가 좋아요 - 여러 단어는 대문자로 구분:
studentAge(카멜 케이스) - 또는 언더스코어 사용:
student_age(스네이크 케이스) - 너무 길지 않게:
studentAge는 좋지만studentAgeInYears는 좀 길어요
실전 예제 1: 학생 정보 출력하기
이제 배운 내용으로 학생 정보를 출력하는 프로그램을 만들어볼게요:
#include <stdio.h>
#include <stdbool.h>
int main() {
// 학생 정보 변수 선언 및 초기화
int age = 20;
float height = 175.5f;
char grade = 'A';
bool isPassed = true;
// 정보 출력
printf("=== 학생 정보 ===\n");
printf("나이: %d세\n", age);
printf("키: %.1fcm\n", height);
printf("등급: %c\n", grade);
printf("합격 여부: %s\n", isPassed ? "합격" : "불합격");
printf("================\n");
// 변수 값 변경하기
age = 21; // 나이 증가
grade = 'B'; // 등급 변경
printf("\n=== 업데이트된 정보 ===\n");
printf("나이: %d세\n", age);
printf("등급: %c\n", grade);
return 0;
}
출력 결과:
=== 학생 정보 ===
나이: 20세
키: 175.5cm
등급: A
합격 여부: 합격
================
=== 업데이트된 정보 ===
나이: 21세
등급: B
실전 예제 2: 간단한 계산기
변수를 사용해서 간단한 계산을 해볼게요:
#include <stdio.h>
int main() {
// 숫자 두 개 저장
int num1 = 10;
int num2 = 5;
// 계산 결과 저장
int sum = num1 + num2; // 덧셈
int difference = num1 - num2; // 뺄셈
int product = num1 * num2; // 곱셈
int quotient = num1 / num2; // 나눗셈
// 결과 출력
printf("첫 번째 숫자: %d\n", num1);
printf("두 번째 숫자: %d\n", num2);
printf("-------------------\n");
printf("덧셈: %d + %d = %d\n", num1, num2, sum);
printf("뺄셈: %d - %d = %d\n", num1, num2, difference);
printf("곱셈: %d * %d = %d\n", num1, num2, product);
printf("나눗셈: %d / %d = %d\n", num1, num2, quotient);
return 0;
}
출력 결과:
첫 번째 숫자: 10
두 번째 숫자: 5
-------------------
덧셈: 10 + 5 = 15
뺄셈: 10 - 5 = 5
곱셈: 10 * 5 = 50
나눗셈: 10 / 5 = 2
형식 지정자 (Format Specifiers) - printf에서 사용
printf에서 변수를 출력할 때는 형식 지정자를 사용해야 해요. 각 데이터 타입마다 다른 기호를 사용해요!
int age = 25;
float height = 175.5f;
char grade = 'A';
char name[] = "홍길동"; // 문자열 (나중에 배울 거예요)
printf("나이: %d\n", age); // %d: 정수
printf("키: %.1f\n", height); // %f: 실수 (.1은 소수점 1자리)
printf("등급: %c\n", grade); // %c: 문자
printf("이름: %s\n", name); // %s: 문자열
주요 형식 지정자:
%d: 정수 (int)%f: 실수 (float, double)%.2f: 실수 소수점 2자리까지%c: 문자 (char)%s: 문자열 (char[])%ld: 긴 정수 (long)%lf: 배정밀도 실수 (double)
실수 출력 예시:
float pi = 3.14159f;
printf("%f\n", pi); // 3.141590 (기본 6자리)
printf("%.2f\n", pi); // 3.14 (소수점 2자리)
printf("%.4f\n", pi); // 3.1416 (소수점 4자리)
자주 하는 실수와 해결 방법
실수 1: 변수 타입과 형식 지정자 불일치
int age = 25;
printf("%f", age); // ❌ int인데 %f 사용 (에러!)
printf("%d", age); // ✅ 올바름
실수 2: float 초기화 시 f 빼먹기
float height = 175.5; // ⚠️ 경고가 나올 수 있어요
float height = 175.5f; // ✅ f를 붙여주세요
실수 3: 문자와 문자열 구분 못하기
char c = "A"; // ❌ 큰따옴표는 문자열
char c = 'A'; // ✅ 작은따옴표는 문자
실수 4: 변수 초기화 안 하기
int age;
printf("%d", age); // ⚠️ 쓰레기 값이 나올 수 있어요
int age = 0; // ✅ 항상 초기화하세요
연습 문제
다음 프로그램을 작성해보세요:
- 나이 계산기: 올해 나이와 내년 나이를 출력하는 프로그램
- BMI 계산기: 키와 몸무게를 변수에 저장하고 BMI를 계산하는 프로그램
- BMI = 몸무게(kg) / (키(m))²
힌트:
float weight = 70.0f; // 몸무게
float height = 1.75f; // 키 (미터 단위)
float bmi = weight / (height * height);
다음에 공부할 내용
오늘은 변수와 데이터 타입에 대해 공부했어요. 변수는 프로그래밍의 기본이에요!
다음 포스트에서는 연산자에 대해 공부해볼 거예요. 덧셈, 뺄셈 같은 산술 연산자부터 비교 연산자, 논리 연산자까지 다양한 연산자를 공부해볼게요.
궁금한 점이 있으시면 댓글로 질문해주세요! 다음 포스트에서 만나요! 😊