> For the complete documentation index, see [llms.txt](https://seunghyun-kim-1.gitbook.io/my-knowledge-library/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://seunghyun-kim-1.gitbook.io/my-knowledge-library/jetbrains-academy/kotlin-basics/coffee-machine/buy-fill-take/naming-variables.md).

# Naming variables

## Why naming is important

아시다시피, 모든 변수는 그것을 식별하는 고유한 이름을 가져야 합니다. 변수 이름은 쉽게 지정할 수 있지만 사실은 아닙니다. 경험있는 개발자들은 변수의 이름을 선택하는 데 매우 신중하기에 그들의 코드를 쉽게 이해할 수 있습니다. 코드 스타일 규칙과 마찬가지로 다른 사람들이 작성한 코드를 읽는데 많은 시간을 소비하기에 변수의 이름을 짓는 것은 매우 중요합니다. 만약 나쁜 변수 이름을 짓는다면 코드를 읽기 어렵게 됩니다.

어떻게 하면 이를 피할 수 있을까요? 항상 모든 변수에 간결한 이름과 어떤 역할을 가지는지 알 수 있는 이름을 부여해야합니다. 이렇게 된다면 당신의 동료들은 당신의 코드를 쉽게 이해할 것입니다.

## Naming rules

규칙:

* 대소문자를 구분합니다 (`number` 은 `Number` 과 같지 않습니다);
* 각 변수에는 문자, 숫자 및 밑줄만 포함될 수 있습니다;
* 변수명을 숫자로 시작할 수 없습니다;
* 변수명을 예약어로 지을 수 없습니다 (`val`, `var`, `fun` 와 같은).

변수 이름에 공백을 사용할 수 없습니다 하지만 백틱이 있는 경우에는 사용할 수 있습니다:

```kotlin
val `good name` = 5
val bad name = 2 // will not work
```

> 규칙을 어긴다면 프로그램은 작동하지 않을 것 입니다.

유효한 변수명:

```kotlin
score, level, fruitType, i, j, abc, _cost, number1, `name with space`, Int
```

유효하지 않은 변수명:

```kotlin
@pple, $dollar, 1number, !ab, val, var, _, name with space
```

## Conventions for naming variables

Kotlin이 제공하는 규칙:

* 변수명이 한 단어인 경우 소문자로 입력합니다 (for example — `number`, `value`);
* 변수명에 여러 단어가 포함될 경우 `lowerCamelCase` 를 사용합니다, 따라서 첫번째 단어는 소문자로 그 뒤 다른 단어가 시작될 때는 대문자를 사용합니다 (for example — `numberOfCoins`);
* `_` 밑줄로 변수를 시작하지 않습니다;
* 변수에 대해 의미 있는 이름을 선택합니다. 예를 들어 `s` 대신 `score`

## Magic numbers

이제 정수 이름과 그 사용법에 대해 이야기 해보겠습니다. 때때로 코드에 상수를 사용해야 합니다. 예를 들어 항상 7인 평일의 수를 출력하려는 경우입니다. 그러나 밑의 코드는 그다지 유용하지 않습니다.

```kotlin
println(7)
```

무엇이 `7` 인가요? 왜 출력 되나요? 잘 모르겠네요. 코드에서는 이러한 값을 **magic numbers** 라고 합니다. 매직 넘버는 반드시 숫자일 필요는 없습니다. 데이터 유형에 관한 것이 아니라 변수의 본질에 관한 것입니다. 코드를 읽는 사람은 이게 무엇을 위한 것인지 무엇을 의미하는 것인지 모르기 때문에 피해야합니다.

그렇다면 우리는 어떻게 해야할까요?

첫번째로 이러한 값은 상수에 저장되어야 합니다. `val` 로 선언하는 것에 대해서 말하는 것이 아닙니다. 상수는 `main()` 함수 또는 다른 함수의 외부에 있는 `const val` 로 표시하는 값을 의미합니다. 이것은 완전히 변하지 않는 상수입니다.

```kotlin
const val DAYS_OF_THE_WEEK = 7

fun main() {
    // ...
    println(DAYS_OF_THE_WEEK) // 7
    // ...
}
```

두번째로, 상수명은 의미가 있어야 하며 이름을 지정할 때는 `SCREAMING_SNAKE_CASE` 를 사용합니다. 나쁜 예를 가지는 상수명:

```kotlin
const val s = 4
```

위 코드는 컴파일 되지만 어떤 역할을 갖는지 알 수 없습니다

좋은 예를 가지는 상수명:

```kotlin
const val SEASONS = 4
```

> 상수를 생성하면 의미 있게 이름을 지어야하고, 해당 값을 상수로 대체합니다.
