# defaultValue에 대한 사용자 가이드

defaultValue는 RecordConfig 타입에 포함된 속성으로, 새로운 레코드가 추가되었을 때 특정 컬럼의 기본값을 설정하는데 사용됩니다.

이 속성은 다음 세 가지 형태를 가질 수 있습니다:

- 직접 값을 반환하는 함수
- 함수의 이름과 인자들을 포함하는 객체
- 고정 값을 직접 지정

1. 직접 값을 반환하는 함수를 사용하는 경우
   이 경우, defaultValue는 아래와 같이 함수를 직접 할당합니다. 이 함수는 특정 컬럼의 기본값을 반환합니다.

```javascript
const gristConfig = {
  columns: [
  ..., {
    type: 'string',
    ...
    record: {
      ...,
      defaultValue: () => 'Default Value'
    }
  },
  ...
  ],
  ...
}
```

위 코드에서, 새 레코드가 추가되거나, 필드값이 새롭게 입력될 때마다 해당 컬럼의 기본값은 항상 "Default Value"가 됩니다.
이 경우 함수의 this로는 해당 레코드가 바인드됩니다.

### 2. 함수의 이름과 인자들을 포함하는 객체를 사용하는 경우

이 경우, `defaultValue`는 아래와 같이 함수의 이름과 인자들을 포함하는 객체를 할당합니다.

```javascript
const gristConfig = {
  columns: [
  ..., {
    type: 'date',
    ...
    record: {
      ...,
      defaultValue: {
        name: 'getRelativeDate',
        params: [{
          relativeDays: -1 // yesterday
        }]
      }
    }
  },
  ...
  ],
  ...
}
```

위 코드에서, 새 레코드가 추가될 때마다 'getRelativeDate'라는 이름의 함수가 호출되고, params 가 이 함수의 인자로 전달됩니다. 이 함수는 특정 컬럼의 기본값을 반환합니다.
'getRelativeDate' 함수는 registerValueGenerator로 미리 등록되어야 합니다.
이 경우 함수의 this로는 해당 레코드가 바인드됩니다.

기본적으로 제공되는 함수는 다음과 같습니다.

- [now](./value-generator/now-generator.md) : getCurrentTime과 동일
- [time](./value-generator/getRelativeTime.md) : getRelativeTime과 동일
- [today](./value-generator/today-generator.md) : getToday와 동일
- [date](./value-generator/date-generator.md) : getRelativeDate와 동일
- [getCurrentTime](./value-generator/now-generator.md)
- [getRelativeTime](./value-generator/time-generator.md)
- [getToday](./value-generator/today-generator.md)
- [getRelativeDate](./value-generator/date-generator.md)
- [getRelativeWeekDate](./value-generator/week-date-generator.md)
- [getRelativeMonthDate](./value-generator/month-date-generator.md)
- [getRelativeYearDate](./value-generator/year-date-generator.md)
- [getRelativeMinuteTime](./value-generator/minute-time-generator.md)
- [getRelativeHourTime](./value-generator/hour-time-generator.md)

### 3. 기본값을 고정하여 직접적으로 설정하는 경우

```javascript
const gristConfig = {
  columns: [
  ..., {
    type: 'number',
    ...
    record: {
      ...,
      defaultValue: 25 // 값 25가 할당됨.
    }
  },
  ...
  ],
  ...
}
```
