code convention - connect-foundation/2019-07 GitHub Wiki

code convention

air-bnb guide line ์„ ๋ฐ”ํƒ•์œผ๋กœ, clean code ์ฒ ํ•™์„ ์ถ”๊ฐ€

๋ชจ๋“  ๊ทœ์น™์€ ์„œ๋กœ๋ฅผ ๋ฐฐ๋ คํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค!

๊ฐœ์š”

์ฒ ํ•™

๋ชจ๋“  ์ฝ”๋“œ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ด๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

base

Airbnb JavaScript ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค. ์•„๋ž˜ ์„ธ๋ถ€ ๋‚ด์šฉ์— ๋‚˜์™€์žˆ์ง€ ์•Š์€ ๋‚ด์šฉ์€ Airbnb์˜ ๊ฐ€์ด๋“œ ๋ผ์ธ์„ ์ฐธ๊ณ ํ•œ๋‹ค.

์„ธ๋ถ€ ์‚ฌํ•ญ

๋ชฉ๋ก

  • ํƒญ ์‚ฌ์ด์ฆˆ๋Š” 2๋กœ ํ•œ๋‹ค.

    \t์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  space๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

  • ํ•œ ์ค„์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 80์ž๋กœ ์ œํ•œํ•œ๋‹ค.

    VSCode์˜ Prettier ์„ค์ • ๋“ฑ์„ ํ†ตํ•ด ํ†ต์ผํ•˜๋„๋ก ํ•œ๋‹ค.

  • ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋ช…์— ๋Œ€ํ•œ Naming Convention

    • ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ์ธ์Šคํ„ด์Šค๋Š” Camel Case๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

      ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ๋™์‚ฌ+๋ช…์‚ฌ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.

    • Class, Contructor๋Š” Pascal Case๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๊ธ€์ž์˜ ๊ธธ์ด
      • ๊ธ€์ž์˜ ๊ธธ์ด๋Š” 20์ž ์ด๋‚ด๋กœ ์ œํ•œํ•œ๋‹ค.
      • 4๋‹จ์–ด ์ด์ƒ์ด ๋“ค์–ด๊ฐ€๊ฑฐ๋‚˜, ๋ถ€๋“์ดํ•˜๊ฒŒ 20์ž ์ด์ƒ์ด ๋˜๋Š” ๊ฒฝ์šฐ ํŒ€์›๊ณผ์˜ ์ƒ์˜๋ฅผ ๊ฑฐ์นœ๋‹ค.
    • flag๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜
      • Boolean์˜ ๊ฒฝ์šฐ ์กฐ๋™์‚ฌ+flag ์ข…๋ฅ˜๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

        ex) isNum, hasNum

    • ์•ฝ์นญ์˜ ์‚ฌ์šฉ
      • ์•ฝ์–ด๋Š” ๋˜๋„๋ก ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ex) Not Allow) index> idx, count > cnt, array > arr, to > 2
      • ๋ถ€๋“์ดํ•˜๊ฒŒ ์•ฝ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ฒฝ์šฐ ํŒ€์›๊ณผ์˜ ์ƒ์˜๋ฅผ ๊ฑฐ์นœ๋‹ค.
  • ์ตœ๋Œ€ tab depth์˜ ์ œํ•œ

    • tab์˜ ์ตœ๋Œ€ depth๋Š” 4๋กœ ์ œํ•œํ•œ๋‹ค.
    • ์ด ์ด์ƒ์œผ๋กœ depth๊ฐ€ ๊นŠ์–ด์ง€๋ฉด ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    • ๊ทธ ์ด์ƒ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ฒฝ์šฐ, ํŒ€์›๋“ค๊ณผ์˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ๊ฐœ์„ ํ•œ๋‹ค.
        function func() {
          //tab1
          if(){
            //tab2
            array.reduce((pre, cur) => {
              //tab3
              if(cur == status){
                //tab4
              }
            }
          }
        }
  • ์ฃผ์„ ๊ทœ์น™

    • ํ•œ์ค„์€ //๋กœ ์ ๊ณ , ๊ทธ ์ด์ƒ์€ /** */๋กœ ์ ๋Š”๋‹ค.
      // ํ•œ์ค„ ์ฃผ์„
      /**
       * ์—ฌ๋Ÿฌ์ค„
       * ์ฃผ์„
       */    
    • ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ฃผ์„
      • backend์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ, ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
      • ํ•˜๋‚˜์˜ ํŒŒ์ผ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์ฃผ์„์œผ๋กœ ์ƒ์„ธ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•œ๋‹ค.
        • ํ•จ์ˆ˜์˜ ์ „์ฒด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์„ค๋ช…
        • ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช… (type: ..., ์—ญํ• )
  • bracket({}) ๊ทœ์น™

    • if๋ฌธ์˜ ์‹คํ–‰๋ฌธ์ด ํ•œ ์ค„์ผ ๋•Œ
      • ๋ฐ˜๋ณต๋ฌธ, ํ•จ์ˆ˜์˜ ํƒˆ์ถœ
        • ํ•œ์ค„๋กœ ์ž‘์„ฑํ•œ๋‹ค.
        • ๋‹ค๋งŒ, ๋ถ€๋“์ดํ•˜๊ฒŒ ๋‘ ์ค„ ์ด์ƒ์ด ๋˜๋Š” ๊ฒฝ์šฐ ์ฃผ์„์œผ๋กœ ํ‘œ๊ธฐํ•˜๊ณ  ํƒˆ์ถœ๋ฌธ์˜ ๊ฒฝ์šฐ ์•„๋ž˜์— ํ•œ์นธ์„ ๋„์šฐ๊ณ  ๋กœ์ง์„ ์ž‘์„ฑํ•œ๋‹ค.
          if(trigger) return;
          
          // logic start
      • (arguments)์ดํ›„์˜ bracket
        • ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ†ต์ผํ•œ๋‹ค.
             function func(){
               //...
             }        
  • magic number ์ง€์–‘

    • magic number๋‚˜ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•  ๊ฒฝ์šฐ, constant.js์— ์ƒ์ˆ˜ํ™” ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค.
        //constant.js
        const LEFT = 'left';
        //other_logic_file.js
        if(dir === LEFT){
          //...
        }
        // ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๊ธˆ์ง€ํ•œ๋‹ค.
        if(direction === โ€˜leftโ€™)
    • ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
      • constant.js์— ์ƒ์ˆ˜๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ์ƒ์„ฑํ•œ๋‹ค.
      • const ์–ด์ฉŒ๊ตฌ_ERROR_MESSAGE = โ€˜์–ด์ฉŒ๊ตฌ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹คโ€™;
  • else if์˜ ์‚ฌ์šฉ

    • ๋ถˆ๊ฐ€ํ”ผํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  else if์˜ ์‚ฌ์šฉ์„ ์ตœ๋Œ€ํ•œ ์ค„์ธ๋‹ค.

      ex) ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ํƒˆ์ถœํ•˜๋Š” if๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋“ฑ

  • arrow function์˜ ์‚ฌ์šฉ (์ต๋ช… ํ•จ์ˆ˜)

    • ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ฉด arrow function์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ํ•œ์ค„๋กœ ๋๋‚˜๋Š” ๊ฒฝ์šฐ, ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”์—†๋Š” ๊ฒฝ์šฐ ๋“ฑ์—๋Š” arrow function์˜ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐœ์ˆ˜ ์ œํ•œ

    • ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์€ 3๊ฐœ๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค.
        function foo(x, y, z);
      
        // 4๊ฐœ ๋ถ€ํ„ฐ๋Š” ๊ฐ์ฒด๋กœ ๋ฌถ์–ด์„œ ๋ณด๋‚ธ๋‹ค.
        function foo(object);
  • ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ

    • Promiseํ•จ์ˆ˜์˜ ์‚ฌ์šฉ์€ ์ง€์–‘ํ•˜๊ณ  async, await๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.
    • ๋‹ค๋งŒ ๋กœ์ง์„ ์งœ๋Š” ๋ฐ ์žˆ์–ด promise๋ฅผ ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์ฃผ์„์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  commit์— ๊ทธ ์ด์œ ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋ช…๋ช… ๊ทœ์น™

    • DB ์ด๋ฆ„ (์Šคํ‚ค๋งˆ)
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ช…์€ ์˜์–ด ๋Œ€๋ฌธ์ž๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.
      • ๊ธธ์ด๋Š” 8์ž ์ด๋‚ด๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.
    • ํ…Œ์ด๋ธ”
      • ํ…Œ์ด๋ธ”์€ ์˜์–ด ๋Œ€๋ฌธ์ž๋กœ ๊ตฌ์„ฑ, ๋Œ€๋ถ„๋ฅ˜_์˜๋ฏธ์žˆ๋Š” ํ…Œ์ด๋ธ” ๋ช… ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
      • ํ…Œ์ด๋ธ” ๋ช…์˜ ๊ตฌ์„ฑ์€ ์ตœ๋Œ€ 3๋‹จ์–ด๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ๊ฐ ๋‹จ์–ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 8์ž ์ด๋‚ด๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.
      • ์ตœ๋Œ€ ๊ธธ์ด๋Š” 26์ž ์ด๋‚ด๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.
    • ์ปฌ๋Ÿผ
      • ์ปฌ๋Ÿผ์€ snake ํ‘œ๊ธฐ๋ฒ•์„ ๋”ฐ๋ฅด๊ณ , ์˜๋ฏธ์žˆ๋Š” ์ปฌ๋Ÿผ๋ช…_์ ‘๋ฏธ์‚ฌ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

      • ์ปฌ๋Ÿผ์˜ ์„ฑ์งˆ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ ‘๋ฏธ์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹˜์— ์œ ์˜)

        ์ ‘๋ฏธ์‚ฌ list
        • CNT : count ์กฐํšŒ์ˆ˜ ๋“ฑ์˜ count์— ์‚ฌ์šฉ๋œ๋‹ค.
        • DT : date ๋‚ ์งœ์ธ ๊ฒฝ์šฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
        • FK : foreign key๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.
        • FL : flag 0, 1๋กœ ๊ตฌ์„ฑ๋œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
        • ID : id ๊ณ„์ • ๋“ฑ์˜ ์•„์ด๋””๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
        • NM : name ์ด๋ฆ„, ๋ณ„๋ช… ๋“ฑ ์‹๋ณ„ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ค‘๋ณต์ด ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—ด ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.
        • NO : number ๋‚˜์ด, ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ ๋“ฑ ์ˆซ์ž๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
        • ORD : order ์ •๋ ฌ์— ์‚ฌ์šฉ๋˜๋Š” index๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
        • PK : primary key๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.
        • ST : status ํšŒ์›์˜ ๋“ฑ๊ธ‰, ์„ฑ๋ณ„ ๋“ฑ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

reference

air-bnb guide line
w3schools
google

VSCode ํ™•์žฅ ๋ชจ๋“ˆ

eslint + prettier
eslint + react

โš ๏ธ **GitHub.com Fallback** โš ๏ธ