C# 변수와 기본 데이터 타입 완벽 가이드
C# 변수와 (기본) 데이터 타입
이 튜토리얼에서는 변수, C#에서 변수 생성 방법, C# 프로그래밍 언어가 지원하는 다양한 데이터 타입을 학습합니다.
변수는 메모리 위치에 부여된 상징적 이름입니다. 변수는 컴퓨터 프로그램에서 데이터를 저장하는 데 사용됩니다.
C#에서 변수 선언하기
C#에서 변수를 선언하는 예시입니다.
int age;
이 예시에서 age라는 int(정수) 타입 변수가 선언되며, 정수 값만 저장할 수 있습니다.
프로그램 후반부에 변수에 값을 할당할 수 있습니다:
int age;
...
...
...
age = 24;
그러나 변수는 선언 시 초기화할 수도 있습니다. 예를 들어:
int age = 24;
여기서 age 변수는 int 타입으로 선언되고 동시에 24로 초기화됩니다.
변수이므로 값도 변경할 수 있습니다. 예를 들어:
int age = 24;
age = 35;
여기서 age 값이 24에서 35로 변경됩니다.
C#에서 변수는 사용 전 선언되어야 합니다. 즉, 변수의 이름과 타입이 값을 할당하기 전에 알려져야 합니다. 이것이 C#이 정적 타입 언어인 이유입니다.
한번 선언되면 변수의 데이터 타입은 범위 내에서 변경될 수 없습니다. 범위는 변수가 가시적이거나 사용 가능한 코드 블록으로 생각할 수 있습니다. 이전 문장이 이해되지 않아도 걱정 마세요. 나중에 범위에 대해 배울 것입니다.
지금은 C#에서 다음을 할 수 없다는 것만 기억하세요:
int age;
age = 24;
...
...
...
float age;
암시적 타입 변수
또는 C#에서 var 키워드를 사용해 타입을 알지 못한 채 변수를 선언할 수 있습니다. 이러한 변수를 암시적 타입 지역 변수라고 합니다.
var 키워드로 선언된 변수는 선언 시 초기화되어야 합니다.
var value = 5;
컴파일러는 변수에 할당된 값으로부터 변수 타입을 결정합니다. 위 예시에서 value는 int 타입입니다. 이는 다음과 동등합니다:
int value;
value = 5;
암시적 타입 지역 변수에 대해 더 알아보세요.
C# 변수 명명 규칙
변수 명명 시 따라야 할 특정 규칙이 있습니다. C# 변수 명명 규칙은 다음과 같습니다:
- 변수명에는 문자(대소문자), 밑줄(_), 숫자만 포함될 수 있습니다.
- 변수명은 문자, 밑줄, 또는 @ 기호로 시작해야 합니다. 예:
C# 변수 명명 규칙
| 변수명 | 비고 |
| name | 유효 |
| subject101 | 유효 |
| _age | 유효 (private 멤버 변수 명명 모범 사례) |
| @break | 유효 (이름이 예약 키워드일 때 사용) |
| 101subject | 무효 (숫자로 시작) |
| your_name | 유효 |
| your name | 무효 (공백 포함) |
- C#은 대소문자를 구분합니다. age와 Age는 서로 다른 두 변수입니다.
- 변수명은 C# 키워드일 수 없습니다. 예를 들어
if, for, using은 변수명이 될 수 없습니다. C# 키워드는 다음 튜토리얼에서 더 다룹니다.
변수 명명 모범 사례
- 의미 있는 변수명을 선택하세요. 예를 들어 name, age, subject가 n, a, s보다 더 이해하기 쉽습니다.
- 지역 변수에는 camelCase 표기법(소문자 시작)을 사용하세요. 예: numberOfStudents, age 등.
- 공개 멤버 변수에는 PascalCase 또는 CamelCase(대문자 시작)를 사용하세요. 예: FirstName, Price 등.
- 비공개 멤버 변수에는 선행 밑줄(_) 뒤에 camelCase 표기법을 사용하세요. 예: _bankBalance, _emailAddress 등.
C# 명명 규칙에 대해 더 알아보려면 여기를 참조하세요.
공개/비공개 멤버 변수에 대해서는 나중에 배웁니다.
C# 기본 데이터 타입
C# 변수는 크게 값 타입과 참조 타입으로 분류됩니다. 이 튜토리얼에서는 값 타입의 하위 클래스인 기본(단순) 데이터 타입을 다룹니다.
참조 타입은 나중에 다루겠습니다. 하지만 변수 타입에 대해 더 알고 싶다면 C# 타입과 변수(공식 C# 문서)를 방문하세요.
불리언 (bool)
- 불리언 데이터 타입은
true 또는 false 두 가지 가능한 값을 가집니다.
- 기본값:
false
- 불리언 변수는 일반적으로 if 문, 루프 등에서 조건을 확인하는 데 사용됩니다.
예시:
using System;
namespace DataType
{
class BooleanExample
{
public static void Main(string[] args)
{
bool isValid = true;
Console.WriteLine(isValid);
}
}
}
프로그램 실행 시 출력:
True
부호 있는 정수
이 데이터 타입들은 정수 값(양수와 음수)을 저장합니다. 전체 비트 중 1비트가 부호용으로 사용됩니다.
1. sbyte
- 크기: 8비트
- 범위: -128 ~ 127
- 기본값: 0
예시:
using System;
namespace DataType
{
class SByteExample
{
public static void Main(string[] args)
{
sbyte level = 23;
Console.WriteLine(level);
}
}
}
실행 시 출력:
23
범위를 벗어난 값(예: -128 미만 또는 127 초과)을 할당해 보세요.
2. short
- 크기: 16비트
- 범위: -32,768 ~ 32,767
- 기본값: 0
예시:
using System;
namespace DataType
{
class ShortExample
{
public static void Main(string[] args)
{
short value = -1109;
Console.WriteLine(value);
}
}
}
실행 시 출력:
-1109
3. int
- 크기: 32비트
- 범위: -2,147,483,648 ~ 2,147,483,647
- 기본값: 0
예시:
using System;
namespace DataType
{
class IntExample
{
public static void Main(string[] args)
{
int score = 51092;
Console.WriteLine(score);
}
}
}
실행 시 출력:
51092
4. long
- 크기: 64비트
- 범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
- 기본값:
0L [끝의 L은 long 타입임을 나타냄]
예시:
using System;
namespace DataType
{
class LongExample
{
public static void Main(string[] args)
{
long range = -7091821871L;
Console.WriteLine(range);
}
}
}
실행 시 출력:
-7091821871
부호 없는 정수
이 데이터 타입들은 0 이상의 값만 저장합니다. 음수 값이 없을 확실할 때 일반적으로 사용합니다.
1. byte
- 크기: 8비트
- 범위: 0 ~ 255
- 기본값: 0
예시:
using System;
namespace DataType
{
class ByteExample
{
public static void Main(string[] args)
{
byte age = 62;
Console.WriteLine(age);
}
}
}
실행 시 출력:
62
2. ushort
- 크기: 16비트
- 범위: 0 ~ 65,535
- 기본값: 0
예시:
using System;
namespace DataType
{
class UShortExample
{
public static void Main(string[] args)
{
ushort value = 42019;
Console.WriteLine(value);
}
}
}
실행 시 출력:
42019
3. uint
- 크기: 32비트
- 범위: 0 ~ 4,294,967,295
- 기본값: 0
예시:
using System;
namespace DataType
{
class UIntExample
{
public static void Main(string[] args)
{
uint totalScore = 1151092;
Console.WriteLine(totalScore);
}
}
}
실행 시 출력:
1151092
4. ulong
- 크기: 64비트
- 범위: 0 ~ 18,446,744,073,709,551,615
- 기본값: 0
예시:
using System;
namespace DataType
{
class ULongExample
{
public static void Main(string[] args)
{
ulong range = 17091821871L;
Console.WriteLine(range);
}
}
}
실행 시 출력:
17091821871
부동소수점
이 데이터 타입들은 소수점을 포함한 부동소수점 값을 저장합니다. 예: 12.36, -92.17 등.
1. float
- 단정밀도 부동소수점 타입
- 크기: 32비트
- 범위: 1.5 × 10⁻⁴⁵ ~ 3.4 × 10³⁸
- 기본값: 0.0F [끝의 F는 float 타입임을 나타냄]
예시:
using System;
namespace DataType
{
class FloatExample
{
public static void Main(string[] args)
{
float number = 43.27F;
Console.WriteLine(number);
}
}
}
실행 시 출력:
43.27
2. double
- 배정밀도 부동소수점 타입. 단정밀도와 배정밀도 부동소수점의 차이는?
- 크기: 64비트
- 범위: 5.0 × 10⁻³²⁴ ~ 1.7 × 10³⁰⁸
- 기본값: 0.0D [끝의 D는 double 타입임을 나타냄]
예시:
using System;
namespace DataType
{
class DoubleExample
{
public static void Main(string[] args)
{
double value = -11092.53D;
Console.WriteLine(value);
}
}
}
실행 시 출력:
-11092.53
문자 (char)
- 16비트 유니코드 문자를 표현합니다.
- 크기: 16비트
- 기본값: '\0'
- 범위: U+0000 ('\u0000') ~ U+FFFF ('\uffff')
예시:
using System;
namespace DataType
{
class CharExample
{
public static void Main(string[] args)
{
char ch1 = '\u0042';
char ch2 = 'x';
Console.WriteLine(ch1);
Console.WriteLine(ch2);
}
}
}
실행 시 출력:
B x
'B'의 유니코드 값은 '\u0042'이므로 ch1 출력 시 'B'가 출력됩니다.
데시멀 (decimal)
- 데시멀 타입은 부동소수점 타입(double, float)보다 더 높은 정밀도와 더 작은 범위를 가져 통화 계산에 적합합니다.
- 크기: 128비트
- 기본값: 0.0M [끝의 M은 decimal 타입임을 나타냄]
- 범위: (-7.9 × 10²⁸ ~ 7.9 × 10²⁸) / (10⁰ ~ 10²⁸)
예시:
using System;
namespace DataType
{
class DecimalExample
{
public static void Main(string[] args)
{
decimal bankBalance = 53005.25M;
Console.WriteLine(bankBalance);
}
}
}
실행 시 출력:
53005.25
끝에 M 또는 m 접미사를 반드시 붙여야 하며, 그렇지 않으면 double로 간주되어 오류가 발생합니다.
C# 리터럴
다음 문을 살펴봅시다:
int number = 41;
여기서:
int는 데이터 타입
- number는 변수
41은 리터럴
리터럴은 프로그램에 직접 나타나는 고정 값입니다. 계산이 필요하지 않습니다. 예: 5, false, 'w'는 프로그램에 직접 나타나는 리터럴입니다.
불리언 리터럴
true와 false가 사용 가능한 불리언 리터럴입니다.
- 불리언 변수 초기화에 사용됩니다.
예시:
bool isValid = true;
bool isPresent = false;
정수 리터럴
부동소수점 리터럴
문자와 문자열 리터럴