---
id: wiki-2026-0508-naming-conventions
title: Naming Conventions
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Code Naming, Identifier Conventions]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [code-style, conventions, readability]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: multi
  framework: cross-language
---

# Naming Conventions

## 매 한 줄
> **"매 names 매 code 매 most-read interface — 매 정확/예측가능/검색가능 매 핵심 경제재"**. Casing styles (camelCase, snake_case, PascalCase, kebab-case, SCREAMING_SNAKE) 매 language idiom 매 정해지며 매 semantic precision (boolean prefix `is/has`, async suffix, no abbreviation) 매 readability 의 진짜 lever.

## 매 핵심

### 매 casing styles
- **camelCase**: `userName` — JS/TS variables, Java methods.
- **PascalCase**: `UserProfile` — types, classes, React components.
- **snake_case**: `user_name` — Python, Ruby, Rust variables, SQL.
- **kebab-case**: `user-profile` — file names (web), CSS classes, URLs, npm packages.
- **SCREAMING_SNAKE**: `MAX_RETRIES` — constants 매 모든 language.

### 매 language idioms
- **JavaScript/TypeScript**: camelCase var, PascalCase type/class/component, SCREAMING_SNAKE const, kebab-case file.
- **Python**: snake_case 매 모든 매 (var/func/module), PascalCase class, SCREAMING_SNAKE const.
- **Rust**: snake_case var/func/module, PascalCase type/trait/enum, SCREAMING_SNAKE const.
- **Go**: camelCase (unexported) / PascalCase (exported), 매 underscore X.
- **Java/C#**: camelCase var/method, PascalCase class, SCREAMING_SNAKE const.
- **CSS**: kebab-case (BEM block__element--modifier).

### 매 응용
1. Code review enforcement (linter rules).
2. Refactor automation (regex-safe renaming).
3. API design (URL kebab vs JSON camelCase).
4. Cross-language interop (serialization mapping).

## 💻 패턴

### Boolean naming
```ts
// 매 BAD
const loading = true
const visible = false
const adult = true

// 매 GOOD — predicate-style prefix
const isLoading = true
const isVisible = false
const isAdult = true
const hasPermission = true
const canEdit = false
const shouldRefresh = true
```

### Function naming (verb-first)
```ts
// 매 BAD
function user(id) { /* ambiguous: getter? setter? */ }

// 매 GOOD
function getUser(id) { /* read */ }
function fetchUser(id) { /* network */ }
function createUser(data) { /* persist */ }
function updateUser(id, patch) { /* mutate */ }
function deleteUser(id) { /* remove */ }
function isUserActive(user) { /* predicate */ }
```

### Async suffix / event handler prefix
```ts
// 매 GOOD
async function loadDataAsync() { } // 매 optional, depends on team
const handleClick = () => { }      // React handler
const onClick = () => { }          // 매 component prop
```

### Collection plurality
```ts
// 매 BAD
const user = [u1, u2, u3] // 매 array 인지 single 인지 모호
const userList = [...]    // "List" suffix 매 redundant

// 매 GOOD
const users = [u1, u2, u3]
const usersById = new Map()  // shape suffix
const usersByEmail = new Map()
```

### Constants vs config
```ts
// 매 SCREAMING_SNAKE — 매 immutable primitive
const MAX_RETRIES = 3
const API_BASE_URL = 'https://api.example.com'

// 매 camelCase — 매 config object (still const)
const apiConfig = {
  baseUrl: 'https://api.example.com',
  timeout: 5000,
}
```

### File naming
```
# 매 React/Vue components
UserProfile.tsx        # PascalCase (component)
user-profile.css       # kebab-case (asset)

# 매 Python
user_profile.py        # snake_case
test_user_profile.py   # 매 test_ prefix

# 매 Go
user_profile.go        # snake_case
user_profile_test.go   # _test.go suffix

# 매 docs
README.md              # SCREAMING (convention)
naming-conventions.md  # kebab-case
```

### Avoid abbreviation (with exceptions)
```ts
// 매 BAD
const usr = ...
const cfg = ...
const btnClkHndlr = ...

// 매 GOOD
const user = ...
const config = ...
const handleButtonClick = ...

// 매 OK exceptions — universal abbreviations
id, url, http, json, db, api, ui, css, html, ms (millisecond), idx (loop index)
```

### Domain prefix vs suffix
```ts
// 매 prefix — 매 grouping advantage (autocomplete)
function userGet() {}
function userCreate() {}
function userDelete() {}

// 매 suffix — 매 verb-first natural
function getUser() {}
function createUser() {}
function deleteUser() {}

// 매 modern preference: verb-first (suffix domain)
```

### URL / API naming
```
GET  /api/users              ← kebab plural noun
GET  /api/users/{id}
POST /api/users/{id}/orders
GET  /api/order-statuses     ← kebab compound

# 매 NOT
GET  /api/getUser            ← verb in URL — 매 X
GET  /api/User               ← PascalCase — 매 X
GET  /api/user_list          ← snake — 매 X (web convention)
```

### JSON field convention
```jsonc
// 매 JS-consuming API: camelCase
{ "userId": 1, "createdAt": "2026-05-10" }

// 매 Python/Ruby ecosystem: snake_case
{ "user_id": 1, "created_at": "2026-05-10" }

// 매 cross-platform: pick one + serialize-time transform
```

### Linter enforcement (ESLint)
```jsonc
// .eslintrc.json
{
  "rules": {
    "@typescript-eslint/naming-convention": [
      "error",
      { "selector": "variable", "format": ["camelCase", "UPPER_CASE"] },
      { "selector": "function", "format": ["camelCase"] },
      { "selector": "typeLike", "format": ["PascalCase"] },
      { "selector": "enumMember", "format": ["UPPER_CASE"] },
      { "selector": "variable", "modifiers": ["const"], "types": ["boolean"], "format": ["camelCase"], "prefix": ["is", "has", "can", "should"] }
    ]
  }
}
```

## 매 결정 기준
| 상황 | Style |
|---|---|
| JS/TS variable | camelCase |
| JS/TS type/class | PascalCase |
| JS/TS const primitive | SCREAMING_SNAKE |
| JS/TS const object | camelCase |
| Python var/func | snake_case |
| File (web asset/url) | kebab-case |
| File (component) | PascalCase |
| File (Python) | snake_case |
| Boolean | `is/has/can/should` prefix |
| Predicate function | `isX/hasX/canX` |
| URL path | kebab plural noun, no verb |

**기본값**: 매 language idiom 매 따라 매 + 매 boolean 매 predicate prefix + 매 verb-first function.

## 🔗 Graph
- 변형: [[BEM]] (CSS) ·  (legacy)
- 응용: [[ESLint]] · [[API-Design]]
- Adjacent: [[Clean-Code]]

## 🤖 LLM 활용
**언제**: 매 새 codebase setup, 매 cross-language API design, 매 linter config, 매 code review checklist.
**언제 X**: 매 short script (overhead), 매 generated code (machine-driven naming OK).

## ❌ 안티패턴
- **Hungarian notation**: `strName`, `iCount` — 매 type system 매 redundant.
- **Cryptic abbreviation**: `getUsrPrf()` — 매 readability 의 X.
- **Inconsistent casing**: 매 mixed style 매 한 codebase — 매 cognitive overhead.
- **Verb in URL**: `/api/getUser` — 매 RESTful 의 X.
- **Plural type name**: `Users` 매 single user type — 매 misleading.
- **Negation prefix**: `isNotReady` — 매 double-negative 위험 — `isReady` + `!isReady` 사용.

## 🧪 검증 / 중복
- Verified (Airbnb Style Guide, PEP 8, Google Style Guides, Rust API guidelines).
- 신뢰도 A.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — casing matrix + boolean/function/file/URL conventions + ESLint enforcement |
