-
Notifications
You must be signed in to change notification settings - Fork 2
π§© Coding convention
μ°Έκ³ :
eslint-config-airbnb
Airbnb JavaScript Style Guide
Airbnb JavaScript Style Guide - kr
Integrating Prettier + ESLint + Airbnb Style Guide in VSCode
μ½λ© 컨벀μ , κ°λ μ±μ΄ μ’κ³ μ μ§λ³΄μκ° μ©μ΄ν μ½λλ₯Ό μμ±νκΈ° μν μ½λ© μ€νμΌ κ·μ½. μ½λ© 컨벀μ μ μ€μνλ©΄ μ±λ₯μ μν₯μ μ£Όκ±°λ μ€λ₯λ₯Ό λ°μμν€λ μ μ¬μ μν μμλ₯Ό μ€μΌ μ μλ€.
- λ€μν κΈ°μ
μ μ½λ© 컨벀μ
Airbnb Style Guide - λ³Έ νλ‘μ νΈ μ¬μ© 컨벀μ
JavaScript Standard Style
Idiomatic JavaScript Style Guide
Google Style Guide
- npmκ³Ό npxλ₯Ό μ€μΉνλ€.
- VSCode μ΅μ€ν μ ESLint, Prettierλ₯Ό μ€μΉνλ€.
- ESLintμ Prettier λΌμ΄λΈλ¬λ¦¬λ₯Ό νλ‘μ νΈμ μ€μΉνλ€. νλ‘μ νΈμ λ£¨νΈ λλ ν 리μμ λ€μ λͺ λ Ήμ΄λ₯Ό μ€ννλ€.
> npm install -D eslint prettier- Airbnb configλ₯Ό μ€μΉνλ€. npm 5+λ₯Ό μ¬μ©νλ€λ©΄ λ€μ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ λͺ¨λ ν¨ν€μ§λ₯Ό μ€μΉν μ μλ€.
> npx install-peerdeps --dev eslint-config-airbnb- eslint-config-prettierμ eslint-plugin-prettierλ₯Ό μ€μΉνλ€.
> npm install -D eslint-config-prettier eslint-plugin-prettier- νλ‘μ νΈμ λ£¨νΈ λλ ν 리μ
.eslintrc.jsonνμΌμ μμ±νκ³ λ€μ λ΄μ©μ μμ±νλ€.
{
"extends": ["airbnb", "prettier"], //μ΄ μ€μ νμΌμ airbnb μ€νμΌ κ°μ΄λμ prettierμ μ€νμΌ κ°μ΄λλ₯Ό νμ₯νλ€.
"plugins": ["prettier"], //prettier νλ¬κ·ΈμΈμ μ¬μ©νλ€.
"rules": {
"prettier/prettier": ["error"], //prettierμμ λ°μν λͺ¨λ μ€νμΌ κ²½κ³ λ₯Ό μλ¬λ‘ μ·¨κΈνλ€.
"no-unused-vars": "warn", //μ μΈνμΌλ μ¬μ©λμ§ μμ λ³μκ° μλ€λ©΄ κ²½κ³ λ‘ νμνλ€.
"no-undef": "off" //μ μ μλ κ°μ λν΄ κ²½κ³ λ₯Ό λλ€.
},
"env": {
"browser": true, //λΈλΌμ°μ νκ²½μμ μλν μ§ μ¬λΆλ₯Ό μ€μ νλ€.
"node": true, //Node νκ²½μμ μλν μ§ μ¬λΆλ₯Ό μ€μ νλ€.
"es2021": true //ECMAScript 2021 νμ€μ μ§μν μ§ μ¬λΆλ₯Ό μ€μ νλ€.
},
"overrides": [
{
"env": {
"node": true //Node νκ²½μμ μλν μ§ μ¬λΆλ₯Ό μ€μ νλ€.
},
"files": [".eslintrc.{js,cjs}"], //μ΄ μ€μ μ΄ μ μ©λλ νμΌλ€μ ν¨ν΄μ λͺ
μνλ€.
"parserOptions": {
"sourceType": "script" //μ€μ νμΌμ μμ€ νμ
μ 'script'λ‘ λͺ
μνλ€.
}
}
],
"parserOptions": {
"ecmaVersion": "latest", //λ§μ§λ§ ECMASclimaμ λ²μ μ μ¬μ©ν΄ νμ±νλ€.
"sourceType": "module" //μ 체 νλ‘μ νΈμ μμ€ νμ
μ 'module'λ‘ λͺ
μνλ€.
}
}- νλ‘μ νΈμ λ£¨νΈ λλ ν 리μ
.prettierrcνμΌμ μμ±νκ³ Prettier config fileμ μ°Έκ³ νμ¬ μνλ ν¬λ§·ν μ΅μ μ μ€μ νλ€.
{
"arrowParens": "avoid", // νμ΄ν ν¨μ κ΄νΈ μ¬μ© λ°©μ
"bracketSpacing": false, // κ°μ²΄ 리ν°λ΄μμ κ΄νΈμ 곡백 μ½μ
μ¬λΆ
"endOfLine": "auto", // EoF λ°©μ, OSλ³λ‘ μ²λ¦¬ λ°©μμ΄ λ€λ¦
"htmlWhitespaceSensitivity": "css", // HTML 곡백 κ°λ μ€μ
"jsxBracketSameLine": false, // JSXμ λ§μ§λ§ `>`λ₯Ό λ€μ μ€λ‘ λ΄λ¦΄μ§ μ¬λΆ
"jsxSingleQuote": true, // JSXμ singe μΏΌν
μ΄μ
μ¬μ© μ¬λΆ
"printWidth": 100, // μ€ λ°κΏ ν ν κΈΈμ΄
"proseWrap": "preserve", // markdown ν
μ€νΈμ μ€λ°κΏ λ°©μ (v1.8.2)
"quoteProps": "as-needed", // κ°μ²΄ μμ±μ μΏΌν
μ΄μ
μ μ© λ°©μ
"semi": true, // μΈλ―Έμ½λ‘ μ¬μ© μ¬λΆ
"singleQuote": true, // single μΏΌν
μ΄μ
μ¬μ© μ¬λΆ
"tabWidth": 2, // ν λλΉ
"trailingComma": "all", // μ¬λ¬ μ€μ μ¬μ©ν λ, νν μ½€λ§ μ¬μ© λ°©μ
"useTabs": false, // ν μ¬μ© μ¬λΆ
"rangeStart": 0, // ν¬λ§·ν
μ λΆλΆ μ μ©ν νμΌμ μμ λΌμΈ μ§μ
"requirePragma": false, // νμΌ μλ¨μ 미리 μ μλ μ£Όμμ μμ±νκ³ Pragmaλ‘ ν¬λ§·ν
μ¬μ© μ¬λΆ μ§μ (v1.8.0)
"insertPragma": false, // 미리 μ μλ @format markerμ μ¬μ© μ¬λΆ (v1.8.0)
"overrides": [
{
"files": "*.json",
"options": {
"printWidth": 200
}
}
], // νΉμ νμΌλ³λ‘ μ΅μ
μ λ€λ₯΄κ² μ§μ ν¨, ESLint λ°©μ μ¬μ©
}
- VSCodeμ User Setting νμΌ(setting.json)μ
"editor.formatOnSave": trueλ₯Ό μ½μ νλ€.
- λ¨μ΄λ₯Ό μλ΅νκ±°λ μ½μ΄λ₯Ό μ¬μ©νμ§ μλλ€. λ¨, HTML,URL λ±κ³Ό κ°μ λ²μ©μ μΈ μ½μ΄λ μ¬μ©ν μ μλ€. μ½μ΄ μ¬μ©μμλ λͺ¨λ λλ¬Έμλ‘ μμ±νλ€.
- νκΈ λ°μμ λ‘λ§μλ‘ κ·Έλλ‘ νκΈ°νμ§ μλλ€
- νΉμ λ¬Έμλ κ°κΈμ μ¬μ©νμ§ μλλ€. λ¨, μμμ μ΄λ¦μμ λ¨μ΄λ₯Ό ꡬλΆνκΈ° μν μ©λμ Private μ§μμ νμλ₯Ό μνμ¬ μΈλμ€μ½μ΄(_)λ₯Ό μ¬μ©νλ€
- 2κΈμ μ΄μ λλ¬Έμλ₯Ό μ°μν΄μ μ¬μ©νμ§ μλλ€. λ¨, μμ μ΄λ¦μ΄λ μ½μ΄λ μμΈλ‘ νλ€
- μμ μ΄λ¦μ΄λ μ½μ΄ μ΄λ¦μ λλ¬Έμλ₯Ό μ¬μ©νλ€
- μ΄λ¦μ ν΅ν΄ μν κ³Ό λͺ©μ μ ν μ μλλ‘ κ°κ²°νκ³ λͺ λ£νκ² μμ±νλ€
3.1 ν¨μ: μΉ΄λ© νκΈ°λ² (CamelCase)
- λμ¬λ₯Ό μ¬μ©νμ¬ μμ±νλ€
- μΉ΄λ© νκΈ°λ²μ μ€μνλ€. 볡ν©μ΄ μ΄λ¦μ 첫 λ²μ§Έ λ¨μ΄λ₯Ό μλ¬Έμλ‘ μμ±νκ³ , λ λ²μ§Έ μ΄μμ λ¨μ΄ 첫 κΈμλ₯Ό λλ¬Έμλ‘ μμ±νμ¬ λ¨μ΄λ₯Ό ꡬλΆνλ€.
- Getter, Setter λ©μλλ λ°λμ 'get + λ©€λ²λ³μ μ΄λ¦', 'set + λ©€λ²λ³μ μ΄λ¦' νμμΌλ‘ μμ±νλ€. λ¨, Getter λ©μλμ λ°νκ°μ΄ Boolean μΈ κ²½μ° get λμ is μ‘°ν©μ μ¬μ©νλ€
- μ΄λ²€νΈ νΈλ€λ¬ λ©μλλ handle + μ΄λ²€νΈλͺ μΌλ‘ μμνλλ‘ μ μνλ€. λΈλΌμ°μ μμ μ 곡νλ μ΄λ²€νΈκ° μλλΌ νΉμ λͺ¨λμ΄λ ν¨μμμ λΉλκΈ° μ½λ°± ν¨μ(μ΄λ²€νΈ) λͺ¨λΈμ μ¬μ©νλ κ²½μ°μλ λμΌνλ€.
// λμ μ
apple();
car();
// μ’μ μ
isChecked();
getElement();3.2 λ³μ: μΉ΄λ© νκΈ°λ² (CamelCase)
- λ³μλͺ μ κΈΈμ΄λ μ’μΌλ ν λμ μμλ³Ό μ μλλ‘ μ΅λν λͺ μμ μΌλ‘ μμ±νλ€
- λ³μ μ΄λ¦μ λͺ μ¬λ₯Ό μ¬μ©νμ¬ μμ±νλ€
- μΉ΄λ© νκΈ°λ²μ μ€μνλ€. 볡ν©μ΄ μ΄λ¦μ 첫 λ²μ§Έ λ¨μ΄λ₯Ό μλ¬Έμλ‘ μμ±νκ³ , λ λ²μ§Έ μ΄μμ λ¨μ΄ 첫 κΈμλ₯Ό λλ¬Έμλ‘ μμ±νμ¬ λ¨μ΄λ₯Ό ꡬλΆνλ€.
- λ³μ μ΄λ¦μ 첫 κΈμλ‘ μ°μλ λ κ°μ μΈλμ€μ½μ΄(__) κΈ°νΈμ λ¬λ¬ κΈ°νΈ($)λ μ¬μ©νμ§ μλλ€.
- λ³μ μ΄λ¦μ ν κΈμ μ΄μμΌλ‘ μ¬μ© μλλ₯Ό μΆ©λΆν μ μ μμ λ§νΌ κ°κ²°νκ³ λͺ ννκ² μμ±νλ€. λ¨, μμ λ³μλ ν κΈμ μ΄λ¦μ μ¬μ©ν μ μλ€.
- JavaScript νμΌμ νλμ λλ ν 리 μλμ μλΈ λλ ν 리 λ¨μλ‘ λλμ΄ μμ±νλ€.
- JavaScript νμΌμ λ€μμ€νμ΄μ€λ₯Ό ν¬ν¨νμ¬ λͺ¨λ λ¨μλ‘ κ΅¬μ±νλ€. νμΌ μ΄λ¦ κ·μΉμ κ°κ° λ€μμ€νμ΄μ€ + λͺ¨λ μ΄λ¦ κ·μΉμ λ°λ₯Έλ€

- μ ν¨νκ³ μ½μ μ μλ DOM μμ±
- μΈλΌμΈ μ€νμΌκ³Ό μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ§ μκΈ°
- μΉ μ κ·Όμ± μ€μνκΈ°
- μ΄λ―Έμ§μ alt νκ·Έ μ¬μ©
- νμ΄μ§ λ¨ νλμ h1
- μ λͺ© λ° λ©ν νκ·Έ μ¬μ©(SEO μ΅μ ν)
- htmlμ μ ν¨μ±μ κ²μ¬
- μ΄λ―Έμ§ λ° μ±λ₯ μ΅μ ν κ²μ¬
-
λ―Έλμ΄ μΏΌλ¦¬ μ¬μ©
-
λ§μ§μμ flex μμλ λ§μ§μμκ° μΌμ΄λμ§ μμΌλ κ³ λ €νμ§ μμλ λλ€. flexκ° μλλΌλ©΄ λ°μ μ¬ν μ§ν€κΈ° μμ μμλ margin-top λ§ μ¬μ©νλ€. λΆλͺ¨ μμλ padding μΌλ‘ μ‘°μ , margin μ¬μ©νμ§ μλλ€. λΉ μμλ height , min-height , max-height μ μ€ νλλ₯Ό μ€λ€.
-
μν©μ λ°λ₯Έ μ μ ν λ¨μ μ¬μ©
-
rem λ¨μ
- ν°νΈμ¬μ΄μ¦, λ§μ§, ν¨λ©.
-
px λ¨μ
- λΈλΌμ°μ ν¬κΈ° μκ΄μμ΄ μ νν κ³ μ λ μ¬μ΄μ¦μ¬μΌ ν λ.
- border-radius, border-line
- λΈλΌμ°μ ν¬κΈ° μκ΄μμ΄ μ νν κ³ μ λ μ¬μ΄μ¦μ¬μΌ ν λ.
-
λ°±λΆμ¨(%) λ¨μ
- κ°λ‘ λΉμ¨μ λ°λ₯Έ λ°μνμ μ¬μ©νλ€.(λΆλͺ¨ μμμ ν¬κΈ°μ μν₯μ λ°μ)
- μ΄λ―Έμ§μ μ¬μ©.
- λλΉλ₯Ό μ£Όκ³ , μΈλ‘λ autoλ‘ νμ¬ μ’ ν‘λΉλ₯Ό λ§μΆ° λμ΄λκ³ μ€μ΄λ€κ² νλ€.(global styleμ μ μ©λμ΄μλ€.)
- vh(viewport height) λ¨μ
- μΈλ‘ λΉμ¨μ λ°λ₯Έ λ°μνμ μ¬μ©νλ€.(보μ¬μ§λ λΈλΌμ°μ νλ©΄μ μν₯μ λ°μ)
-
float, flex, grid
- μ£Ό λ μ΄μμμ flexλ‘ μ²λ¦¬νλ€.
- floatμ gridλ μ¬μ©μ μ§μνλ€.