Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

맛있는 개발노트 (맛과 개발을 함께)

C# 세미나 자료: 확정 배정 및 기본 값 (Definite Assignment & Default Values) 본문

C# 학습/C# 언어의 기초

C# 세미나 자료: 확정 배정 및 기본 값 (Definite Assignment & Default Values)

DevGourmet 2025. 4. 8. 01:30

1. 개요

C#은 안정성과 예측 가능한 실행을 보장하기 위해 변수의 사용 전에 반드시 초기화되어야 한다는 규칙을 갖습니다. 이를 **확정 배정(definite assignment)**이라 하며, 값 형식의 변수는 초기화 없이 사용할 수 없습니다. 또한 C#은 특정 상황에서 변수의 **기본 값(default value)**을 자동 지정해주기도 합니다.

본 세미나에서는 확정 배정의 개념과 컴파일러 검사 방식, 기본 값의 의미와 사용 위치 등을 단계별로 설명합니다.


2. 확정 배정(Definite Assignment)

2.1 개념

  • 지역 변수는 명시적 초기화 없이 사용 시 컴파일 오류 발생
int x;
Console.WriteLine(x); // 오류: 사용 전에 초기화되지 않음
  • 조건문, 반복문 등에서 모든 경로에서 초기화되는지 컴파일러가 검사함
int y;
if (flag)
    y = 10;
else
    y = 20;
Console.WriteLine(y); // OK: 모든 경로에서 초기화됨

2.2 예외: 필드, 배열 요소, 클래스 멤버는 자동 초기화

class Sample
{
    int number; // 기본값 0
    bool isReady; // 기본값 false
    string name; // 기본값 null
}

3. 기본 값(Default Values)

3.1 기본값 표 (주요 값 형식)

형식기본 값

int, long, short 0
bool false
char '\0' (널 문자)
float, double 0.0
string, object null
사용자 정의 참조형 null

3.2 default 키워드 사용

int a = default;          // 0
bool b = default(bool);   // false
string s = default;       // null
  • 제네릭에서도 유용하게 사용됨
public T GetDefault<T>()
{
    return default(T);
}

4. 단계별 설명

4.1 초급: 지역 변수 초기화 오류 방지

int count = 0;
Console.WriteLine(count); // OK

4.2 중급: 조건문 내 확정 배정 검사

int value;
if (flag)
    value = 1;
// else value를 초기화하지 않으면 오류
Console.WriteLine(value); // 컴파일 오류 발생 가능
  • 모든 분기 조건에서 값이 설정되어야 함

4.3 고급: 구조체와 기본값

struct Point {
    public int X;
    public int Y;
}

Point p = default;
Console.WriteLine(p.X); // 0
  • 구조체도 모든 필드를 기본값으로 초기화함

5. 주의사항 및 팁

  • 참조형 필드는 자동 초기화되지만, 지역 변수는 반드시 수동 초기화 필요
  • default 키워드는 특히 제네릭과 함께 유용함
  • null 초기화 여부 확인 시 string.IsNullOrEmpty() 또는 == null 비교 필요
  • 구조체는 new 없이 생성 시에도 모든 필드가 0으로 초기화됨

6. 결론

  • C#의 확정 배정 규칙은 코드 안정성과 오류 방지를 위한 중요한 기능
  • 지역 변수는 항상 명시적으로 초기화할 것
  • 기본값은 타입에 따라 자동 지정되며, 필요한 경우 default 키워드로 설정 가능
  • 제네릭, 구조체, 필드 등 다양한 맥락에서 기본값 이해가 필요함

7. Q&A

Q1. 지역 변수 외에도 명시적 초기화가 필요한 게 있나요?
A1. 아니요. 필드, 배열 요소, 클래스 멤버 등은 자동으로 기본값으로 초기화됩니다.

Q2. 기본값을 null로 가지는 형식은 어떤 것인가요?
A2. string, object, class와 같은 참조형은 기본값이 null입니다.

Q3. default 키워드는 모든 형식에 사용 가능한가요?
A3. 네. 값 형식과 참조 형식 모두 지원하며, 제네릭에서도 안전하게 사용됩니다.

Q4. 구조체를 초기화하지 않고 사용할 수 있나요?
A4. new 없이 생성된 구조체도 모든 필드가 자동으로 기본값으로 초기화됩니다.