# 코딩 컨벤션

## Effective Dart: Style

{% embed url="<https://dart.dev/effective-dart/style>" %}

좋은 코드의 중요한 부분 중 하나로, 일관된 명명, 순서 및 형식은 코드가 통일되어 보이도록 도와줍니다. Dart에서 일관된 스타일을 사용하면 서로의 코드를 이해하기 쉬워집니다.

## 식별자&#x20;

### UpperCamelCase

각 단어의 첫 글자를 대문자로 표기합니다.

#### 유형 이름 표기

```dart
class SliderMenu { ... }

class HttpRequest { ... }

typedef Predicate<T> = bool Function(T value);
```

클래스, 열거형 유형, typedef 및 유형 매개변수는 각 단어의 첫 글자를 대문자로 표기하고 구분자를 사용하지 않아야 합니다.

#### 확장(extension) 이름 표기

```dart
extension MyFancyList<T> on List<T> { ... }

extension SmartIterable<T> on Iterable<T> { ... }
```

확장(extension) 또한 각 단어의 첫 글자를 대문자로 표기하고 구분자를 사용하지 않아야 합니다.

### lowercase\_with\_underscores

모든 문자를 소문자로 표기하며, 밑줄(\_)로 단어를 구분합니다.

#### 디렉토리 및 소스 파일 이름 표기

```dart
my_package
└─ lib
   └─ file_system.dart
   └─ slider_menu.dart
```

파일 이름 및 패키지 이름은 lowercase\_with\_underscores 방식을 사용해야 합니다.

#### import 접두사(prefixes) 표기

```dart
import 'dart:math' as math;
import 'package:angular_components/angular_components.dart' as angular_components;
```

import 문의 접두사(prefix)는 lowercase\_with\_underscores 방식을 사용해야 합니다.

### lowerCamelCase

&#x20;첫 글자를 제외한 각 단어의 첫 글자를 대문자로 표기하며, 첫 번째 단어는 항상 소문자로 표기합니다.

```dart
var count = 3;

HttpRequest httpRequest;

void align(bool clearItems) {
  // ...
}
```

클래스 멤버, 최상위 정의, 변수, 매개변수 및 명명된 매개변수는 첫 번째 단어를 제외한 각 단어의 첫 글자를 대문자로 표기하고 구분자를 사용하지 않아야 합니다.

* 상수를 표현할 때: SCREAMING\_CAPS 방식의 표기가 가능하나, 가능한 경우 lowerCamelCase를 사용하는 것이 좋습니다.

#### 상수 이름

```dart
const pi = 3.14;
const defaultTimeout = 1000;
final urlScheme = RegExp('^([a-z]+):');

class Dice {
  static final numberGenerator = Random();
}
```

SCREAMING\_CAPS 방식의 표기가 가능하나, 가능한 경우 상수 변수, 열거형 값 포함해 상수 이름에는lowerCamelCase를 사용하는 것이 좋습니다.&#x20;

#### 두 글자 이상인 약어 및 머리글자

```dart
class HttpConnection {}
class DBIOPort {}
class TVVcr {}
class MrRogers {}

var httpRequest = ...
var uiHandler = ...
var userId = ...
Id id;
```

두 글자 이상의 약어는 단어처럼 대문자로 표기해야 하며, 머리글자(첫 글자) 또한 대문자로 표기해야 합니다.

#### 사용되지 않는 콜백 매개변수

```dart
futureOfVoid.then((_) {
  print('Operation complete.');
});
```

콜백 함수의 형식에 따라 매개변수가 필요하지만 구현에서 사용되지 않는 경우, 사용되지 않는 매개변수는 \_로 명명하는 것이 관용적입니다. 여러 개의 사용되지 않는 매개변수가 있는 경우, 이름 충돌을 피하기 위해 추가적인 밑줄을 사용할 수 있습니다.

#### 비공개(private) 식별자가 아닌 경우&#x20;

로컬 변수, 매개변수, 로컬 함수 또는 라이브러리 접두사에 선행 밑줄을 사용하지 않아야 합니다.

#### 라이브러리 이름

라이브러리 지시문에 이름을 추가하는 것은 레거시 기능이며 권장되지 않으며, 이름을 명시적으로 지정하지 않는 것을 선호합니다.&#x20;

#### 지시문 순서

지시문의 순서에는 정해진 규칙이 있으며, ***`dart: import`***&#xAC00; 다른 ***`import`*** 앞에 위치해야 합니다. ***`package: import`***&#xB294; 상대적인 ***`import`*** 앞에 위치해야 하며, ***`export`***&#xB294; ***`import`*** 다음에 따로 표기되어야 합니다.

#### 코드 형식 지키기

코드 형식은 보기에 도움이 되며, 코드 가독성을 향상시키기 위해 dart format을 사용하는 것이 좋습니다.

#### 80자 이상의 줄을 피하기

80자 이상의 줄은 일반적으로 가독성을 저하시킬 수 있으므로 피하는 것이 좋습니다. 단, 주석이나 문자열 내에서 URI 또는 파일 경로가 나타나는 경우에는 예외가 될 수 있습니다.

#### 모든 제어문

모든 제어문에 중괄호를 사용하여 "떨어지는 else" 문제를 방지하는 것이 좋습니다.

이러한 가이드라인을 따르면 코드를 더 읽기 쉽게 만들 수 있고, Dart 프로젝트 전체에서 일관된 스타일을 유지할 수 있습니다.
