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을 넣을 수 없다.
Vector3, Color와 같은 타입을 기본 매개변수로 넣을 경우에는 default를 대신 사용한다.
// 올바른 선언
void F1(Vector3 pos = default)
{
}
위와 같이 기본값에 default를 사용하고 함수 내부적으로 pos가 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