[C#] 변수

AsiaticRicecake·2026년 6월 5일

📖 1. 변수

변수는 값을 저장하기 위해 메모리에 만든 공간입니다.
흔히 "상자" 에 비유하는데, 상자에 이름을 붙이고 물건(데이터)을 넣는 것과 같습니다.

int speed;      // 정수를 저장할 공간(상자) 생성
speed = 1;      // 그 공간에 1을 저장
Console.WriteLine(speed); // 출력: 1

변수는 언제든지 값을 바꿀 수 있습니다.

int speed = 1;
speed = 4;
Console.WriteLine(speed); // 출력: 4

🔖 1-1. 왜 변수가 필요할까?

아래 코드를 보면 변수가 왜 필요한지 바로 느껴집니다.

int hp = 100;
hp = hp - 10;
// 1. hp가 100이라는 값을 기억하고
// 2. hp - 10 을 계산하고
// 3. 결과를 다시 hp에 저장
// → 이 모든 과정에서 "값을 보관할 공간"이 필요합니다

즉, 변수는 값을 잠시 보관해두는 상자 역할을 합니다.


📖 2. 상수(const)

상수는 한 번 값을 정하면 변경할 수 없는 변수입니다.

const int MAX_PLAYER_COUNT = 4;
MAX_PLAYER_COUNT = 8; // ❌ 컴파일 오류 발생!

변하면 안 되는 값(중력, 최대 레벨, 화면 크기 등)에 사용합니다.


📖 3. 자료형(Data Types)

변수를 만들 때는 어떤 종류의 데이터를 담을지 먼저 지정해야 합니다.

int    playerScore = 100;       // 정수
float  moveSpeed   = 3.5f;      // 실수 (소수점)
string playerName  = "홍길동";   // 문자열
bool   isAlive     = true;      // 참/거짓
char   grade       = 'A';      // 문자 하나

🔖 3-1. 정수형

타입크기범위용도
byte1바이트0 ~ 255작은 양수
short2바이트-32,768 ~ 32,767작은 정수
int4바이트약 ±21억가장 많이 사용
long8바이트약 ±920경매우 큰 정수

🔖 3-2. 실수형

타입크기특징
float4바이트Unity에서 주로 사용. 뒤에 f 붙임
double8바이트C# 실수 기본값. 더 정밀
decimal16바이트금융 계산용. 오차 최소화

💡 Unity 개발에서는 float을 기본으로 씁니다.
double보다 정밀도는 낮지만 성능이 좋고, Unity API 자체가 float 기준으로 설계돼 있습니다.

🔖 3-3. 문자/문자열/논리형

타입크기예시
char2바이트'A', '가'
string가변"Hello", "길동"
bool1바이트true, false

char는 작은따옴표('), string은 큰따옴표(")를 씁니다. 헷갈리기 쉬우니 주의!

// 실제로 메모리 크기를 출력해볼 수 있습니다
Console.WriteLine($"int:    {sizeof(int)} 바이트");    // 4
Console.WriteLine($"float:  {sizeof(float)} 바이트");  // 4
Console.WriteLine($"double: {sizeof(double)} 바이트"); // 8
Console.WriteLine($"char:   {sizeof(char)} 바이트");   // 2
Console.WriteLine($"bool:   {sizeof(bool)} 바이트");   // 1

📖 4. 네이밍 컨벤션 (명명 규칙)

코드는 혼자 짜는 게 아닙니다. 팀원이 봤을 때 바로 이해할 수 있는 이름을 짓는 것이 중요합니다.

🔖 4-2. 케이스 규칙 4가지

방식형태사용처
camelCaseplayerScore지역 변수, private 필드
PascalCasePlayerScore클래스명, 메서드명, public 멤버
snake_caseplayer_scorePython 문화권 (C#에선 잘 안 씀)
UPPER_SNAKE_CASEMAX_HEALTH상수(const)

🔖 4-3. C# / Unity에서의 실제 적용 예시

public class PlayerController : MonoBehaviour
{
    // public 변수 → PascalCase
    public int MaxHealth = 100;

    // private 필드 → camelCase (또는 _언더스코어 접두사)
    private int currentHealth;
    private float _moveSpeed;

    // 상수 → UPPER_SNAKE_CASE
    private const int MAX_LEVEL = 99;

    // 메서드 → PascalCase, 매개변수 → camelCase
    public void TakeDamage(int damage)
    {
        // 지역 변수 → camelCase
        int actualDamage = damage - 5;
        currentHealth -= actualDamage;
    }
}

좋은 변수명 짓는 팁

❌ 나쁜 예✅ 좋은 예이유
aplayerScore의미가 있어야 함
theCurrentPlayerHealthPointcurrentHealth너무 길면 오히려 불편
hphealth약어보다 명확한 단어가 낫다
data123itemList숫자 붙이기보단 역할을 표현

⚠️ 5. 변수 선언 시 주의사항

5-1. 변수명 규칙

int 1carSpeed;  // ❌ 숫자로 시작 불가
int car speed;  // ❌ 공백 포함 불가
int int;        // ❌ 예약어 사용 불가
int 속도;       // ⚠️ 가능은 하지만 권장하지 않음 (한글 비권장)

int carSpeed;   // ✅ 올바른 선언
  • 첫 글자는 문자 또는 _로 시작
  • 공백 포함 불가, 길이 255자 이하
  • C# 예약어(int, class, void 등) 사용 불가
  • 한글 사용은 기술적으로 가능하지만 권장하지 않음

예약어 전체 목록: Microsoft 공식 문서

5-2. 초기화하지 않은 변수는 사용 불가

int hp;
Console.WriteLine(hp); // ❌ 컴파일 오류: 할당되지 않은 변수 사용

C#은 사용 전에 반드시 값을 초기화해야 합니다.
초기화하지 않으면 메모리에 이전에 남아있던 쓰레기 값이 그대로 있을 수 있어 위험하기 때문입니다.

int hp = 100;           // ✅ 선언과 동시에 초기화
int hp;
hp = 100;               // ✅ 이렇게 나눠도 가능 (사용 전에만 초기화되면 됨)

5-3. 같은 타입 여러 개 한 번에 선언

int number1, number2, number3;
number1 = 1;
number2 = 2;
number3 = 3;

Console.WriteLine("{0}, {1}, {2}", number1, number2, number3);
// 출력: 1, 2, 3

🖥️ 6. 전체 예제 코드

static void Main(string[] args)
{
    int playerScore    = 100;
    float moveSpeed    = 3.5f;
    string playerName  = "길동";
    bool isAlive       = true;
    char grade         = 'A';

    Console.WriteLine($"이름: {playerName}");
    Console.WriteLine($"점수: {playerScore}");
    Console.WriteLine($"이동속도: {moveSpeed}");
    Console.WriteLine($"등급: {grade}");
    Console.WriteLine($"생존 여부: {isAlive}");

    // 데미지 계산 예시
    int hp = 100;
    int damage = 25;
    hp = hp - damage;
    Console.WriteLine($"피격 후 HP: {hp}"); // 75
}

📚 참고: C# 식별자 명명 규칙 - Microsoft 공식 문서

0개의 댓글