C# 기본 매개변수와 default

김효중·2025년 4월 16일

개요

C#의 기본 매개변수

C#에서 기본 매겨변수를 사용하면 매개변수의 기본값을 설정할 수 있다.

private void F1(int count = 3)

하지만 기본값에 넣을 수 있는 값은 정해져 있다.

컴파일 타임 상수

기본 매개변수는 반드시 컴파일 타임 상수여야한다.

C#에서 기본 매개변수는 반드시 "컴파일 타임 상수"여야한다.
컴파일 타임 상수란 컴파일 시점에 값이 확정되야 하는 상수이다.
즉 실행 중에 계산되거나 생성되는 값이 아니여야한다.
단순한 int, float, string, bool값이 될 수 있으며 const로 선언된 값은 컴파일 타임 상수이다.

const int myInt = 10;
const float myFloat = 3.14f;
const string myStr = "Hi";
const bool myBool = false;
void PrintNumber(int n = 5)
{
    Debug.Log(n);
}

컴파일 타임 상수가 아닌 데이터

일부 형식 또는 데이터는 컴파일 타임 상수가 아니다.
예를 들어 Vector3, Color와 같은 구조체, readonly로 선언한 값은 컴파일 타임 상수가 아니다.

static readonly int myValue = GetNumber();
Vector3 v = Vector3.zero;
Color c = new Color(1, 1, 1);

// 잘못된 선언
void F1(Vector3 p = Vector3.zero) 
{
}

그렇기에 위와 같이 기본 매개변수로 특정 Vector3을 넣을 수 없다.

해결방법: default

Vector3, Color와 같은 타입을 기본 매개변수로 넣을 경우에는 default를 대신 사용한다.

// 올바른 선언
void F1(Vector3 pos = default) 
{
}

위와 같이 기본값에 default를 사용하고 함수 내부적으로 pos가 default인지 검사하는 로직을 추가할 수 있다.

타입별 default

각 타입별로 default가 어떤식으로 지정 되는지는 다음과 같다.

Vector2 -> (0,0)
Vector3 -> (0,0,0)
Color -> (0, 0, 0, 0)
Quaternion -> (0, 0, 0, 0)
Bounds / Rect -> (0,0,0)
Ray -> 원점과 방향이 0
RaycastHit -> 모두 0

profile
도전하는 개발자

0개의 댓글