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