μλ°μ€ν¬λ¦½νΈ μνκ³μμ κ°μ₯ λ리 μλ €μ§κ³ μ‘΄κ²½λ°λ μ½λ 컨벀μ μ€ νλλ λ°λ‘ Airbnb JavaScript μ€νμΌ κ°μ΄λμ λλ€. μ΄ κ°μ΄λλ μλ§μ κ°λ°μλ€μ΄ μ°Έμ¬νμ¬ λ§λ€μ΄λΈ κ²°κ³Όλ¬Όλ‘, μΌκ΄μ±, κ°λ μ±, κ·Έλ¦¬κ³ μλ¬ λ°©μ§ μΈ‘λ©΄μμ λ§€μ° λμ νμ€μ μ μν©λλ€. νλ‘μ νΈμ Airbnb μ€νμΌ κ°μ΄λλ₯Ό μ μ©νλ©΄ μ΄λ€ μ΄μ μ΄ μκ³ , ν΅μ¬ μμΉμ 무μμΈμ§ μμλ³΄κ² μ΅λλ€.
1. Airbnb μ€νμΌ κ°μ΄λλ₯Ό μ¬μ©νλ μ΄μ
μ€νμΌ κ°μ΄λμ λͺ©νλ λ¨μν μ½λλ₯Ό μμκ² λ§λλ κ²μ΄ μλλΌ, κ°λ°ν μ 체μ ν¨μ¨μ±μ κ·Ήλννλ λ° μμ΅λλ€.
- μΌκ΄μ± μ μ§: λͺ¨λ νμμ΄ λμΌν κ·μΉμ λ°λ₯΄λ―λ‘, λκ° μμ±νλ μ½λκ° νλμ λͺ©μ리λ₯Ό λ΄λ κ²μ²λΌ λκ»΄μ§λλ€.
- κ°λ μ± ν₯μ: μμΈ‘ κ°λ₯ν ꡬ쑰μ λͺ νν μ΄λ¦ κ·μΉμ μ½λλ₯Ό λΉ λ₯΄κ² μ΄ν΄νκ³ λ²κ·Έλ₯Ό μ°Ύμλ΄λ μκ°μ λ¨μΆμν΅λλ€.
- μ μ¬μ μλ¬ λ°©μ§: κ°μ΄λλΌμΈ μ€μλ μλ°μ€ν¬λ¦½νΈμ νν μ€μλ₯Ό λ°©μ§νλ κ·μΉ(μ: == λμ === μ¬μ©)μ΄ ν¬ν¨λμ΄ μμ΄ μ½λ νμ§μ λμ¬μ€λλ€.
2. ν΅μ¬ μμΉ 3κ°μ§: ES6/ESNext λ¬Έλ² νμ© μ€μ¬μΌλ‘
Airbnb κ°μ΄λλ μ΅μ μλ°μ€ν¬λ¦½νΈ λ¬Έλ²(ES6 μ΄μ)μ μ κ·Ήμ μΌλ‘ νμ©νλλ‘ κΆμ₯νλ©°, νΉν λͺ¨λ μλ°μ€ν¬λ¦½νΈ κ°λ°μ κΈ°μ΄κ° λλ μμΉλ€μ κ°μ‘°ν©λλ€.
2.1. λ³μ μ μΈ: var λμ constμ let μ¬μ©
- const μ°μ μ¬μ©: μ¬ν λΉν νμκ° μλ λͺ¨λ λ³μμλ λ°λμ constλ₯Ό μ¬μ©ν©λλ€. μ΄λ λ³μμ κ°μ λ³κ²½νμ§ μκ² λ€λ κ°λ°μμ μλλ₯Ό λͺ νν λλ¬λ΄μ΄ μμΈ‘ κ°λ₯ν μ½λλ₯Ό λ§λλλ€.
- letμ μ¬ν λΉμ΄ νμν λλ§: 루ν λ³μλ λμ€μ κ°μ λ³κ²½ν΄μΌ ν κ²½μ°μλ§ letμ μ¬μ©ν©λλ€.
- var μ¬μ© κΈμ§: νΈμ΄μ€ν (Hoisting)κ³Ό ν¨μ μ€μ½ν λ¬Έμ λ‘ μΈν΄ νΌλμ μΌκΈ°νλ varλ μ¬μ©μ μ λ©΄ κΈμ§ν©λλ€.
// β μ§μ
var name = 'Gemini';
// β
κΆμ₯
const MAX_COUNT = 10; // μ¬ν λΉ μμ
let currentCount = 0; // μ¬ν λΉ νμ
2.2. ν¨μ: νμ΄ν ν¨μ(Arrow Function) νμ©
Airbnb κ°μ΄λλ μΌλ° ν¨μ(function) λμ νμ΄ν ν¨μλ₯Ό μ νΈν©λλ€.
- κ°κ²°ν λ¬Έλ²: μ΅λͺ ν¨μλ₯Ό μ μν λ μ½λλ₯Ό λ κ°κ²°νκ² λ§λλλ€.
- this λ°μΈλ©: νΉν κ°μ²΄μ λ©μλκ° μλ μ½λ°± ν¨μ λ±μμ this 컨ν μ€νΈκ° ν·κ°λ¦¬λ λ¬Έμ λ₯Ό νΌν μ μμ΅λλ€ (νμ΄ν ν¨μλ μμ μ€μ½νμ thisλ₯Ό μμλ°μ΅λλ€).
// β μ§μ (μΌλ° ν¨μ)
[1, 2, 3].map(function (number) {
return number * 2;
});
// β
κΆμ₯ (νμ΄ν ν¨μ)
[1, 2, 3].map((number) => number * 2);
2.3. λͺ¨λ: ES λͺ¨λ μμ€ν (import/export) μ¬μ©
νμΌ κ°μ μμ‘΄μ± κ΄λ¦¬μ μ¬μ¬μ©μ±μ μν΄ CommonJS(require/module.exports) λμ ES λͺ¨λ μμ€ν μ μ¬μ©νλλ‘ κ°λ ₯ν κΆμ₯ν©λλ€.
- κΈ°λ³Έ λͺ¨λ κ°μ Έμ€κΈ°/λ΄λ³΄λ΄κΈ°:
// νμΌ A: export default function Component() { /* ... */ } // νμΌ B: import Component from './Component'; - λͺ
λͺ
λ λͺ¨λ κ°μ Έμ€κΈ°/λ΄λ³΄λ΄κΈ°:
// νμΌ A: export const PI = 3.14; // νμΌ B: import { PI } from './Constants';
3. Airbnb μ€νμΌ κ°μ΄λ μ μ© λ°©λ² (ESLint & Prettier)
Airbnb μ€νμΌ κ°μ΄λλ λ°©λν κ·μΉμ ν¬ν¨νκ³ μμ΄, μ΄λ₯Ό μλμΌλ‘ μ§ν€κΈ°λ λΆκ°λ₯μ κ°κΉμ΅λλ€. λ°λΌμ κ°λ° νκ²½μ λꡬλ₯Ό ν΅ν©νμ¬ μ½λλ₯Ό μλμΌλ‘ κ²μ¬νκ³ μμ νλλ‘ μ€μ ν΄μΌ ν©λλ€.
- ESLint μ€μΉ: μ½λμ λ¬Έλ²μ μ€λ₯μ μ€νμΌ κ·μΉ μλ°μ κ²μ¬νλ μ μ λΆμ λꡬμ λλ€.
- Airbnb μ€μ μΆκ°: ESLint μ€μ νμΌ(eslintrc.*)μ Airbnb ν리μ
μ μ€μΉνκ³ μΆκ°ν©λλ€.
npm install --save-dev eslint-config-airbnb-base eslint - Prettier μ°λ: Prettierλ μ½λ ν¬λ§·ν (λ€μ¬μ°κΈ°, 곡백, μΈλ―Έμ½λ‘ λ±)μ μλμΌλ‘ μ²λ¦¬ν΄ μ£Όλ λꡬμ λλ€. ESLintμ ν¨κ» μ¬μ©νμ¬ μ€νμΌ κ°μ΄λμ ν¬λ§·ν λΆλΆμ μλνν©λλ€.
π‘ κ°λ° νκ²½ μ€μ : λλΆλΆμ IDE(VS Code λ±)λ ESLintμ Prettier νλ¬κ·ΈμΈμ μ§μν©λλ€. νμΌμ μ μ₯ν λλ§λ€ μλμΌλ‘ μ€νμΌμ κ΅μ νλλ‘ μ€μ νλ©΄ κ°μ₯ ν¨μ¨μ μ λλ€.
4. μ€μ νλ‘μ νΈμμ Airbnb 컨벀μ μ μ μ©νλ©΄ μκΈ°λ μ²΄κ° λ³ν
Airbnb μ€νμΌ κ°μ΄λλ λ¬Έλ²μ μΌλ‘ "λ§λ μ½λ"λ₯Ό λμ΄μ "λ°μΌλ¦¬ μ λ¬΄κ° νΈν΄μ§λ μ½λ"λ₯Ό λ§λλ κ² ν΅μ¬μ λλ€.
λΆνμν μ½λ 리뷰 μκ° κ°μ
const/let κ·μΉ, import μ λ ¬, ν¨μ μ€νμΌ ν΅μΌ κ°μ λΆλΆμ μ€νμΌ κ°μ΄λκ° λμ μ‘μμ€μ, 리뷰μμλ “λ‘μ§”μλ§ μ§μ€ν μ μμΌλ©°, μμ μ 리뷰μμ “var μ°μ§ λ§μμ£ΌμΈμ” κ°μ μκΈ°λ₯Ό λ§€λ² νλλ°, μ΄μ λ μλμΌλ‘ κ΅μ λΌμ μ¬λΌμ§λλ€.
λ²κ·Έ ν¬μ°© μλ λΉ¨λΌμ§
μμΈ‘λλ ν¨ν΄μ΄ μμ΄ μ νμΌμ λ΄λ κ΅¬μ‘°κ° μ΅μνλ©°, νΉν μ½λ°± ν¨μ μμμ this κΌ¬μ¬μ μκΈ°λ λ²κ·Έκ° νμ΄ν ν¨μ μ¬μ© λμ μμ μμ΄μ§λ κ²½μ°κ° λ§μ΅λλ€.
μ νμμ΄ λ€μ΄μλ μ¨λ³΄λ©μ΄ λΉ λ¦
λ¬Έμνλμ΄ μλ κ·μΉ + ESLint μλ¬ λ©μμ§ λλΆμ μλ‘ λ€μ΄μ¨ μ¬λμ΄ ν μ½λ μ€νμΌμ “νμ΅ν νμ μμ΄” IDEκ° μλ €μ£Όλ λλ‘λ§ λ°λΌλ κ°μ μ€νμΌμ΄ λ©λλ€.
5. νμμ Airbnb 컨벀μ μ λμ ν λ μ£Όμν μ
νΌμ μ μ©νλ 건 μ¬μ΄λ°, ν μ 체 μ μ©μ μ΄μ§ μ‘°μ¨μ΄ νμν©λλ€. μλ μΈ κ°μ§λ κΌ μ²΄ν¬νλ κ² μ’μ΅λλ€.
κ·μΉμ “κ°μ ”νκΈ°λ³΄λ€ “μλν”κ° λ¨Όμ
κ·μΉμ λ¬Έμλ‘ κ³΅μ ν΄λ μ¬λλ§λ€ λ°λ‘ μ.
κ°μ₯ λΉ λ₯Έ λ°©λ²μ μ μ₯ μ μλ ν¬λ§·ν
(auto fix)μ μΌλ κ²μ
λλ€.
ν κ·μΉμ μ§ν€λ κ² “λ
Έλ ₯”μ΄ μλλΌ “κΈ°λ³Έκ°”μ΄ λκ² λ§λ€μ΄μΌ μμ°μ€λ½κ² μ μ°©λ©λλ€.
κΈ°μ‘΄ μ½λ λκ·λͺ¨ 리ν©ν λ§μ νΌνκΈ°
Airbnb μ€νμΌ μ μ©νλ€κ³ ν΄μ μλ μ½λ μ λΆ λ¦¬ν©ν λ§νλ 건 λΉν¨μ¨μ μ΄λ©°,
μ€λ¬΄κ° λ§μ νκ²½μμλ “μ νμΌλΆν° μ μ© + κΈ°μ‘΄ νμΌμ μμ λλ λΆλΆλ§ μ μ©” μ΄ μ μμ΄λ©° ν¨μ¨μ
λλ€.
ν λ΄λΆ κ·μΉκ³Ό μΆ©λνλ λΆλΆμ 컀μ€ν
Airbnbλ κ΅μ₯ν λν
μΌνκΈ° λλ¬Έμ, νλ‘μ νΈλ ν μ€νμΌκ³Ό μ λ§λ κ·μΉλ μΌλΆ μλλ°,
μλ₯Ό λ€μ΄ semicolon(μΈλ―Έμ½λ‘ ) μ¬μ© μ¬λΆ, import μμ κ°μ λΆλΆμ΄ κ·Έλ μ΅λλ€.
μ΄λ°κ²½μ° .eslintrcμμ λ± νμν κ·μΉλ§ override ν΄μ μ‘°μ νλ©΄ λ©λλ€.
6. κ²°λ‘
Airbnb JavaScript μ€νμΌ κ°μ΄λλ λ¨μν μ½λ© κ·μΉμ΄ μλλΌ κ°λ° μ¬κ³ λ°©μμ μ 리ν΄μ£Όλ λꡬμ
λλ€.
ν λ² μ λλ‘ μ μ©ν΄λλ©΄ μ μ§λ³΄μ λΉμ©μ΄ μ€μ΄λ€κ³ , νλ‘μ νΈ μ 체μ μ½λ νμ§μ΄ μμ μ μΌλ‘ ν₯μλ©λλ€.
νΉν λͺ¨λ νλ‘ νΈμλλ‘ λμ΄κ°λ κ³Όμ μμ κΈ°λ³ΈκΈ°λ₯Ό νννκ² λ€μ§λ λ° ν° λμμ΄ λ©λλ€.
