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.1003 sec