
변수와 데이터 타입, 왜 제대로 알아야 할까요?
코드를 처음 작성하다 보면 빨간색 밑줄과 씨름하는 순간이 찾아와요. 분명히 숫자를 넣었는데 “형식(type)이 맞지 않습니다”라는 오류 메시지가 뜨면 당혹스럽기 마련이죠. 분명히 10을 넣었는데 왜 컴퓨터는 이를 거부하는 걸까요? 이는 컴퓨터가 우리가 사용하는 숫자를 단순히 숫자로 보는 것이 아니라, 그것이 차지하는 공간과 성격을 아주 꼼꼼하게 따지기 때문이에요.
C#은 매우 엄격한 정적 타이핑(Static Typing) 언어예요. 즉, 데이터를 담는 그릇인 변수를 만들 때 처음부터 어떤 종류의 데이터를 담을지 명확하게 정해줘야 해요. 이 규칙을 무시하면 프로그램은 실행조차 되지 않거나, 실행 중에 예상치 못한 계산 오류를 일으키며 멈춰버려요. 특히 금융 프로그램을 만들 때 소수점 계산 오류가 발생한다면 그 결과는 치명적일 수밖에 없어요.
이 글을 끝까지 읽고 나면 여러분은 단순히 코드를 따라 치는 수준을 넘어, 상황에 맞는 최적의 데이터 타입을 선택하는 안목을 갖게 될 거예요. 메모리를 효율적으로 쓰면서도 오류 없는 탄탄한 코드를 짜는 기초 체력을 길러드릴게요.
- 데이터를 담는 그릇, 변수의 정의와 선언 방법
- 정수, 실수, 문자, 논리형 등 필수 데이터 타입 정리
- 데이터 타입을 자유자재로 바꾸는 형변환 기술
- 초보 개발자가 가장 자주 저지르는 실수와 해결법
학습 시작 전 꼭 알아야 할 기본 개념
본격적으로 코드를 작성하기 전에, 우리가 다룰 용어들과 준비물을 먼저 살펴볼까요? C# 프로그래밍을 시작하려면 가장 먼저 Visual Studio나 Visual Studio Code 같은 개발 환경이 구축되어 있어야 해요. 그리고 .NET 환경이 설치되어 있어야 실제 코드를 돌려보며 테스트할 수 있어요.
변수를 이해할 때 가장 좋은 비유는 데이터를 담는 상자예요. 상자마다 크기가 다르고, 그 상자에 담을 수 있는 물건의 종류가 정해져 있다고 상상해 보세요. 사과를 담는 상자에 갑자기 커다란 수박을 넣으려고 하면 상자가 터지거나 들어가지 않겠죠? 프로그래밍에서도 마찬가지예요.
데이터 타입은 크게 두 가지 범주로 나뉘어요. 숫자를 다루는 숫자형, 글자를 다루는 문자형, 그리고 참과 거짓을 다루는 논리형이죠. 이들을 적재적소에 배치하는 것이 실력 있는 개발자의 첫 번째 조건이에요.
데이터 타입 선택 기준 비교
| 데이터 유형 | 대표 타입 | 주요 용도 | 선택 기준 |
|---|---|---|---|
| 정수형 | int, long | 나이, 개수, 순번 | 소수점이 없는 숫자 |
| 실수형 | float, double, decimal | 몸무게, 좌표, 가격 | 소수점이 포함된 숫자 |
| 문자형 | char, string | 이름, 성별, 메시지 | 글자나 문장 |
| 논리형 | bool | 로그인 여부, 성공 여부 | 참(True) 또는 거짓(False) |
무조건 큰 타입을 쓴다고 좋은 것은 아니에요. 너무 큰 상자를 사용하면 메모리가 낭비되고, 너무 작은 상자를 사용하면 데이터가 넘쳐버리죠. 상황에 맞는 적절한 크기의 그릇을 고르는 연습이 필요해요.
C# 변수와 데이터 타입 완벽 정복하기
이제 본격적으로 실전에 들어가 볼까요? 단계별로 차근차근 따라오시면 어렵지 않게 익힐 수 있어요.
STEP 1. 변수 선언과 초기화의 기본 원리
변수를 만드는 과정은 형식(Type) + 이름(Name) = 값(Value)이라는 공식을 기억하면 쉬워요. 예를 들어 정수형 변수 하나를 만든다면 int age = 25;라고 작성해요. 여기서 int는 상자의 종류를, age는 상자의 이름표를, 25는 그 안에 담긴 실제 내용을 의미해요.
선언만 하고 값을 넣지 않는 것을 ‘선언’이라 하고, 선언과 동시에 값을 넣는 것을 ‘초기화’라고 불러요. 초기화를 하지 않은 변수를 사용하려고 하면 컴퓨터는 “내용물이 비어있어서 위험해요!”라며 경고를 보낼 거예요. 항상 변수를 만든 직후에는 의미 있는 값을 넣어주는 습관을 들이는 것이 좋아요.
STEP 2. 숫자 데이터를 다루는 다양한 방법
숫자는 크게 정수와 실수로 나뉘어요. 이 차이를 이해하는 것이 매우 중요해요.
먼저 정수형은 소수점이 없는 숫자를 다뤄요. 가장 흔히 쓰이는 것은 int예요. 일반적인 카운트나 나이 등을 다루기에 충분하죠. 하지만 만약 억 단위가 넘어가는 아주 큰 숫자를 다뤄야 한다면 long을 사용해야 해요. int의 한계를 넘어서는 큰 수치를 담기 위해서죠.
다음은 실수형이에요. 소수점이 포함된 숫자를 다루는데, 종류가 세 가지나 되어 헷갈리기 쉬워요.
float: 4바이트를 사용하며 정밀도가 비교적 낮아요. 게임 그래픽 계산처럼 속도가 중요한 곳에 써요.double: 8바이트를 사용하며 정밀도가 높아요. 일반적인 과학 계산이나 수학적 계산에 가장 많이 쓰여요.decimal: 16바이트를 사용하며 극도로 높은 정밀도를 자랑해요. 돈을 계산하는 금융 프로그램에서는 반드시 이 타입을 써야 해요.
소수점 계산을 할 때
float나 double은 미세한 오차가 발생할 수 있어요. 아주 정밀한 돈 계산을 할 때는 반드시 decimal을 선택하세요.STEP 3. 텍스트와 논리 상태 관리하기
글자를 다룰 때는 두 가지를 기억하세요. 딱 한 글자만 담는 char와, 문장 전체를 담는 string이에요. char는 작은따옴표(‘ ‘)를 사용하고, string은 큰따옴표(” “)를 사용하는 규칙이 있어요.
마지막으로 bool 타입은 참(true)과 거짓(false)만을 담아요. “사용자가 로그인했는가?”, “게임이 종료되었는가?”와 같은 상태를 체크할 때 핵심적인 역할을 수행해요. 복잡한 조건문을 만드는 기초가 되는 아주 중요한 타입이죠.
STEP 4. 데이터 타입 변환(Casting) 기술
때로는 담겨 있는 상자의 종류를 바꿔야 할 때가 있어요. 예를 들어 실수형 변수에 들어있는 3.14라는 값을 정수형 변수에 담고 싶을 때죠. 이때 사용하는 것이 형변환(Casting)이에요.
자동으로 변환되는 암시적 형변환이 있는 반면, 데이터 손실 위험이 있어 개발자가 직접 명령을 내려야 하는 명시적 형변환이 있어요. 실수형을 정수형으로 바꿀 때는 소수점 아래 숫자가 버려지게 되는데, 이를 미리 알고 있어야 예상치 못한 버그를 막을 수 있어요.
실전 연습: 게임 캐릭터 정보 관리하기
배운 내용을 바탕으로 간단한 게임 캐릭터의 정보를 관리하는 시나리오를 구성해 볼게요. 실제 코드를 어떻게 배치하는지 흐름을 눈으로 확인해 보세요.
먼저 캐릭터의 이름은 문자열로, 레벨은 정수로, 공격력은 소수점까지 표현하기 위해 실수형으로, 그리고 생존 여부는 논리형으로 설정할 거예요.
- 캐릭터 이름 저장:
string charName = "전사"; - 캐릭터 레벨 설정:
int level = 10; - 공격력 계산:
double attackPower = 45.5; - 생존 상태:
bool isAlive = true;
이렇게 각 데이터의 성격에 맞춰 타입을 지정해 주면, 컴퓨터는 메모리를 효율적으로 사용하면서도 우리가 원하는 계산을 정확하게 수행할 수 있게 돼요.
자주 하는 실수와 해결법
실력은 실수를 바로잡는 과정에서 성장해요. 입문 단계에서 가장 많이 마주치는 문제들을 정리했어요.
- ❌ 정수형 변수에 너무 큰 숫자를 넣으려고 할 때 → int의 표현 범위를 넘어서는 숫자를 넣으면 오류가 나거나 값이 엉뚱하게 변해요. → ✅
long타입을 사용하세요. - ❌ 실수 계산 시 소수점이 사라질 때 → 정수형과 실수형을 더하거나 나눌 때 결과가 정수로 강제 변환될 수 있어요. → ✅ 계산 과정에서 최소 하나 이상의 변수가 실수형(double 등)인지 확인하세요.
- ❌ 변수 이름을 대충 지을 때 →
a, b, c같은 이름은 나중에 코드를 볼 때 무엇을 뜻하는지 알 수 없어요. → ✅userAge, itemPrice처럼 의미 있는 이름을 쓰세요. - ❌ 초기화하지 않은 변수 사용 → 값이 들어있지 않은 변수를 읽으려고 하면 프로그램이 멈춰요. → ✅ 변수를 선언함과 동시에 기본값으로라도 초기화하는 습관을 가지세요.
- ❌ 문자열과 문자를 혼동할 때 → 단일 문자를 담는
char에 큰따옴표를 쓰면 오류가 발생해요. → ✅char는 작은따옴표(‘ ‘),string은 큰따옴표(” “)를 사용하세요.
자주 묻는 질문
Q. float와 double 중 무엇을 쓰는 게 더 좋나요?
A. 특별한 이유가 없다면 더 정밀하고 표준적으로 사용되는 double을 사용하는 것을 추천해요. 메모리가 극도로 제한적인 환경이 아니라면 정밀도가 높은 것이 유리하니까요.
Q. var 키워드는 무엇이며 언제 써야 하나요?
A. var는 컴파일러가 타입을 자동으로 추론하게 해주는 기능이에요. 코드가 간결해지지만, 타입을 명확히 알기 어려울 수 있으니 너무 남발하지 않는 것이 좋아요.
Q. 문자열에 숫자를 더하면 어떻게 되나요?
A. string과 숫자를 더하면 숫자가 문자로 변환되어 문자열 뒤에 붙게 돼요. 예를 들어 “점수: ” + 100 은 “점수: 100″이 됩니다.
Q. 정수형 변수에서 소수점을 빼면 어떻게 되나요?
<
A. 데이터 손실이 발생해요. 예를 들어 3.9를 int로 변환하면 4가 되는 것이 아니라 소수점 아래를 그냥 버린 3이 돼요.
오늘 배운 내용을 정리하며
C#의 변수와 데이터 타입은 프로그래밍이라는 거대한 건물을 짓기 위한 가장 기초적인 벽돌과 같아요. 오늘 배운 개념들을 잊지 않도록 다시 한번 머릿속으로 그려보세요.
- 변수는 데이터를 담는 상자이며, 반드시 타입을 지정해야 해요.
- 정수는
int와long, 실수는double와decimal을 구분해서 써야 해요. - 금융 계산처럼 아주 정밀한 작업에는 반드시
decimal을 사용하세요. - 데이터 타입 간의 변환(Casting) 시에는 데이터 손실이 생길 수 있음을 인지해야 해요.
- 변수 이름은 코드를 읽는 다른 사람(혹은 미래의 나)을 위해 의미 있게 지으세요.
이제 이론은 충분해요. 다음 단계로 나아가기 위해 오늘 바로 실천해야 할 일을 알려드릴게요.
오늘 할 일: 비주얼 스튜디오를 설치하고, 오늘 배운 다양한 타입의 변수들을 직접 선언해서 콘솔창에 출력해 보세요.
이번 주 할 일: 간단한 계산기 프로그램을 만들며, 정수와 실수의 나눗셈 결과가 어떻게 달라지는지 직접 체감해 보세요.
실행 직전 할 일: 변수 이름을 지을 때 camelCase(예: userAge) 규칙을 적용할 준비를 하세요.
예제 코드를 직접 따라 하며 오늘 바로 익혀 보세요. 기초가 탄탄할수록 여러분이 만들 프로그램은 더 견고해질 거예요. 다음에는 이 변수들을 가지고 논리적인 흐름을 만드는 제어문에 대해 다뤄볼게요.
관련된 더 깊은 지식이 궁금하다면 C# 클린 코드 관련 글로 연결되는 내용을 참고해 보세요.