C# 프로그래밍 언어 기초: 변수, 데이터 타입, 연산자 🚀
![콘텐츠 대표 이미지 - C# 프로그래밍 언어 기초: 변수, 데이터 타입, 연산자](/storage/ai/article/compressed/00674d92-2189-4e2d-8f1a-56701099c3aa.jpg)
안녕하세요, 코딩 꿈나무들! 오늘은 C# 프로그래밍의 기초를 함께 탐험해볼 거예요. 변수, 데이터 타입, 연산자... 어려워 보이죠? 근데 걱정 마세요! 이 글을 다 읽고 나면 여러분도 C# 고수가 될 수 있을 거예요. 마치 게임 레벨 업하듯이 말이죠! ㅋㅋㅋ
그럼 이제부터 C#의 세계로 빠져볼까요? 준비되셨나요? 3, 2, 1... 출발! 🏁
참고: 이 글은 재능넷(https://www.jaenung.net)의 '지식인의 숲' 메뉴에 등록될 예정이에요. 재능넷은 다양한 재능을 거래하는 플랫폼인데, 여러분의 C# 실력도 언젠가 이곳에서 빛을 발할 수 있을 거예요! 😉
1. C# 변수: 데이터의 집 🏠
자, 여러분! 변수가 뭔지 아시나요? 변수는 우리가 데이터를 저장하는 '집'이라고 생각하면 돼요. 마치 우리가 물건을 보관하기 위해 집에 두는 것처럼, 프로그램에서도 데이터를 어딘가에 저장해야 하잖아요? 그 '어딘가'가 바로 변수예요!
변수는 프로그램이 실행되는 동안 값이 변할 수 있는 데이터를 저장하는 메모리 공간이에요.
음... 좀 어려운가요? 그럼 이렇게 생각해보세요. 여러분이 가지고 있는 돼지저금통을 상상해보세요. 그 저금통에 매일 용돈을 넣고 빼고 하잖아요? 그 저금통이 바로 변수예요! 돈의 양은 계속 변하지만, 저금통은 그대로죠? 그게 바로 변수의 특징이에요.
1.1 변수 선언하기: 집 짓기 🏗️
C#에서 변수를 선언하는 건 정말 쉬워요. 그냥 데이터 타입을 쓰고, 변수 이름을 정해주면 돼요. 예를 들면 이렇게요:
int myAge;
string myName;
double myHeight;
이렇게 하면 'myAge'라는 정수형 변수, 'myName'이라는 문자열 변수, 'myHeight'라는 실수형 변수가 생성돼요. 마치 나이를 저장할 집, 이름을 저장할 집, 키를 저장할 집을 각각 지은 거죠!
1.2 변수에 값 할당하기: 집에 물건 넣기 📦
변수를 선언했다고 해서 끝이 아니에요. 이제 그 변수에 값을 넣어줘야 해요. 이걸 '할당'이라고 해요. 방금 지은 집에 물건을 넣는 것처럼요!
myAge = 25;
myName = "코딩왕";
myHeight = 175.5;
이렇게 하면 myAge 변수에는 25가, myName 변수에는 "코딩왕"이, myHeight 변수에는 175.5가 저장돼요. 우리가 집에 물건을 넣은 것처럼요!
그리고 더 간단하게, 변수를 선언하면서 동시에 값을 할당할 수도 있어요. 이걸 '초기화'라고 해요.
int myAge = 25;
string myName = "코딩왕";
double myHeight = 175.5;
이렇게 하면 집을 짓자마자 물건을 넣는 거죠. 효율적이죠? ㅋㅋㅋ
1.3 변수 이름 짓기: 우리 집 이름은 뭘로 할까? 🏷️
변수 이름을 지을 때는 몇 가지 규칙이 있어요. 마치 우리가 집 주소를 정할 때 규칙이 있는 것처럼요!
- 변수 이름은 문자, 숫자, 언더스코어(_)로만 구성돼요.
- 첫 글자로 숫자는 사용할 수 없어요.
- 대소문자를 구분해요. 즉, myAge와 MyAge는 서로 다른 변수예요.
- C#의 예약어(키워드)는 사용할 수 없어요.
그리고 변수 이름은 그 변수가 무엇을 저장하는지 알 수 있게 지어주는 게 좋아요. 예를 들어, 나이를 저장하는 변수라면 'a'보다는 'age'가 좋겠죠?
주의: 변수 이름을 지을 때 한글을 사용할 수 있지만, 보통은 영어로 짓는 게 관례예요. 국제적인 개발 환경에서 일할 때를 대비해서요!
1.4 변수의 범위와 수명: 우리 집은 얼마나 오래 갈까? ⏳
변수에도 수명이 있어요. 마치 우리가 사는 집처럼요. 변수의 수명은 그 변수가 선언된 위치에 따라 달라져요.
지역 변수(Local Variables): 메서드나 블록 내에서 선언된 변수예요. 그 메서드나 블록이 실행되는 동안에만 존재해요.
void MyMethod()
{
int localVar = 10; // 지역 변수
// localVar는 이 메서드 안에서만 사용 가능해요
}
전역 변수(Global Variables): 클래스 수준에서 선언된 변수예요. 프로그램이 실행되는 동안 계속 존재해요.
public class MyClass
{
int globalVar = 20; // 전역 변수
// globalVar는 이 클래스의 모든 메서드에서 사용 가능해요
}
자, 여기까지 변수에 대해 알아봤어요. 어때요? 생각보다 어렵지 않죠? 변수는 그냥 우리가 데이터를 담아두는 상자라고 생각하면 돼요. 이 상자에 우리가 원하는 정보를 넣고, 필요할 때 꺼내 쓰는 거예요. 간단하죠?
다음으로는 데이터 타입에 대해 알아볼 거예요. 데이터 타입은 변수가 어떤 종류의 데이터를 저장할 수 있는지 결정하는 거예요. 마치 우리가 옷을 넣는 옷장, 신발을 넣는 신발장을 따로 두는 것처럼요. 재미있을 거예요, 기대하세요! ㅎㅎ
2. C# 데이터 타입: 다양한 종류의 상자들 📦
안녕하세요, 코딩 친구들! 이제 우리는 C#의 데이터 타입에 대해 알아볼 거예요. 데이터 타입이 뭔지 궁금하죠? 쉽게 말해서, 데이터 타입은 우리가 저장하려는 데이터의 종류를 나타내요. 마치 우리가 물건을 정리할 때 종류별로 다른 상자에 넣는 것처럼요!
데이터 타입은 변수가 저장할 수 있는 데이터의 종류와 크기를 정의해요.
C#에는 여러 가지 데이터 타입이 있어요. 크게 두 가지로 나눌 수 있죠.
2.1 값 타입(Value Types): 작고 가벼운 상자들 🎁
값 타입은 직접 값을 저장해요. 마치 작은 상자에 물건을 직접 넣는 것처럼요. C#에는 다음과 같은 값 타입이 있어요:
- 정수형(Integer Types): 소수점이 없는 숫자를 저장해요.
- 부동 소수점형(Floating Point Types): 소수점이 있는 숫자를 저장해요.
- 불리언(Boolean): 참(true) 또는 거짓(false) 값을 저장해요.
- 문자(Char): 단일 문자를 저장해요.
2.1.1 정수형(Integer Types) 🔢
정수형은 소수점이 없는 숫자를 저장하는 데 사용돼요. C#에는 여러 종류의 정수형이 있어요:
- sbyte: -128부터 127까지의 숫자를 저장할 수 있어요.
- byte: 0부터 255까지의 숫자를 저장할 수 있어요.
- short: -32,768부터 32,767까지의 숫자를 저장할 수 있어요.
- ushort: 0부터 65,535까지의 숫자를 저장할 수 있어요.
- int: -2,147,483,648부터 2,147,483,647까지의 숫자를 저장할 수 있어요.
- uint: 0부터 4,294,967,295까지의 숫자를 저장할 수 있어요.
- long: -9,223,372,036,854,775,808부터 9,223,372,036,854,775,807까지의 숫자를 저장할 수 있어요.
- ulong: 0부터 18,446,744,073,709,551,615까지의 숫자를 저장할 수 있어요.
와! 숫자가 엄청 크죠? ㅋㅋㅋ 하지만 걱정 마세요. 보통은 int를 가장 많이 사용해요. 일상적인 계산에는 충분하거든요!
int myAge = 25;
uint myFavoriteNumber = 42;
long bigNumber = 0;
2.1.2 부동 소수점형(Floating Point Types) 🌊
부동 소수점형은 소수점이 있는 숫자를 저장하는 데 사용돼요. 실수라고도 불러요. C#에는 세 가지 부동 소수점형이 있어요:
- float: 약 6-9자리의 정밀도를 가져요. 32비트를 사용해요.
- double: 약 15-17자리의 정밀도를 가져요. 64비트를 사용해요.
- decimal: 약 28-29자리의 정밀도를 가져요. 128비트를 사용해요.
보통은 double을 많이 사용해요. 정밀도도 충분하고, 사용하기도 편리하거든요!
float myHeight = 175.5f; // float 타입은 끝에 f를 붙여야 해요
double pi = 3.14159265359;
decimal myBankBalance = 1000000.50m; // decimal 타입은 끝에 m을 붙여요
2.1.3 불리언(Boolean) 🚦
불리언 타입은 참(true) 또는 거짓(false) 두 가지 값만 가질 수 있어요. 마치 전등의 on/off 스위치 같죠?
bool isRaining = true;
bool isSunny = false;
이렇게 하면 '비가 오고 있다'와 '날씨가 맑지 않다'라는 정보를 저장할 수 있어요.
2.1.4 문자(Char) 🔤
char 타입은 단일 유니코드 문자를 저장해요. 작은따옴표로 묶어서 표현해요.
char firstInitial = 'J';
char heart = '♥';
이렇게 하면 'J'라는 문자와 하트 모양의 문자를 각각 저장할 수 있어요.
2.2 참조 타입(Reference Types): 큰 상자의 주소 📍
참조 타입은 데이터의 메모리 주소를 저장해요. 마치 큰 창고에 물건을 넣고, 그 창고의 주소를 적어두는 것과 같아요. C#의 주요 참조 타입은 다음과 같아요:
- string: 문자열을 저장해요.
- object: 모든 타입의 기본 클래스예요.
- dynamic: 컴파일 시간에 타입 검사를 하지 않아요.
- class: 사용자 정의 참조 타입이에요.
2.2.1 문자열(String) 📝
string 타입은 텍스트를 저장하는 데 사용돼요. 큰따옴표로 묶어서 표현해요.
string myName = "코딩왕";
string greeting = "안녕하세요, C# 세계에 오신 것을 환영합니다!";
문자열은 정말 유용해요. 이름, 주소, 메시지 등 텍스트 정보를 저장할 때 사용하죠.
2.2.2 객체(Object) 🎭
object 타입은 모든 타입의 기본 클래스예요. 즉, 어떤 타입의 데이터든 저장할 수 있어요.
object anything = 42;
object something = "Hello, World!";
object nothing = null;
하지만 object 타입은 많이 사용하지 않아요. 타입 안전성이 떨어지기 때문이에요.
2.2.3 동적(Dynamic) 🎭
dynamic 타입은 컴파일 시간에 타입 검사를 하지 않아요. 런타임에 타입이 결정돼요.
dynamic dynamicVar = 100;
dynamicVar = "Now I'm a string";
dynamicVar = new List<int>();
</int>
dynamic 타입은 주의해서 사용해야 해요. 타입 관련 오류를 컴파일 시간에 잡을 수 없기 때문이에요.
2.3 var 키워드: 똑똑한 상자 🧠
C#에는 var라는 특별한 키워드가 있어요. 이 키워드를 사용하면 컴파일러가 자동으로 변수의 타입을 추론해요.
var myAge = 25; // int로 추론돼요
var myName = "코딩왕"; // string으로 추론돼요
var pi = 3.14; // double로 추론돼요
var는 코드를 간결하게 만들어주지만, 가독성을 위해 명시적인 타입 선언을 선호하는 개발자도 있어요.
2.4 nullable 타입: 빈 상자도 OK 👌
C#에서는 값 타입에 null을 할당할 수 없어요. 하지만 때로는 '값이 없음'을 나타내고 싶을 때가 있죠. 이럴 때 nullable 타입을 사용해요.
int? nullableInt = null;
double? nullableDouble = 3.14;
bool? nullableBool = null;
물음표(?)를 타입 뒤에 붙이면 nullable 타입이 돼요. 이렇게 하면 null 값도 저장할 수 있어요.
2.5 열거형(Enum): 미리 정해진 상자들 📊
열거형은 미리 정의된 상수들의 집합이에요. 코드의 가독성을 높이는 데 도움이 돼요.
enum DaysOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
DaysOfWeek today = DaysOfWeek.Friday;
이렇게 하면 요일을 더 명확하게 표현할 수 있어요.
2.6 구조체(Struct): 여러 개의 작은 상자를 묶은 큰 상자 📦📦📦
구조체는 여러 개의 관련 데이터를 하나로 묶을 수 있어요. 클래스와 비슷하지만, 값 타입이에요.
struct Point
{
public int X;
public int Y;
}
Point myPoint = new Point();
myPoint.X = 10;
myPoint.Y = 20;
이렇게 하면 X좌표와 Y좌표를 하나의 Point로 표현할 수 있어요.
2.7 타입 변환: 상자 바꾸기 🔄
때로는 한 타입의 데이터를 다른 타입으로 변환해야 할 때가 있어요. 이를 '타입 변환' 또는 '캐스팅'이라고 해요.
2.7.1 암시적 변환
작은 크기의 타입에서 큰 크기의 타입으로 변환할 때는 자동으로 변환돼요.
int myInt = 100;
long myLong = myInt; // int에서 long으로 자동 변환
2.7.2 명시적 변환
큰 크기의 타입에서 작은 크기의 타입으로 변환할 때는 명시적으로 변환해야 해요.
double myDouble = 3.14;
int myInt = (int)myDouble; // double에서 int로 명시적 변환
이렇게 하면 3.14가 3으로 변환돼요. 소수점 이하는 잘려나가니 주의해야 해요!
2.7.3 Convert 클래스 사용하기
C#에서는 Convert 클래스를 제공해요. 이 클래스를 사용하면 다양한 타입 간의 변환을 쉽게 할 수 있어요.
string myString = "100";
int myInt = Convert.ToInt32(myString);
double myDouble = Convert.ToDouble(myString);
bool myBool = Convert.ToBoolean("true");
Convert 클래스는 문자열을 다른 타입으로 변환할 때 특히 유용해요.
2.8 박싱과 언박싱: 값 타입을 참조 타입으로, 그리고 다시 돌아오기 📦↔️🎁
C#에서는 값 타입을 참조 타입으로 변환하는 '박싱'과, 그 반대인 '언박싱'이라는 개념이 있어요.
2.8.1 박싱(Boxing)
값 타입을 object 타입으로 변환하는 걸 박싱이라고 해요.
int myInt = 100;
object boxedInt = myInt; // 박싱
2.8.2 언박싱(Unboxing)
박싱된 object를 다시 값 타입으로 변환하는 걸 언박싱이라고 해요.
object boxedInt = 100;
int unboxedInt = (int)boxedInt; // 언박싱
박싱과 언박싱은 성능에 영향을 줄 수 있으니 필요할 때만 사용하는 게 좋아요.
팁: 데이터 타입을 잘 이해하고 적절히 사용하면, 메모리를 효율적으로 사용하고 프로그램의 성능을 향상시킬 수 있어요. 재능넷에서 C# 프로그래밍 강좌를 들어보는 것도 좋은 방법이에요!
자, 여기까지 C#의 데이터 타입에 대해 알아봤어요. 어때요? 생각보다 재미있죠? ㅎㅎ 데이터 타입은 프로그래밍의 기초 중의 기초예요. 이걸 잘 이해하면 C# 프로그래밍의 절반은 마스터한 거나 다름없어요!
다음으로는 C#의 연산자에 대해 알아볼 거예요. 연산자는 우리가 이 데이터 타입들을 가지고 실제로 뭔가를 할 수 있게 해주는 도구들이에요. 마치 요리 도구처럼요. 데이터 타입이 재료라면, 연산자는 그 재료로 맛있는 요리를 만드는 도구인 셈이죠. 기대되지 않나요? 😋