# 코딩 컨벤션

## 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 프로젝트 전체에서 일관된 스타일을 유지할 수 있습니다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.aliothx.net/start/flutter/code/undefined-1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
