| 자료형 | .NET 데이터 타입 | 크기 (바이트) | 범위 |
|---|---|---|---|
sbyte | System.SByte | 1 | -128 ~ 127 |
byte | System.Byte | 1 | 0 ~ 255 |
short | System.Int16 | 2 | -32,768 ~ 32,767 |
ushort | System.UInt16 | 2 | 0 ~ 65,535 |
int | System.Int32 | 4 | -2,147,483,648 ~ 2,147,483,647 |
uint | System.UInt32 | 4 | 0 ~ 4,294,967,295 |
long | System.Int64 | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
ulong | System.UInt64 | 8 | 0 ~ 18,446,744,073,709,551,615 |
float | System.Single | 4 | ±1.5 × 10⁻⁴⁵ ~ ±3.4 × 10³⁸ |
double | System.Double | 8 | ±5.0 × 10⁻³²⁴ ~ ±1.7 × 10³⁰⁸ |
decimal | System.Decimal | 16 | ±1.0 × 10⁻²⁸ ~ ±7.9 × 10²⁸ |
char | System.Char | 2 | 유니코드 문자 |
string | System.String | 가변 | 유니코드 문자열 |
bool | System.Boolean | 1 | true 또는 false |
자료형의 크기, 표현 범위, 부호 여부에 따라 세분화된 자료형으로 구분된다.
리터럴의 개념과 역할
-> 프로그램에서 직접 사용되는 상수 값으로, 소스 코드에 직접 기록되어 있는 값
Ex) int x = 15; 에서의 15는 리터럴
-> C#에서 리터럴은 컴파일러에 의해 고정된 상수 값으로 처리되며, 변수나 상수에 할당되거나 연산에 사용된다.
Ex) int y = 3 + 4; 에서 3, 4 는 리터럴이며 연산에 사용됨
리터럴의 종류와 예시
| 리터럴 종류 | 설명 | 예시 |
|---|---|---|
| 정수형 리터럴 | 정수 값을 나타냄 | 10, -5, 0, 0b1010, 0xFF |
| 실수형 리터럴 | 실수 값을 나타냄 | 3.14, -0.01, 2.5f, 1.2e3 |
| 문자 리터럴 | 단일 문자 (작은 따옴표로 감쌈) | 'A', '1', '\n', '\u0041' |
| 문자열 리터럴 | 문자열 (큰 따옴표로 감쌈) | "Hello", "123", "Line\nBreak" |
| 불리언 리터럴 | 논리 값 (true/false) | true, false |
| null 리터럴 | 참조형 변수에 아무 값도 없음을 표현 | null |
| 개체 리터럴 | 객체를 직접 초기화하는 리터럴 형태 | new Point { X = 1, Y = 2 } |
| 배열 리터럴 | 배열을 직접 초기화하는 형태 | new int[] { 1, 2, 3 } |
int num = 12;
float f = 3.14f;
char c = 'J';
string str = "String literal";
변수 선언 시 자료형에 따라 저장 가능한 데이터의 종류와 크기가 결정됨
변수명은 해당 데이터의 의미를 표현하는 것이 좋음.
Ex) 플레이어의 체력 = playerHp
>>> 변수 선언
자료형 변수이름;
int playerHp; // 변수 하나만 선언
int playerMp, playerLevel, playerExp; // 한번에 여러 변수 선언
>>> 변수 초기화
변수명 = 값;
playerHp = 100;
int playerGold = 0; // 변수 선언과 초기화 한 번에 수행
playerMp = playerLevel = playerExp = 0; // 한번에 여러개의 변수 초기화 가능
float f1, f2, f3 = 20f; // 잘못된 방식
키워드 (Keywords)
-> C#에서 특별한 의미를 가지며, 미리 정의되어 있는 단어들은 변수나 메서드의 이름 등으로 사용할 수 없다.
Ex) int, float, class, if, else, return, void, public, private, static 등
식별자 (Identifiers)
-> 개발자가 직접 정의하는 이름들
PascalCase: 첫 글자는 대문자로 시작, 이후 단어의 첫 글자도 대문자.
-> 보통 클래스, 메서드, 프로퍼티 이름 등에 사용
camelCase: 첫 글자는 소문자로 시작, 이후 단어의 첫 글자는 대문자.
-> 보통 변수, 매개변수, 로컬 변수 이름 등에 사용
| 요소 | 컨벤션 예시 | 설명 |
|---|---|---|
| 클래스 이름 | PlayerController | PascalCase 사용 |
| 메서드 이름 | TakeDamage() | PascalCase 사용 |
| 변수 이름 | playerHp | camelCase 사용 |
| 상수 이름 | MAX_SPEED | 대문자 + 언더스코어 사용 |
| 인터페이스 이름 | ICharacter | 접두어 I 사용 + PascalCase |
// 일반적인 컨벤션을 사용한 코드 예시
public class PlayerController
{
private int currentHealth;
private const int MAX_HEALTH = 100;
public void TakeDamage(int amount)
{
currentHealth -= amount;
}
}
-> 개발자가 변환할 자료형을 명시적으로 지정하는 방식, 원래 자료형과 변환할 자료형이 호환될 때 사용
>>> (자료형) 형식으로 수행
double d = 9.7;
int i = (int)d; // 명시적 형변환
-> 컴파일러가 자동으로 형변환을 수행하는 방식, 손실 없이 데이터 타입 간에 변환이 가능할 때 자동으로 수행된다.
int i = 9;
double d = i; // 암시적 형변환
var number = 10; // int로 추론됨
var name = "Hello"; // string으로 추론됨
var isActive = true; // bool로 추론됨
var list = new List<int>(); // List<int>로 추론됨
타입이 명확하지 않으면 코드를 읽기 어려워질 수 있기 때문에, 가독성이 떨어질 수 있음.
타입이 명확하게 드러나는 경우에 사용하는 것이 좋음