E D R , A S I H C RSS

Clean Code

5›” 4ผ

  • Šค„ฐ๋”” ‚ฅ˜ค”„
  • ๋„„œ : Clean Code
  • „œง€˜œ˜ my-calculator ฝ”๋“œ๋ฅผ ”ผ–ด ๋ฆฌ๋ทฐ•จ.

5›” 11ผ

  • Clean Code ฝ€ ๋ถ€๋ถ„— ๋Œ€•ด † ๋ก (Chap 01, Chap 09)
    • Chapter 2 Meaningful Names - Naming Convention
      • ด๋ž˜Šค˜ ด๋ฆ„„ ง€„ ๋•Œ๋Š” -info, -data™€ ๊ฐ™€ ผ๋ฐ˜ ธ ด๋ฆ„„ “ฐง€ ๋ง๋ผ.
      • Account๋ฅผ ๋งŒ๋“ค๋ฉด ๋˜ง€ AccountInfo๋ผ๋Š” ด๋ž˜Šค๋ฅผ ๋งŒ๋“ค •„š”๋Š” —†๋‹ค. Account ด๋ž˜Šค ๋‚ด๋ถ€— ๋“ค–ด๊ฐ€๋Š”  •๋ณด๊ฐ€ Info๋‹ˆ๊นŒ.
      • -List ๋ผ๋Š” ‹˜ ด๋ฆ„„ ง€„ ๋•Œ๋Š”  •๋ง๋กœ List˜ API๋“ค„ ง€›•  ๋•Œ—๋งŒ -List๋ผ๊ณ  ๋ถ™—ฌฃผ๋Š”๊ฒƒด ข‹๋‹ค. ด๋ฆ„„  €๋ ‡๊ฒŒ ง€œผ๋ฉด -List˜ API๋“ค„ ง€›•  ๊ฒƒ ๊ฐ™€ ๋А๋‚Œด ๋“ค๊ธฐ ๋•Œ๋ฌธ— •„๋‹ ๊ฒฝšฐ—๋Š” -s๋‚˜ ๋‹ค๋ฅธ ๋ฐฉ‹œผ๋กœ •˜๋Š”๊ฒŒ ข‹„ ๊ฒƒ.
      • •„๋ž˜™€ ๊ฐ™€ ‹œผ๋กœ Account๋‚ด๋ถ€˜  •๋ณด๋ฅผ •˜๋‚˜๋กœ ๋ฌถœผ๋ฉด AccountInfo ด๋ž˜Šค™€ getAccountInfo()๋“ด žˆ„๋ฒ••˜ง€ •Š€๊ฐ€? ->  €๋Ÿฐ ๊ตฌกฐ žฒด๊ฐ€ ž˜๋ชป๋„ ˆ˜ žˆ๋‹ค. getAccountInfo()™€ ๊ฐ™€ ๋ฐฉ๋ฒ•ด •„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•œผ๋กœ ผ„ ‹œ‚ค๋Š” ๋ชจ–‘ด ๋” ๋‚ซ๋‹ค.

Class Account {
private AccountInfo info;
};
  • Chapter 9 Unit Tests
    • ๋ฌธ œ๋ฅผ ๋“ค—ˆ„ ๋•Œ …ŒŠคŠธฝ”๋“œ๋ฅผ ๋จผ € ƒ๊ฐ•˜๋Š” Šต๊ด€„ ๋“ค—ฌ•ผ •  ๊ฒƒ ๊ฐ™๋‹ค. ๋ฌธ œ๋ฅผ •ด๊ฒฐ•˜๋Š” ฝ”๋“œ๋ฅผ ๋จผ € งœ๋ ค๊ณ  •˜๋ฉด ๊ฒฐ๊ตญ …ŒŠคŠธฝ”๋“œ ž‘„ด •„๋‹ˆ๋ผ ง ‘ …ŒŠคŠธ๋ฅผ •˜๊ฒŒ ๋˜๋Š” ๋“ฏ •˜๋‹ค.
    • ”ผ๋“œ๋ฐ„ ๋นจ๋ฆฌ ๋ฐ›๊ธฐ œ„•ด„œ …ŒŠคŠธ๋ฅผ ‹ค‹œ. ”ผ๋“œ๋ฐ„ ๋ฐ›๊ณ  ๊ณ น  ๋•Œ๊นŒง€˜ ฃผ๊ธฐ๊ฐ€ งง•„•ผ •จ. ฝ”๋“œ๋ฅผ งœ๊ณ  œ ๋‹›…ŒŠคŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ •ˆ๋˜๋Š”๊•„๋‹˜. ”ผ๋“œ๋ฐ„ ๋ฐ”๋กœ ๋ฐ›„ ˆ˜ žˆœผ๋ฉด ๋จ.
    • ฝ”๋“œ๋ฅผ ๊นจ๋—•˜๊ฒŒ •˜๊ณ  ‹ถœผ๋ฉด …ŒŠคŠธ ฝ”๋“œ๋„ ๊นจ๋—•˜๊ฒŒ œ ง€•ด•ผ •œ๋‹ค. …ŒŠคŠธ ฝ”๋“œ๊ฐ€ ๋”๋Ÿฌ›Œง€๋ฉด …ŒŠคŠธ๋ฅผ ž˜ •ˆ•˜๊ฒŒ ๋˜๋‹ˆ๊นŒ ฝ”๋“œ๋„ ๋”๋Ÿฌ›Œง€๊ฒŒ ๋œ๋‹ค.
    • …ŒŠคŠธ ‹œ—๋Š” ˜ฌ๋ฐ”๋ฅธ inputด  œ๋Œ€๋กœ ๋“ค–ด˜ค๋Š”ง€๋ฅผ ๋จผ € ™•ธ•˜๊ณ  ๋‚˜„œ ฝ”๋“œ๊ฐ€ ž˜๋ชป๋˜—ˆ๋Š”ง€ ƒ๊ฐ•ด๋ณผ ๊ฒƒ.
    • ‹ค œ๋กœ๋Š” “ฐง€ •Š๋Š”๋ฐ …ŒŠคŠธ๋ฅผ œ„•œ ๋ฉ”†Œ๋“œ๋ฅผ ถ”๊ฐ€•˜๊ฒŒ ๋˜๋Š” ๊ฒฝšฐ๊ฐ€ žˆ„ ˆ˜ žˆง€ •Š€๊ฐ€? -> java˜ ๊ฒฝšฐ๋Š” reflection„ ‚ฌšฉ•˜๋ฉด ๋ฉ”†Œ๋“œ˜ ถ”๊ฐ€ —†ด ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅ•œ ๊ฒฝšฐ๋„ žˆง€๋งŒ ๊ทธ๊ฒƒ๋ณด๋‹ค๋„ …ŒŠคŠธšฉ framework(mockito ๋“)๋ฅผ ‚ฌšฉ•˜๋Š”๊ฒƒด ข‹๋‹ค.
    • BDD, Given/When/Then

5›” 18ผ

  • •จˆ˜
    • ”Œ๋ž˜๊ทธ๋Š” ถ”•˜๋‹ค
      • guard clause๋ฅผ “ฐ„š”!
      • •จˆ˜๋Š” •˜๋‚˜˜ ผ„ •˜๋Š”๊ฒŒ ข‹๋‹ค๊ณ  •˜๋Š”๋ฐ ”Œ๋ž˜๊ทธ๋ฅผ “ด๋‹ค๋Š” ๊ฒƒ€ •จˆ˜๊ฐ€ ”Œ๋ž˜๊ทธ˜ ๊ฐ’— ๋”ฐ๋ผ„œ ๋‹ค๋ฅธ ๊ฐ’„ •œ๋‹ค๊ณ  ๋ง•˜๋Š” ๊ฒƒด๋ฏ€๋กœ.
      • ฐจ๋ผ๋ฆฌ ๋‹ค๋ฅธ ผ„ •˜๋Š” •จˆ˜๋ฅผ —ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“œ๋Š”๊ฒŒ ๋” ๋‚ซ๋‹ค.
    • abstraction level
      • String.append™€ PathParser.render๋Š” ๋‘˜ด „œ๋กœ ๋ฌธž—ด„ •ฉน˜๋Š” ž‘—…„ •˜๋”๋ผ๋„ ง ‘ ธ —ฐ‚ฐ„ •˜๋Š” ๊ฒƒ๊ณผ ถ”ƒ ธ —ฐ‚ฐ„ •˜๋Š” ๊ฒƒ˜ ฐจด๋กœ „œ๋กœ ถ”ƒ™” ˆ˜ค€ด ๋‹ค๋ฅด๋‹ค๊ณ  •  ˆ˜ žˆ๋‹ค.
      • ถ”ƒ™” ˆ˜ค€ด „œ๋กœ ๋‹ค๋ฅธ ฝ”๋“œ๊ฐ€ „ž—ฌžˆœผ๋ฉด ๋ณด๊ธฐ—๋„ ข‹ง€ •Š๋‹ค.
      • ถ”ƒ™” ๋ ˆ๋ฒจด ๋‹ฌ๋ผง€๋Š” ๊ฒƒ„ ๋ง‰๊ธฐ œ„•ด„œ๋Š” ฝ”๋“œ๋ฅผ งง๊ฒŒ •˜๊ณ  ๋ฉ”†Œ๋“œ๋กœ ๋งŽด ๋‚˜๋ˆ„๋ฉด •œ ฝ”๋“œ ๋‚ด—„œ ถ”ƒ™” ๋ ˆ๋ฒจด ๋‹ฌ๋ผง€๋Š” ๊ฒƒ„ ๋ง‰„ ˆ˜ žˆ๋‹ค.
    • •จˆ˜ ธž๋Š”  „ˆ˜๋ก ข‹๋‹ค.
      • •จˆ˜ ธž๊ฐ€ ๋งŽ•„ง€๊ฒŒ ๋˜๋ฉด ‚ฌšฉž๊ฐ€ ธž๋“ค— ๋Œ€•ด„œ ด•ด๋ฅผ •˜๊ธฐ ž˜๋“ค๋‹ค.
      • …ŒŠคŠธ ฝ”๋“œ๋ฅผ ž‘„•  ๋•Œ ธž๋“ค˜ กฐ•ฉ ˆ˜— ๋”ฐ๋ผ …ŒŠคŠธ ผ€ดŠค๊ฐ€ ๋Š˜–ด๋‚  ˆ˜ žˆ๊ธฐ ๋•Œ๋ฌธ—.
  • Error Handling
    • —๋Ÿฌ๋ฅผ ๋ฐฉง€•˜๊ฐ๋‚˜, ฒ˜๋ฆฌ•˜๋Š” ฝ”๋“œ ๋•Œ๋ฌธ— •จˆ˜˜ ๋ณธ ž„๋ฌด๋ฅผ ŒŒ•…•˜๊ธฐ ž˜๋“ค๊ฒŒ ๋˜๋ฉด •ˆ๋ฉ๋‹ˆ๋‹ค.
    • Consider using try-catch-finally instead of if statement.
    • Don't return null.
      • Returning null or undefined (Javascript)
        var array = stringObject.match(/regexp/); // if there is no match, then the function returns null, if not returns array.
        if(!array){
          // handle and return
        }
        array.forEach(/* handle found strings */)
        ...
        
      • Returning emtpy object (Javascript)
        var array = stringObject.match(/regexp/) || []; // if the function returns null, then substitute empty array.
        
        array.forEach(/* handle found strings */)
        
        /* You can handle empty array with "array.length === 0" statement in anywhere after array is set. */
        
    • Don't pass null.

›„๊ธฐ

  • ๋ฏผ๊ด€
    • + : ฝ”๋“œ ๋ฆฌŒฉ† ๋ง„ •ด๋ด„œ ข‹•˜๋‹ค. ™”ดŠธ๋ณด๋“œ—  –ด๊ฐ€๋ฉด„œ ฝ–ด๋ณธ ๋ถ€๋ถ„ ๊ณตœ •˜๋‹ˆ๊นŒ  •๋ฆฌ๋œ ๋А๋‚Œ.
    • - : ”„๋กœ Šธ ๋ฐฉ‹๊ณผ ๋ฐฉ–ฅด ๋ฆฟ•œ ๋А๋‚Œด๋‹ค.
    • F : ‹œ๊ฐ„„ ปดŒฉŠธ•˜๊ฒŒ „–‰•˜๊ณ  ‹ถ๋‹ค. ๋Š˜–ดง€๋Š” ๊ฒฝ–ฅด žˆ๋‹ค.
  • „๊ฒฝ
    • + : ๋ฆฌŒฉ† ๋ง„ ‹œ๋„•ด๋ณด•˜๋‹ค. ๋‹ค๋ฅธ ‚ฌ๋žŒ˜ ฝ”๋“œ๋ฅผ ๋ฆฌŒฉ† ๋ง •  ˆ˜ žˆ๋‹ค๋Š” ƒ๊ฐ„ •˜๊ฒŒ ๋˜—ˆ๋‹ค.
    • - : ๋ณธธ˜ ฝ”๋“œ๋ฅผ ๋ฆฌ๋ทฐ๋ฐ›๊ณ  ‹ถ—ˆ๋Š”๋ฐ  •๋ฆฌ๊ฐ€ ๋˜ง€ •Š•„ ๋ฐ›ง€ ๋ชป–ˆ๋‹ค.
    • F : ฃผค‘—๋„ Šค„ฐ๋””๋ฅผ! ˜จ๋ผธ ˜‘—… ˆ„ ดšฉ•  ˆ˜ žˆ๋‹ค.
  • ˜ฃผ
    • + : … –˜๊ธฐ๋งŒ •œ๊ฒŒ •„๋‹ˆ๋ผ …˜ ˜ˆ œ๋ฅผ ‹œ๋„•ด๋ดค๋‹ค.
    • - : ๊ฐž ˜ˆ œ๋ฅผ ๋ฆฌŒฉ† ๋ง–ˆ๋‹ค. ๋”ฐ๋กœ ๋…ผ ๋А๋‚Œ.
      • ‚ฌ‹ค ๊ทธ๋Ÿฐ ๋А๋‚Œด ๋“ค–ด๋„ ๊ฒฐ๊ตญ ฝ”๋“œ งœ๋Š” ๋ถ€๋ถ„€ ๋”ฐ๋กœ •  ˆ˜๋ฐ–— —†๋Š” ๊ฒƒ ๊ฐ™œผ๋‹ˆ –ดฉ” ˆ˜ —†๋Š” ๊ฒƒ ๊ฐ™๊ธฐ๋„ •˜ง€๋งŒš”. - „œ˜ฃผ
    • F : Šค„ฐ๋””๋ฅผ  œ๋Œ€๋กœ •˜๊ณ  žˆ๋Š”ง€ •Œ๊ณ ‹ถ๋‹ค. (๋ฉ˜† ๊ฐ€ žˆ—ˆœผ๋ฉด ข‹๊ฒ ๋‹ค?)
      • ฝ”นญ„ ๋ฐ›๊ณ  ‹ถ๋‹ค๋Š” ๋งธ๋“ฏ - „œง€˜œ
      • ๊ฐ€๋ฅดณฃผ๋Š” ๊ฒƒ ๊นŒง€๋Š” •„๋‹ˆ๊ณ  ž˜ •˜๊ณ  žˆ๋Š”๊ง€ •„๋‹Œง€๋ฅผ •Œ ˆ˜ žˆ—ˆœผ๋ฉด ข‹๊ฒ ๋‹ค๋Š”๊ฃ . ๋ชฉ‘œ –˜๊ธฐ •˜‹ ๊™•‹คžˆ  œ๋Œ€๋กœ •˜๊ณ  žˆ๋Š”ง€ ฐธ๊ณ ๊ฐ€ ๋  ๊ฒƒ ๊ฐ™Šต๋‹ˆ๋‹ค. - „œ˜ฃผ
      • „ค ๊ทธ๋ž˜„œ ผ๋ถ€๋Ÿฌ ฝ”นญด๋ผ๊ณ  ผ–ดš”ใ…‹ใ…‹ ๋ฉ˜† ๋ง€ •„๋‹Œ ๊ฒƒ ๊ฐ™๊ณ  ‹ฐนญ€ ง€–‘•˜๊ณ ‹ถ๊ณ , Šค„ฐ๋””๊ฐ€ ž˜ ๋˜–ด๊ฐ€๊ณ  žˆ๋Š”ง€๋ฅผ ™•ธ•˜๊ณ  ‹ถ๋‹ค๋Š” ๋งฅ๋ฝ—„  ฝ”นญด  œผ œ ‚ฌ•œ ๊ฒƒ๊ฐ™•„„œ๋ฆฌ.. - „œง€˜œ
  • ฌ •
    • + : ฒ˜Œ ๋‚˜˜ฌ๋•Œ ๋–จ๋ ธ๋Š”๋ฐ ๋งŽด ‹ ๊ฒฝ จ ค˜„œ ข‹•˜๋‹ค.
    • - : ๋ฐฐ๊ฒฝง€‹ด ๋ถ€•œ ๋“ฏ •˜๋‹ค.
    • F : Šค„ฐ๋””ค‘— –ด๋–ป๊ฒŒ „–‰•ด•ผ •˜๋‚˜— ๋Œ€•œ –˜๊ธฐ๋ฅผ ๋„ˆ๋ฌด ๋งŽด •œ๋‹ค.
  • ง€˜œ
    • + : ๋‹ค๋ฅธ ‚ฌ๋žŒ๋“คด ๋ฆฌŒฉ† ๋ง •˜๋Š” ๊ฒƒ„ ๋ณด•˜๋‹ค. ƒˆ๋กœšด ‚ฌ๋žŒ ถ”๊ฐ€
    • - : ๋ฆฌŒฉ† ๋ง„ •  ๋•Œ ๋ฆฌŒฉ† ๋ง— ๋Œ€•œ š”๊ตฌ‚ฌ•ญ, ๋ฆฌŒฉ† ๋ง„ ๋ฉˆถœ ˆ˜ žˆ๋Š” ˆ˜ค€„  œ‹œ•˜ง€ ๋ชป•˜˜€๋‹ค.
      • 'ด๊ฒƒ'„  œ‹œ•  ˆ˜๊ฐ€ žˆ๋‚˜?
    • F : Šค„ฐ๋”” ฒซ๋‚   •–ˆ๋˜ ๊ฐž˜ ๋ชฉ ๊ณผ ๋ชฉ‘œ(–ด๋””๊ฐ”ง€?)๋ฅผ †ต•ด Šค„ฐ๋””๊ฐ€  œ๋Œ€๋กœ „–‰๋˜–ด ๊ฐ€๊ณ  žˆ๋Š”ง€ ฒดฌ•  ˆ˜ žˆ„๊ฒƒ.
      • ๊ทธ๋Ÿฌ๋‚˜ ž‹ ˜ ‹ค๋ ฅด ๋” ๋‚˜Œ„ –ด๋–ป๊ฒŒ ๋น„๊ต•  ˆ˜ žˆ„๊นŒ? •™Šต ๊ณก„ ๋„ ๋ฌด‹œ•  ˆ˜ —†๋‹ค.

5›” 25ผ

  • ajax (callback— ๋Œ€•œ ด•ด๋ฅผ œ„•ด)
    • javascript๋ฅผ ดšฉ•œ ๋น„๋™๊ธฐ http š”ฒญ.
    • UI๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฆ„(thread)๊ณผ http š”ฒญ— ๋Œ€•œ ๋ฆ„(thread)ด ๋”ฐ๋กœ กดžฌ•จ.
    • http š”ฒญ ชฝ€ –ธ œ ž‘—…ด ๋๋‚ ง€ •Œ ˆ˜ —†Œ.
      • callback •จˆ˜๋ผ๋Š” ๊ฒƒ„ ดšฉ•ด„œ ž‘—…ด ๋๋‚ฌ„ ๋•Œ ฒ˜๋ฆฌ•  ๋ฐฉ๋ฒ•„  ••  ˆ˜ žˆ๋‹ค.
  • „๊ฒฝด ฝ”๋“œ(CauBooks) ‚ดŽด๋ณด๊ธฐ
    • javascript †ŒŠค ฝ”๋“œ—„œ •œ๊บผ๋ฒˆ— ธž๋ฅผ ๋„˜๊ธฐ๋Š” ๋ฐฉ‹.
      • ๋กœ๊ทธธ „๊ณต, ‹คŒจ— ๋”ฐ๋ฅธ callback •จˆ˜๋ฅผ •œ ๋ฒˆ— ๋„˜๊ธฐ๊ณ  žˆ๋‹ค.
      • ˜„žฌ๋Š” callback •จˆ˜— ด๋ฆ„„ ๋ถ™—ฌ„œ ธž— ๋„ฃ๊ณ  žˆง€๋งŒ ฃผ๋กœ ต๋ช… •จˆ˜๋ฅผ “ฐ๋Š” js˜ Šนง•ด๋‚˜ ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ง ‘ ด๋ฆ„„ ๋ถ™—ฌ„œ ๊ด€๋ฆฌ๋ฅผ •ด•ผ •˜๋Š” ๋“˜ ๋ถˆŽธ•จ„ ๊ณ ๋ ค•˜—ฌ ๋‹ค๋ฅธ ๋ฐฉ‹œผ๋กœ ˆ˜ ••˜๊ณ  ‹ถ๋‹ค.
    • •œ๊บผ๋ฒˆ— { id:, password:, success:, fail: }„ •˜๋‚˜˜ ๊ฐฒด๋กœ ๋งŒ๋“ค–ด„œ ๋„˜๊ธฐ๋Š” ๋ฐฉ‹.
      • id, password™€ success, fail€ ๊ด€๊ณ„๊ฐ€ ๋ณ„๋กœ —†๋Š”๋ฐ ๊ฐ™ด ๋ฌถ–ด„œ ๋„˜๊ธฐ๋ฉด ๋‚˜ค‘— login ๋‚ด—„œ ๊ฐ๊ฐ˜ ŒŒŠธ๋ฅผ ๋˜ ๋ฝ‘•„๋‚ด•ผ •œ๋‹ค.
      • ๊ฐฒด๊ฐ€ ๋„˜–ด๊ฐ€๋Š” ๊ฐ๋‹ˆ๊นŒ Šน • property˜ œ ๋ฌด— ๋”ฐ๋ผ —๋Ÿฌ๋ฅผ ผœผ‚ฌ ˆ˜ žˆ๋‹ค.
    • module.login(id, password).success(function() {...}).fail(function() {...})œผ๋กœ ˆ˜ ••  ๊ฒฝšฐ.
      • ๊ฐ callback •จˆ˜— ๋Œ€•œ ˜๋„๊ฐ€ ๋ณด๋‹ค ž˜ ๋“œ๋Ÿฌ๋‚จ.
  • ข‹€ ฝ”๋“œ?
    • ˜„žฌ CleanCode—„œ ข‹€ ฝ”๋“œ๋กœ ๋„ˆ๋ฌด ๊ฐ€๋…„๋งŒ„ ค‘‹œ•˜๊ณ  žˆ๋Š” ๊ฒƒ€ •„๋‹Œ๊ฐ€.
      • ฝ„ ‚ฌ๋žŒ˜ ˆ˜ค€„ ๊ณ ๋ ค•˜๋Š” ๊ฒƒ๋„ •„š”•˜๋‹ค. (๋„ˆ๋ฌด ๋‹ค ’€–ด “ด ฝ”๋“œ๋ณด๋‹ค๋Š” ฝ๋Š” ‚ฌ๋žŒด ด•ด•  ˆ˜ žˆ„  •๋„˜ ๋‚œด๋„ + šจœจ ธ ฝ”๋“œ๊ฐ€ ๋‚ซง€ •Š€๊ฐ€)
        • ๋™๊ฐ•ฉ๋‹ˆ๋‹ค.  œ๊ฐ€ ด๋ฆฐฝ”๋“œ Šค„ฐ๋””๋ฅผ •˜๋Š” ดœ ๋Š” ๊ถ๊ทน œผ๋กœ ƒ‚ฐ„ –ฅƒž…๋‹ˆ๋‹ค( œ๊ฐ€ š”ฆ˜ ๊ฐ•กฐ•˜๋Š”? ใ…‹ใ…‹). ง€˜œ ๋ˆ„๋‚˜๊ฐ€ –ธ๊ธ‰–ˆ๋“ฏ ฝ”๋“œ๋Š” ผ๋‹จ ๋™ž‘•ด•ผ •˜๋Š” ๊ฒƒด ฒซ ๋ฒˆงธ.  œ ทจ–ฅ๋Œ€๋กœ •ฝ๊ฐ„ ถ”ƒ™”•˜ž๋ฉด š”๊ตฌ‚ฌ•ญ„ ถฉ•˜๋Š” ๊ฒƒ. ž„๋ฒ ๋””๋“œ ๊ฐœ๋ฐœ—„œ๋Š” ผฌ๋จผŠค –ฅƒ„ œ„•ด ' •„ ธ(?)' ๊ตฌกฐ๋‚˜ ๋ฐฉ๋ฒ•๋ก „ ๊นจ๋Š” ๊ฒฝšฐ๋„ žˆŠต๋‹ˆ๋‹ค. š”๊ตฌ‚ฌ•ญ„ ถฉ•˜ง€ ๋ชป •˜๋ฉด, ‹คˆ œผ๋กœ๋Š” •„๋ฌด ๊ฒƒ๋„ ƒ‚ฐ•˜ง€ •Š€ ๊ฒƒ๊ณผ ๊ฐ™„ ˆ˜๋„ žˆœผ๋‹ˆ๊นŒš”. -  •„๊ฒฝ
        • ‚ฐ๋ฌธด๋ƒ šด๋ฌธด๋ƒ˜ ฐจด๋ผ๋Š” ƒ๊ฐด ๋“ญ๋‹ˆ๋‹ค. - „œง€˜œ

  • „œง€˜œ˜ my-calculator …ŒŠคŠธ ฝ”๋“œ ๋ฆฌ๋ทฐ
    • spec— ง€ •๋˜–ด žˆง€ •Š€ ๊ฒฝšฐ— …ŒŠคŠธ ฝ”๋“œ๋ฅผ ž‘„•ด•ผ •˜๋Š”๊ฐ€?
      • spec— ง€ •๋˜–ด žˆง€ •Š๋‹ค๋Š”๊ด ๋ฌดŠจ ˜๋ฏธง€?? - „œง€˜œ
      • ˜ˆ๋ฅผ๋“ค๋ฉด ž…๋ ฅด ๋“ค–ด™”„ ๋•Œ A๋ผ๋Š” ถœ๋ ฅด ๋‚˜™€•ผ •œ๋‹ค๊ณ ๋งŒ spec—  •˜๋ผžˆœผ๋ฉด ž…๋ ฅด —†„ ๋•Œ— ๋Œ€•œ …ŒŠคŠธ ฝ”๋“œ๋Š” ๋ฌดŠจ ๊ธฐค€œผ๋กœ ž‘„•˜๋А๋ƒ ๋˜๋Š” —๋Ÿฌฒ˜๋ฆฌ๋ฅผ •ด•ผ •˜๋Š”๊ฐ€— ๋Œ€•œ ๊ธฐค€„ ๋ง•˜๋Š”๊ฒƒ ๊ฐ™Šต๋‹ˆ๋‹ค. - „œ˜ฃผ
      • •„, ๊ทธ๋Ÿฐ๋ง •œ ๊ฒƒ ๊ฐ™๋„š”. ด๊ฒฝšฐ๋Š” ฝ”๋“œ๊ฐ€ •„๋‹ˆ๋ผ š”๊ตฌ‚ฌ•ญ(•„‚ค…ฒ˜) ๋‹จ๊ณ„—„œ  •˜๊ฐ€ •„š”•œ ผด๋„š”. - „œง€˜œ
      • ‹ค œ ผ•˜๋Š”๋ฐ„œ๋Š” –ด๋–ค๊ฐ€š”? ด๋Ÿฐ ๋ถ€๋ถ„— ๋Œ€•œ š”๊ตฌ‚ฌ•ญด —†„ ๊ฒฝšฐ—๋Š” –ด๋–ค‹œผ๋กœ ฒ˜๋ฆฌ๋ฅผ •˜๋Š”ง€๊ฐ€ ๊ถ๊ธˆ•ฉ๋‹ˆ๋‹ค. ๋จผ € ฒ˜๋ฆฌ•˜๊ณ  –ด๋–ป๊ฒŒ ฒ˜๋ฆฌ–ˆ๋‹ค๊ณ  ๋”ฐ๋กœ ๋ณด๊ณ •˜๋‚˜š”? •„๋‹ˆ๋ฉด —†œผ๋‹ˆ๊นŒ ด๋Ÿฐ๊ •˜•ดค˜•ผ •œ๋‹ค๊ณ  ๊˜๋ฅผ •˜๊ณ  ๋Œ€๋‹ตด ˜ค๋ฉด ๊ทธ ๋•Œ ฒ˜๋ฆฌ๋ฅผ •˜๋‚˜š”? - „œ˜ฃผ
  • Ruby StyleGuide - ฝ”๋”ฉ Šคƒ€ผ žฒด๋ณด๋‹ค ™œ ๊ทธ๋Ÿฐ Šคƒ€ผ„ „ ƒ–ˆ๋Š”ง€— ๋Œ€•ด ƒ๊ฐ•ด ๋ณด๋Š” ๊ฒƒด ค‘š”•จ.

šŒ๊ณ 

  1. ง€˜œ
    + : šŒ‚ฌ—„œ ง„ ๋‚˜๋ฅด๋‹ค๊ฐ€ ™”๋Š”๋ฐ(ด‚ฟง ๋‚˜๋ฆ„.. ฃผ๋ง—..   žฅ), ˜ค๊ธฐ๋ฅผ ž˜ •œ ๊ฒƒ ๊ฐ™๋‹ค.
    - : ›๋ž˜ ˜ฌ ๊ณ„šด •„๋‹ˆ—ˆ๊ธฐ ๋•Œ๋ฌธ— •„š”•œ ๋…ธŠธ๋ถด๋‚˜ … ๋“„ ™๊ฒจ˜คง€ ๋ชป –ˆ๋‹ค.
  2. „œ˜ฃผ
    + : ๋ฌดž‘ • ด๋ฆฐ ฝ”๋“œ— ๋Œ€•ด ด•ผ๊ธฐ๋ฅผ –ˆ—ˆ๋Š”๋ฐ ข‹€ ฝ”๋“œ— ๋Œ€•œ –˜๊ธฐ๋ฅผ •˜๋ฉด„œ ด๋ฆฐ ฝ”๋“œ— ๋Œ€•ด ๋‹ค‹œ ƒ๊ฐ•˜๊ฒŒ ๋จ.
    - : ข‹€ ฝ”๋“œ๋ฅผ ๊ตฌ•ด ˜คž๊ณ  –ˆ๋Š”๋ฐ •˜๋‹ค ๋ณด๋‹ˆ ƒ๊ฐ๋ณด๋‹ค –ด๋ ค›Œ„œ ๋ชป ฐพ•„˜จ ๊ฒƒ— ๋Œ€•œ ๋ฏธ•ˆ•จ.
  3. „๊ฒฝ
    + : „œ˜ฃผ๊ฐ€ ฝ”๋“œ— ๋Œ€•ด ๋ฆฌ๋ทฐ๋ฅผ •˜๊ณ  ƒ๊ฐ„  –ด ค€ ๊ฒƒ. -> ๋ˆ„๊ฐ€ ฝ”๋“œ๋ฅผ ๋ด คฌœผ๋‹ˆ ๋‹คŒ ฃผ— ๋˜ ž‘—…„ •  ๋™๊ธฐ๊ฐ€ ๋จ.
    - : Šค„ฐ๋”” ‹œ๊ฐ„˜ ๊ฒฝ๊ณ„„ ด •„ง ๋šœ๋ ท•˜ง€ •ŠŒ.
    f : - „ด๊ณ  + ๋Š˜๋ฆฌ๊ฒŒ
  4. ๋ฐ•ฌ • <= ์ž๊ธฐ ์ฝ”๋“œ ๋“ค๊ณ  ์˜ค๋ฉด ์ข‹๊ฒ ๋‹ค
    + : ˆ๋ฐ˜— callback, ajax— ๋Œ€•ด ๋”ฐ๋กœ „ค๋ช…„ •ด ค€ ๊ฒŒ ข‹•˜Œ
    - : ๋ง•˜๋Š” ๋‚ดšฉ„ ™„ „žˆ ด•ด•˜๊ธฐ๊ฐ€ ž˜๋“ค๋‹ค.
  5. „œ๋ฏผ๊ด€
    + : ๋”ฐ๋กœ ค€๋น„ •ด ˜จ ๊ฒŒ —†—ˆง€๋งŒ ๊ทธ๋ž˜๋„ ๋‹ค๋ฅธ ๋ถ„๋“ค ๋•๋ถ„— „–‰ด ž˜ ๋˜—ˆ๋‹ค. ค€๋น„๋ฅผ •˜ง€ •Š๋”๋ผ๋„ ฐธ๊ฐ€— ˜๋ฏธ๊ฐ€ žˆ๋‹ค๋Š” ƒ๊ฐ„ •  ˆ˜ žˆ๊ฒŒ ๋˜—ˆ๋‹ค.
    - : ‹œ๊ฐ„ „ผ ˆ˜ —†„๊นŒ? …„–‰? ฝ”๋“œ „–‰? „–‰„ –ด๋–ค ‹œผ๋กœ •ด•ผ • ง€ •„ง๋„ ๋งค๋„๋Ÿฝง€ •Š€ ๋А๋‚Œด žˆ๋‹ค.

6›” 1ผ

6›” 8ผ

  1. 4žฅ ฝ”๋ฉ˜Šธ
  2. CleanCoders ๊ฐ•˜ ๋ง›๋ณด๊ธฐ.
    1. —”ผ†Œ๋“œ 1€ 1๋‹ฌ๋Ÿฌ—ฌ„œ ‹ผ „ •Œ•˜๋Š”๋ฐ ๊ทธ ด›„๋ถ€„ด 12๋‹ฌ๋Ÿฌ...ใ… ใ… 
    2. ง€›๊ธˆœผ๋กœ ๊ตฌ๋งค•˜๋Š”๊ฒŒ ข‹๊ฒ Œ.
  3. SE titan ฝ”๋“œ ๋ฆฌ๋ทฐ
  4. šŒ‹ - 7๋งŒ› ง€›๋ฐ›Œ

šŒ๊ณ 

  1. „œง€˜œ
    šŒ๊ณ ๋ฅผ šŒ‹œผ๋กœ  „ ๋ป” –ˆ๋‹ค.
  2. „œ˜ฃผ
  3.  •„๊ฒฝ
  4. ๋ฐ•ฌ •
  5. „œ๋ฏผ๊ด€
  6. •ˆ˜ค€
  7. ๊ณ •œข…

6›” 22ผ

  •  •„๊ฒฝ, ๊น€๋‚จ๊ทœ(™˜˜!), ๋ฐ•ฌ •
  • ๋‚จ๊ทœ C ฝ”๋“œ ๋ฆฌ๋ทฐ. •„ง „ ๋˜ง€ •Š€ ๊ณผ œ๋ฌผด๋ผ ฝ”๋“œ๋Š” ๋‚˜ค‘—..?
  • ๊ฟ€ž 
    •  œ๊ฐ€ ง€๋ฃจ•œ ๊ฐ•˜๋ฅผ •˜๋Š” ๋ฐ”๋žŒ—... -  •„๊ฒฝ
      • ›๋ž˜ ๋‚ด๊ฐ€ žˆ–ด•ผ –ˆ๋Š”๋ฐ ๊ฐœธ ธ ‚ฌ •œผ๋กœ ๋‹ค๋ฅธ ชฝ—„œ ‹œ๊ฐ„„ ๋งŽด “ฐ๋Š” ๋ฐ”๋žŒ—... ใ… ใ…  - „œ๋ฏผ๊ด€

8›” 24ผ

  • ๊น€๋‚จ๊ทœ, ๋ฐ•ฌ •, „œ๋ฏผ๊ด€, „œ˜ฃผ,  •„๊ฒฝ
  • Ch. 11 Systems
    • Separate Constructing a System from Using It.
  • ƒ„๊ณผ ‚ฌšฉ„ ๋ถ„๋ฆฌ–ˆ„ ‹œ˜ žฅ 
    - ๊ฐฒด ‚ฌšฉ ฝ”๋“œ๋Š” ๋Œ€๊ฐœ application ๋ ˆ๋ฒจธ ๊ฒฝšฐ๊ฐ€ ๋งŽ€๋ฐ, ๊ฐฒด ƒ„ ๋ฐฉ๋ฒ•ด ๋ฐ”๋€Œ–ด๋„ ‚ฌšฉ ๋ถ€๋ถ„€ ๊ทธ๋Œ€๋กœ œ ง€•  ˆ˜ žˆ๋‹ค.
    - ๊ฐฒด ƒ„‹œ— ๋‹ค–‘•œ ถ”๊ฐ€ ž‘—…๋“ค(proxy, lazy initialization ๋“)ด ๊ฐ€๋Šฅ•˜๋‹ค.
  • ƒ„
    • Factory Pattern
      - Factory๋ฅผ ‚ฌšฉ•˜๊ธฐ ๋•Œ๋ฌธ— ๋ณตžก•œ ๊ฐฒด˜ ƒ„ด๋‚˜ ๊ฐฒด˜ ‹ค œ ๋ชจ–‘„ ˆจ๊ธธ ˆ˜ žˆ๋‹ค.
      - application ๋‹จ๊ณ„—„œ Factory๋ฅผ †ต•ด„œ ง ‘ ๊ฐฒด๋ฅผ ƒ„•˜๊ธฐ ๋•Œ๋ฌธ— •ด๋‹น ๊ฐฒด˜ ƒ„ ˆœ๊ฐ„„ application—„œ †ต œ •  ˆ˜ žˆ๋‹ค.
    • Dependency Injection
      - ๊ฐฒด˜ …ž„„ ๊น”๋”•˜๊ฒŒ ๋‚˜๋ˆŒ ˆ˜ žˆ๋‹ค.
      - ‹œŠค…œ˜ ๊ตฌกฐ๊ฐ€ ๋ณตžก•ด ˆ ˆ˜ žˆ๋‹ค.
  • šก๋‹จ ๊ด€‹ฌ‚ฌ˜ ฒ˜๋ฆฌ(AOP) : DB  ‘†, transaction, log ๋“ ๋‹ค–‘•œ ๋ชจ๋“ˆ๋“ค—„œ ๋™ผ•˜๊ฒŒ ๋‚˜ƒ€๋‚˜๋Š” ž‘—…๋“ค
    • Java Proxies : ๊ฐฒด ƒ„ ‹œ— proxy๋ฅผ ๊น˜๊ฒŒ •˜๋Š” ๋ฐฉ๋ฒ•„ †ต•ด •ด๋‹น ๊ฐฒด˜ ๋ฉ”†Œ๋“œ ˜ธถœ‹œ ๋‹ค–‘•œ ๋ถ€๊ฐ€ ž‘—…๋“ค(šก๋‹จ ๊ด€‹ฌ‚ฌ)„ ฒ˜๋ฆฌ•  ˆ˜ žˆ๋‹ค. ๋‹ค๋งŒ ‚ฌšฉด ๋ณตžก•˜๊ณ  ‚ฌšฉ‹œ—๋„ •„๋ž˜˜ ๋ฐฉ๋ฒ•๋“ค— ๋น„•ด  œ•œด ข€ žˆ๋‹ค.
    • EJB, Spring ... : •ด๋‹น framework—„œ  œ๊ณต•˜๋Š” ๋‹ค–‘•œ ๋ฐฉ๋ฒ•๋“ค„ †ต•ด xml, annotation ๋“˜ ๊ฐ„๋‹จ•œ „ •œผ๋กœ šก๋‹จ ๊ด€‹ฌ‚ฌ— ๊ด€•œ ฝ”๋“œ๋ฅผ ž‘„•˜ง€ •Š๊ณ ๋„ •ด๋‹น ๊ธฐ๋Šฅ๋“ค„ ž‹ ˜ ”„๋กœ๊ทธ๋žจ— ๋„„ ˆ˜ žˆ๋‹ค.

8›” 31ผ

  • ๊น€๋‚จ๊ทœ, ๋ฐ•ฌ •, „œ๋ฏผ๊ด€, „œ˜ฃผ,  •„๊ฒฝ
  • Ch. 12 ฐฝ๋ฐœ„
    • ฐฝ๋ฐœ ˜„ƒ
      • ž‘€ ๋ถ€๋ถ„„ ๋ณด•˜„ ๋•Œ๋Š” ๋‚˜ƒ€๋‚˜ง€ •Š๋Š” Šน„ด  „ฒด๋ฅผ ๋ณด•˜„ ๋•Œ๋Š” ๋‚˜ƒ€๋‚˜๋Š” ๊ฒฝšฐ๋ฅผ ๋ง•œ๋‹ค.
      • ฝ”๋“œ˜ „๋Šฅ ๊ฐœ„ „ œ„•œ ๋ถ€๋ถ„ ธ ๋ฆฌŒฉ† ๋งด ด–ดง€๋‹ค ๋ณด๋ฉด –ด๋–ค Œจ„ด ๋‚˜ƒ€๋‚˜๋Š” ๊ฒฝšฐ๋ฅผ ˜ˆ๋กœ ๋“ค ˆ˜ žˆ๋‹ค.
    • ธ„Ž˜ดŠค ๋ถ„๋ฆฌ ›น™ (ISP)
      • –ด๋–ค ๊ฐฒด˜ ‚ฌšฉž—๊ฒŒ ๊ทธ ‚ฌšฉž•œ…Œ •„š”•œ ๋ฉ”†Œ๋“œ๋งŒ žˆ๋Š” ธ„Ž˜ดŠค๋ฅผ  œ๊ณต•˜๋ผ.
    • proxy pattern in javascript
      • ž๋ฐ”Šคฌ๋ฆฝŠธ—„œ ง€›•˜๋Š” apply •จˆ˜™€ arguments๋กœ •จˆ˜˜ ธž๊ฐ’„ ๋ฐ›•„˜ฌ ˆ˜ žˆ๋Š” ๊ฒƒ„ ดšฉ•ด ™ธ๋ถ€˜ ๋ผด๋ธŒ๋Ÿฌ๋ฆฌ ‚ฌšฉ —†ด๋„ ๊ฐ„๋‹จ•˜๊ฒŒ proxy๋ฅผ ๊ตฌ˜„•  ˆ˜ žˆ๋‹ค. jquery-aop ๋“˜ ™ธ๋ถ€ ๋ผด๋ธŒ๋Ÿฌ๋ฆฌ๋„ žˆ๋‹ค.

(function() {
    var proxied = console.log;
    console.log = function() {
       alert(arguments[0]); // ด๋ ‡๊ฒŒ apply˜ •ž ˜น€ ๋’ค๋กœ ‹ค–‰๋˜๊ธฐ๋ฅผ ›•˜๋Š” ๊ธฐ๋Šฅ„ ˜ธถœ•œ๋‹ค.
       return proxied.apply(this, arguments);
  };
})();


2013๋…„ 11›” 09ผ

  • ๊น€๋‚จ๊ทœ, ๋ฐ•ฌ •, „œ๋ฏผ๊ด€, „œ˜ฃผ,  •„๊ฒฝ, ‹ ˜•ค€

comment me

  • Šค„ฐ๋”” ด๋ฆ„  ••ฉ‹œ๋‹ค. •„๋ฆ„๋‹ค›€„ ถ”๊ตฌ•˜๋‹ˆ๊นŒ †Œ๋‹ˆ —๋ฆญŠจ? - „œง€˜œ
    • •„๋ฆ„๋‹คšด ๊ธ๋กœ •˜ž๋ฉด unit sphere ๊ฐ™€ ๊ฒŒ •„๋ฆ„๋‹คšธ ๊ฒƒ ๊ฐ™๊ธด •œ๋ฐ... ๊ทธ๊ข€ •„๋‹Œ ๊ฒƒ ๊ฐ™ฃ  -_-;; - „œ๋ฏผ๊ด€
  • ›„๊ธฐ๋ฅผ +, -, F ๋ฐฉ‹œผ๋กœ ๋‚˜๋ˆ„–ด ž‘„–ˆ„š”! ข‹€ ๋ฐฉ‹ธ๋“ฏใ…‹ใ…‹ - ๊น€๋ฏผžฌ
    • —‡ ๋‚œ ๊Šฌ๋ ค„œ ๋ฐ”๊ฟ€๋žฌ๋Š”๋ฐ ๊ทธ๋ƒฅ ๋ƒ…๋‘ฌ•ผง€ใ…‹ใ…‹ - „œง€˜œ
  • „๊ฒฝ 8/24ผž wiki ๋‚ดšฉ ž‘„•ดค˜„œ ๊ณ ๋งˆ›Œ - „œ๋ฏผ๊ด€
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:54
Processing time 0.0457 sec