working effectively with legacy code errata - andstudy/forge GitHub Wiki

working effectively with legacy code errata

๋ฌผ๋ก  ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋ฒˆ์—ญ๋„ ํ‹€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ์˜ ๊ธ€

  • ์ œ ์‚ผ์ดŒ ๋งˆํ‹ด - 7
    • '''์—‰ํด ๋ฐฅ''', ๋กœ๋ฒ„ํŠธ ๋งˆํ‹ด
    • ์—‰ํด ๋ฐฅ์€ ๋กœ๋ฒ„ํŠธ ๋งˆํ‹ด์˜ ๋ณ„๋ช…, ์ €์ž์˜ ์‚ผ์ดŒ์ด ์•„๋‹˜
  • ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ์œผ๋กœ ๋ถ€ํ„ฐ ๋น„ํŒ์ ์ธ ๊ฒƒ์„ ๋ถ„๋ฆฌ์‹œํ‚ค๋Š” ์ผ - 7
    • ์ค‘์š”ํ•œ ๊ฒƒ๊ณผ ์‚ฌ์†Œํ•œ ๊ฒƒ์„ ๋ถ„๋ฆฌํ•˜๊ธฐ

์ €์ž ์„œ๋ฌธ

  • ์‘. ์ง€๊ธˆ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ค‘์ด์•ผ - 9
    • ์ปจ์„คํŒ…ํ•˜๋Ÿฌ ์™€์„œ ๋ณด๋‹ˆ๊นŒ, ๋‹ค๋“ค ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋งŒ ๋งŒ๋“ค๊ณ  ์•‰์•„์žˆ์–ด
    • ์นœ๊ตฌ๊ฐ€ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ•˜๋Š”๊ฒŒ ์•„๋‹˜
  • ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์—์„œ๋Š” ๋ช‡๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉด ๋‹ค๋‹ค๋ฅด๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค - 12
    • ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์—์„œ๋Š” ์ „ํ˜€ ๋ณ„๊ฐœ์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ์ข‹์€ ๋””์ž์ธ์— ๋‹ค๋‹ค๋ฅธ๋‹ค
    • but in legacy code, it is something that we arrive at in discrete steps.

1์žฅ. ์†Œํ”„ํŠธ์›จ์–ด ๋ณ€๊ฒฝ

  • ๋งŒ์•ฝ ๋‹ด๋‹น๋ถ€์„œ ์‚ฌ๋žŒ๋“ค์ด ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์˜์‚ฌ๋ฅผ ์ฒ ํšŒํ•œ๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ๋ฒŒ์จ ์ด ์ผ์„ ๋๋ƒˆ์„ ๊ฒƒ์ด๋‹ค - 30
    • ๊ทธ ์‚ฌ๋žŒ๋“ค์ด ๋งˆ์Œ์„ ์ž๊พธ ๋ฐ”๊ฟ”๋จน์ง€๋งŒ ์•Š์•˜์–ด๋„, ๋ฒŒ์จ ์ผ์„ ๋๋ƒˆ์„ ๊ฒƒ์ด๋‹ค
    • ์žฆ์€ ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ์œผ๋กœ ์ผ์ •์ด ๋Šฆ์–ด์ง€๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ
  • ์‚ฌ๋žŒ๋“ค์ด ์ž‘์—…ํ•  ๋•Œ๋Š” ์ƒˆ๋กœ์šด ํŠน์ง•์„ ์ถ”๊ฐ€ํ•˜๊ฑด, ํ˜น์€ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑด ๊ฐ„์— ์šฐ๋ฆฌ๋Š” ๋Š์ž„์—†์ด ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์œผ๋‚˜ ์ด๋Š” ๋‹จ์ง€ ์ฝ”๋“œ๋‚˜ ๋‹ค๋ฅธ ์ธ๊ณต๋ฌผ์„ ๋ณ€ํ™”์‹œํ‚ค๋Š” ๊ฒƒ์— ๊ตญํ•œ๋œ๋‹ค - 30
    • ์‚ฌ๋žŒ๋“ค ๋ผ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์ถ”๊ฐ€๋กœ ๋ถ€๋ฅด๋“  ์˜ค๋ฅ˜์ˆ˜์ •์œผ๋กœ ๋ถ€๋ฅด๋“  ์–ธ์ œ๋“  ๋ฐ”๊ฟ” ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Ÿฐ ์ž‘์—…๋“ค์€ ์‚ฌ๋žŒ์— ๊ด€๋ จ๋œ ์ž‘์—…์ด ์•„๋‹ˆ๋ผ ์†Œ์Šค์ฝ”๋“œ์™€ ์‚ฐ์ถœ๋ฌผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์ด๋‹ค
    • At the people level, we can go back and forth endlessly about whether we are adding features or fixing bugs, but it is all just changing code and other artifacts
  • ๋™์ž‘์€ ์†Œํ”„ํŠธ์›จ์–ด์— ์žˆ์–ด์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ๋กœ ์‚ฌ์šฉ์ž๋Š” ๋ฐ”๋กœ ์ด ๋™์ž‘์„ ๋”ฐ๋ฅด๊ฒŒ ๋œ๋‹ค - 30
    • ๋™์ž‘์€ ์†Œํ”„ํŠธ์›จ์–ด์— ์žˆ์–ด์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ๋กœ, ์‚ฌ์šฉ์ž๋Š” ๋ฐ”๋กœ ์ด ๋™์ž‘์„ ๋”ฐ๋ฅด๊ฒŒ ๋œ๋‹ค
    • ์‰ผํ‘œ ์ถ”๊ฐ€. ์›๋ฌธ์€ ๋‘ ๋ฌธ์žฅ์ธ๋ฐ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ, ์‰ผํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž.
  • ๋ฐ˜๋Œ€๋กœ ๊ทธ๋“ค์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋ฉด ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ - 30
    • ๋ฒ„๊ทธ '''๋•Œ๋ฌธ์—''' ์ž˜ ์“ฐ๊ณ  ์žˆ๋˜ ๋™์ž‘์ด ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ์‚ฌ๋ผ์ง„๋‹ค๋ฉด
  • ์šฐ๋ฆฌ๊ฐ€ ๋งŒ์ผ ์ฝ”๋“œ(HTML๊ณผ ๊ฐ™์€ ์ฝ”๋“œ)๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋™์ž‘๊นŒ์ง€ ๋ณ€๊ฒฝ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค - 31
    • ์ฝ”๋“œ(HTML๋„ ์ฝ”๋“œ๋กœ '''์ทจ๊ธ‰'''ํ•œ๋‹ค)๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด ๋™์ž‘๋„ ๋ณ€๊ฒฝ ๋๋‹ค๊ณ  '''๋ณผ ์ˆ˜ ์žˆ๋‹ค'''
  • ์–ด๋–ค ์กฐ๊ฑด์„ ์œ„๋ฐ˜ ํ–ˆ๋Š”์ง€๋ฅผ - 35
    • ๋ญ”๊ฐ€ '''๋ง๊ฐ€ํŠธ๋ฆฌ์ง€''' ์•Š์•˜๋Š”์ง€๋ฅผ
  • ์œ„๋ฐ˜์ด ์•„๋‹ˆ๋ฉด ๊ณ ์น˜์ง€๋„ ๋ง๋ผ - 35
    • '''๊ณ ์žฅ'''๋‚˜์ง€ ์•Š์•˜์œผ๋ฉด ๊ณ ์น˜์ง€ ๋งˆ๋ผ

2์žฅ. ํšจ๊ณผ์ ์ธ ํ”ผ๋“œ๋ฐฑ ํ™œ์šฉ

  • ๋‚˜๋Š” ์ด ์›์ธ๋“ค์„ 'ํŽธ์ง‘ํ•˜๊ณ  ๊ธฐ๋„ํ•˜๊ธฐ' - 37
    • ๋‚˜๋Š” ์ด '''๋ฐฉ๋ฒ•๋“ค์„''' 'ํŽธ์ง‘ํ•˜๊ณ  ๊ธฐ๋„ํ•˜๊ธฐ'
  • ๋ฎ๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ - 37
    • ๊ฐ์‹ธ๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ
    • cover - ๋ฎ๋‹ค, ๊ฐ์‹ธ๋‹ค, ๋ณดํ˜ธํ•˜๋‹ค, ์—„ํ˜ธํ•˜๋‹ค.
    • ๊ฐ์‹ธ์„œ ๋ณดํ˜ธํ•œ๋‹ค๋Š” ์˜๋ฏธ
  • ๊ณ„ํš์„ ์„ธ์šฐ๊ณ  - 37
    • ๊ณ„ํš์„ '''์ฃผ์˜๊นŠ๊ฒŒ''' ์„ธ์šฐ๊ณ 
  • ๊ณ„ํš์— ๋ฐ˜ํ•˜๋Š” ์‚ฌํ•ญ์ด - 37
    • ๋ญ”๊ฐ€ ๋ง๊ฐ€ํŠธ๋ฆฌ์ง€ ์•Š์•˜๋Š”์ง€
  • ๊ฐœ์ธ ์‹œ๊ฐ„์„ ํˆฌ์žํ•ด์„œ๋ผ๋„ - 37
    • '''์ถ”๊ฐ€''' ์‹œ๊ฐ„์„ ํˆฌ์žํ•ด์„œ๋ผ๋„
  • ์—ฌ๋Ÿฌ๋ถ„์ด ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋ฉด ํ‘œ๋ฉด์ ์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„์ด ๋ฐ”๋ผ๋Š” ๋ชฉ์ ์ง€๋กœ ์ธ๋„ํ•ด์ค„ ๊ฒƒ์ด๋‹ค - 37
    • ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ•ต์‹ฌ ๋ฐ”๋กœ ๊ทธ๊ณณ์— "์ฃผ์˜"๋ฅผ ๊ธฐ์šธ์—ฌ์•ผ ํ•œ๋‹ค
    • The "care" that you take is right there at the forefront
  • ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์–ป๋Š” ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ์ข€๋” ๊ผผ๊ผผํžˆ - 38
    • ๊ฐ™์€ ์–‘์˜ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋ฉด์„œ๋„, ํ”ผ๋“œ๋ฐฑ์„ ํ•จ๊ป˜ ํ™œ์šฉํ•˜๋ฉด, ์šฐ๋ฆฌ๋Š” ์ข€๋” ๊ผผ๊ผผํžˆ
    • We still apply the same care, but with the feedback we get, we are able to make changes more carefully
    • ๋ฌธ์žฅ ์ผ๋ถ€๋ถ„ ๋ฒˆ์—ญ ๋นผ๋จน์Œ - We still apply the same care,
  • ํ…Œ์ŠคํŠธ ์ž์ฒด๊ฐ€ ์ข‹์€ ๋ชฉ์ ์ผ ์ˆ˜๋„ ์žˆ๊ณ  - 38
    • ๋ฌผ๋ก  ๊ทธ๊ฒƒ๋งŒ์œผ๋กœ๋„ ํ›Œ๋ฅญํ•œ ๋ชฉํ‘œ์ง€๋งŒ,
    • ๊ทธ๊ฒƒ์€ ์•ž ๋ฌธ์žฅ์„ ์˜๋ฏธ - "์ •ํ™•์„ฑ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ํ…Œ์ŠคํŠธ"
  • ์ ์šฉ ๋ฒ”์œ„ - 42
    • ์ปค๋ฒ„๋ฆฌ์ง€(coverage)
    • "์ ์šฉ ๋ฒ”์œ„"๋Š” ์˜๋ฏธ๊ฐ€ ์™€๋‹ฟ์ง€ ์•Š๋Š”๋‹ค. ์ ๋‹นํ•œ ๋ฒˆ์—ญ์€ ๋– ์˜ค๋ฅด์ง€ ์•Š์Œ.
  • ์šฐ๋ฆฌ๊ฐ€ ์ข€๋” ์ž์ฃผ ํ…Œ์ŠคํŠธ ๋ฃจํ‹ด์„ ๋Œ๋ฆด ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ์ง€์—ญํ™”์— ๋น ์งˆ ์šฐ๋ ค๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค - 42
    • ํ…Œ์ŠคํŠธ๋ฅผ ์ž์ฃผ ๋Œ๋ ค์•ผ๋งŒ ์˜ค๋ฅ˜๋ฅผ ์ง€์—ญํ™” ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,
    • ์˜ค๋ฅ˜ ์ง€์—ญํ™”๋Š” ์ข‹์€๊ฒƒ์ด๋‹ค.
    • ๋Œ€๊ทœ๋ชจ ํ…Œ์ŠคํŠธ๋Š” ์‹œ๊ฐ„์ด ๋งŽ์ด ๋“ค์–ด ์ž์ฃผ ๋Œ๋ฆด ์ˆ˜ ์—†์–ด์„œ ์ขŒ์ ˆํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ์˜๋ฏธ
  • ํ…Œ์ŠคํŠธ ๋ฃจํ‹ด์—๋Š” ์—ฐ์†๋˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๊ฒŒ ๋งˆ๋ จ์ด๋‹ค - 42
    • ๋ณดํ†ต์€, ์—ฐ์†์ฒด๊ฐ€ ์žˆ๊ธฐ ๋งˆ๋ จ์ด๋‹ค.
    • Naturally, there is a continuum
    • continuum - ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ์น˜ ํฐ ํด๋ž˜์Šค๋ฅผ "์—ฐ์†์ฒด"๋ผ๊ณ  ์ด๋ฆ„ ๋ถ™์ธ ๋“ฏ ํ•จ
  • ์‹œ๊ฐ„์ด 1/100๋กœ ์ค„์–ด๋“ ๋‹ค๋ฉด - 43
    • ์‹œ๊ฐ„์ด 1/100'''์ดˆ'''๋กœ ์ค„์–ด๋“ ๋‹ค๋ฉด
  • ํ…Œ์ŠคํŠธ ๋ฎ๊ฐœ - 44
    • ํ…Œ์ŠคํŠธ๋กœ ๊ฐ์‹ธ๊ธฐ(Test Coverings)
  • ์ด๊ฒƒ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฌ์šด ์ผ์ด๋‹ค - 45
    • ์ด๊ฒƒ์„ ์ƒ์„ฑํ•˜๋Š”๊ฒŒ ์‰ฌ์šธ๊นŒ?
    • How easy will it be to create one of those?
    • ์‰ฝ์ง€ ์•Š๊ณ  ์˜คํžˆ๋ ค ์–ด๋ ต๋‹ค๋Š” ์˜๋ฏธ
  • ์šฐ๋ฆฌ๋Š” ์„œ๋ธ”๋ฆฟ์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์ง€ ์•Š๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค - 45
    • '''๊ฒฝ์šฐ์— ๋”ฐ๋ผ''' ์„œ๋ธ”๋ฆฟ์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์ง€ ์•Š๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜'''๋„''' ์žˆ๋‹ค
    • ๋’ท ๋ฌธ์žฅ์— ๋‚˜์˜ค๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๊ฒฝ์šฐ์— ์ˆ˜์ • ๊ฐ€๋Šฅ ํ•˜๋‹ค๋Š” ์˜๋ฏธ
  • ์ œ์ž๋ฆฌ - 46
    • ์ ์ ˆํ•œ ์ž๋ฆฌ์—
    • in place - ์ ์ ˆํ•œ ์ž๋ฆฌ์—, ์ ์†Œ์—
  • ์นจ์Šต์„ฑ(์Šค๋ฉฐ๋“ค์–ด ์ –๋Š” ์„ฑ์งˆ) - 47
    • ์นจ์Šต์ ('''๊ณต๊ฒฉ์ ์ด๋ผ ํ•ด๊ฐ€๋˜๋Š”''')
  • ๋œ ๋ณด์ˆ˜์ ์ด๋ผ๋ฉด ๊ทธ ๋ถ€๋ถ„์„ ์ฆ‰์‹œ ๊ณ ์น  ๊ฒƒ์ด๋‹ค - 48
    • ๋œ ๋ณด์ˆ˜์ ์ด๋ผ๋ฉด ๊ทธ ๋ถ€๋ถ„์„ ''' ๋ณ„ ์ƒ๊ฐ์—†์ด ๋ฐ”๋กœ''' ๊ณ ์น  ๊ฒƒ์ด๋‹ค
  • '''4์ค„ ์‚ญ์ œ'''
    • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋” ์ด์ƒ ์„œ๋ธ”๋ฆฟ์„ ๋ฐ›์ง€ ... ํ™•์ธํ•˜๋ ค๋ฉด ์ •ํ™•ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    • ์ด ๋‚ด์šฉ์€ 45p ๊ทธ๋ฆผ ์œ—๋ถ€๋ถ„์— ์žˆ๋Š” ๋‚ด์šฉ์ด๋‹ค. ๊ธ€์ž๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด์ง€๋งŒ ๋‚ด์šฉ์€ ๊ฐ™๋‹ค. ์‚ญ์ œํ•˜์ž.
    • ์ถ”์ธกํ•˜๋ฉด copy & paste ์‹ค์ˆ˜๋กœ ์ด์ „ ํŽ˜์ด์ง€ ๋‚ด์šฉ์ด ์—‰๋šฑํ•œ ๊ณณ์— ํ‹€์–ด๋ฐ•ํ˜€ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
    • c&p๋Š” ์ฝ”๋”ฉํ• ๋•Œ๋งŒ ํ•ฉ์‹œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ๊ทธ ์œ„ํ—˜๋„์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค - 47
    • ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์œ„ํ—˜๋„๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€ ๋”ฐ์ ธ๋ด์•ผ ํ•œ๋‹ค.
    • We can do that, but it depends upon how much risk is involved
    • ๋ฌธ์žฅ ์ผ๋ถ€๋ถ„ ๋ฒˆ์—ญ ๋นผ๋จน์Œ - We can do that,
  • ์˜ค๋ฅ˜๊ฐ€ ํฐ ๋ฌธ์ œ์ด๊ฑฐ๋‚˜ ์ผ์ƒ์ ์ด๋ผ๋ฉด ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์•Œ๋งž์€ ๋Œ€์‘์„ ํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค - 47
    • ์˜ค๋ฅ˜๊ฐ€ ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋  ๋•Œ๋ฉด, ๋ณดํ†ต์˜ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋Š” ํฐ ๋ฌธ์ œ์ธ๋ฐ, ๊ทธ๋Ÿด๋•Œ๋Š” ๋ณด์ˆ˜์ ์œผ๋กœ ์‹ ์ค‘ํ•ด์ ธ์•ผ ํ•œ๋‹ค.
    • When errors are a big deal, and they usually are, it pays to be conservative.
  • ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์—์„œ ํ•˜๋ฃจํ•˜๋ฃจ์˜ ๋ชฉํ‘œ๋Š” ๋ณ€๊ฒฝ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ํ–‰์œ„์ด๋‹ค. ๊ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ํ”ผ์†Œ๋“œ์˜ - 48
    • ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์—์„œ ํ•˜๋ฃจํ•˜๋ฃจ์˜ ๋ชฉํ‘œ๋Š” ๋ณ€๊ฒฝ์ด๋‹ค. ํ•˜์ง€๋งŒ, ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ ๋๋‚˜์„œ๋Š” ์•ˆ๋œ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์  ๋ณ€๊ฒฝ์„ ํ•จ์œผ๋กœ์จ ์ œํ’ˆ์— ๊ฐ€์น˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋™์‹œ์— ํ…Œ์ŠคํŠธ์— ๋ณดํ˜ธ๋ฐ›๋Š” ๋ถ€๋ถ„์ด ๋” ๋งŽ์•„์ง€๋„๋ก ์‹œ์Šคํ…œ์„ ๊ณ ์ณ์•ผ ํ•œ๋‹ค.
    • The day-to-day goal in legacy code is to make changes, but not just any changes. We want to make functional changes that deliver value while bringing more of the system under test.
    • ๋ฌธ์žฅ ํ•˜๋‚˜๋ฅผ ์™„์ „ํžˆ ๋นผ๋จน์Œ.
    • ์–ด์ƒ‰ํ•œ ๋ถ€๋ถ„์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ์›๋ฌธ์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋˜์ง€๋งŒ, ๋ฌธ์žฅ์„ ์•„์˜ˆ ๋นผ๋จน๋Š”๊ฑด ๋‹ต์ด ์—†๋‹ค.
  • ํ˜น ๊ทธ๋Ÿฐ ๊ธฐ๋ฒ•๋“ค์„ ์‚ฌ์šฉํ•˜๊ธธ ์›ํ•œ๋‹ค๋ฉด ๊ด€๋ จ ์„œ์ ์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค - 50
    • ๊ทธ๋Ÿฐ ๊ธฐ๋ฒ•๋“ค์„ ์‚ฌ์šฉํ•  ๊ธฐํšŒ๊ฐ€ ์˜ค๋ฉด, ๋ฐ˜๋“œ์‹œ ์ ์šฉํ•ด ๋ณด๊ธธ '''์ ๊ทน ์ถ”์ฒœ'''ํ•œ๋‹ค
  • ์„ค๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ž˜ ํ•˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค„ ๊ฒƒ์ด๋‹ค - 50
    • ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด '''๋” ๋‚˜์€ ์„ค๊ณ„๋กœ ๊ฐœ์„ ํ•˜๋Š”์ง€''' ๋ณด์—ฌ์ค„ ๊ฒƒ์ด๋‹ค
  • ์ด๋•Œ์˜ ์ž˜ ์ด๋ค„์ง„ ์„ค๊ณ„๋Š” ๋ฌธ๋งฅ ์ข…์†์ ์ด๊ณ  ์ข…์ข… ์ด์ „ ์„ค๊ณ„๋ณด๋‹ค ๋ช‡ ๊ฐœ์˜ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋‹จ๊ณ„๋ฅผ ๋” ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค - 50
    • "๋” ๋‚˜์€"์ด๋ž€ ์˜๋ฏธ๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ๋ฐ ์ด์ „ ์„ค๊ณ„๋ณด๋‹ค ์šด์˜ ๊ฐœ์„ ํ•˜๊ธฐ๊ฐ€ ๋ช‡ ๋‹จ๊ณ„ ์ •๋„ ์‰ฌ์›Œ์กŒ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค.
    • where "better" is context dependent and often simply a few steps more maintainable than the design was before.

3์žฅ. ๊ฐ์ง€์™€ ๋ถ„๋ฆฌ

  • ๊ฐ์ง€: ์–ธ์ œ ์ฝ”๋“œ๊ฐ€ ๊ณ„์‚ฐํ•˜๋Š” ๊ฐ’๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š”์ง€๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์˜์กด๊ด€๊ณ„๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค - 52
    • ํƒ์ง€ ํ™•๋ณด - ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฐ’์— ์ ‘๊ทผ ํ•˜์ง€ ๋ชปํ• ๋•Œ, ํƒ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์˜์กด๊ด€๊ณ„๋ฅผ ๊นจํŠธ๋ฆฐ๋‹ค
    • Sensing - We break dependencies to sense when we can't access values our code computes
    • Sensing ๊ณผ sense ๊ตฌ๋ณ„ํ•˜๋Š”๊ฒŒ ์ข‹์ง€ ์•Š์„๊นŒ?
  • ๋ถ„๋ฆฌ: ์–ธ์ œ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค์— ๋„ฃ์–ด ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋Š”์ง€๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์˜์กด๊ด€๊ณ„๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค - 52
    • ๋ถ„๋ฆฌ ํ™•๋ณด - ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค์— ๋„ฃ์–ด ์‹คํ–‰ํ•  ์ฝ”๋“œ ์กฐ๊ฐ์„ ์–ป์ง€ ๋ชปํ• ๋•Œ, ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์˜์กด๊ด€๊ณ„๋ฅผ ๊นจํŠธ๋ฆฐ๋‹ค
    • Separation - We break dependencies to separate when we can't even get a piece of code into a test harness to run
  • ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋Š” sale ํด๋ž˜์Šค๊ฐ€ ๊ฐ์ฒด๋ฅผ FakeDisplay๋กœ ์—ฌ๊ฒจ์•ผ ํ•œ๋‹ค - 58
    • ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ๋Š” FakeDisplay ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•ด์•ผ ํ•œ๋‹ค

4์žฅ. ๋ด‰ํ•ฉ ๋ชจ๋ธ

  • ๋ด‰ํ•ฉ
    • ์ด์Œ๋งค(seam)
    • ์ด๋™ํ˜„(jeddli)(http://jeddli.tistory.com/)๋‹˜์ด ์ ์ ˆํ•œ ๋‹จ์–ด๋ฅผ ๊ณจ๋ผ ์ฃผ์…จ์Šต๋‹ˆ๋‹ค.
  • ๋ด‰ํ•ฉ : ๋ด‰ํ•ฉ(seams)์€ ํ”„๋กœ๊ทธ๋žจ ์•ˆ์—์„œ ๋™์ž‘์„ ๋ณ€ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ๋งํ•œ๋‹ค. ์ด๋•Œ ๋™์ž‘์„ ๋ณ€ํ™”์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ํŽธ์ง‘ํ•  ํ•„์š”๋Š” ์—†๋‹ค. - 64
    • ์ด์Œ๋งค(seams)๋Š” ๊ทธ ์œ„์น˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ๋ณ€ํ™”์‹œํ‚ค๋Š” ์œ„์น˜๋ฅผ ๋งํ•œ๋‹ค.
  • ์ž, ๊ทธ๋Ÿฌ๋ฉด CAsyncSSlRec ํด๋ž˜์Šค๋ฅผ ํ•˜์œ„ํด๋ž˜์Šคํ•˜๊ณ  PostReceive ๋ฉ”์†Œ๋“œ์— ๋ฎ์–ด์“ฐ๋ฉด ์–ด๋–จ๊นŒ? - 64
    • ์ž, ๊ทธ๋Ÿฌ๋ฉด CAsyncSSlRec ํด๋ž˜์Šค๋ฅผ ํ•˜์œ„ํด๋ž˜์Šคํ•˜๊ณ  PostReceive ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ(override)ํ•˜๋ฉด ์–ด๋–จ๊นŒ?
    • override๋ฅผ ๋ฎ์–ด์“ด๋‹ค๊ณ  ๋ฒˆ์—ญํ•˜๊ธฐ ๋ณด๋‹ค ์˜์–ด ์šฉ์–ด๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ดํ•ด๊ฐ€ ๋” ์‰ฝ๋‹ค.
  • ๋ถˆ๋ช…ํ™•ํ•œ ๋ฒ„๊ทธ๋ฅผ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•œ ๋งคํฌ๋กœ๋ฅผ ๋งŒ๋“ค๊ธฐ๋„ ํ•˜๋Š”๋ฐ ์ด๋Ÿฐ ์ผ์€ ์‰ฌ์šด์ผ์— ์†ํ•œ๋‹ค - 68
    • ๋งคํฌ๋กœ๋ฅผ ์ž‘์„ฑํ• ๋•Œ ์—„์ฒญ๋‚˜๊ฒŒ '''์ฐพ๊ธฐ ์–ด๋ ค์šด''' ๋ฒ„๊ทธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์‰ฝ๋‹ค
  • ์ฐธ์กฐ๋ฅผ ๋ถ„ํ•ดํ•  ๋•Œ ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋“  ๊ฐ„์— - 71
    • ์‚ฌ์šฉ์ค‘์ธ ์–ธ์–ด๊ฐ€ ์ฐธ์กฐ๋ฅผ '''ํ•ด์„'''ํ•˜๋Š”๋ฐ ์–ด๋–ค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋“  ๊ฐ„์—
  • ์ „์ฒ˜๋ฆฌ ๋ด‰ํ•ฉ๊ณผ ์—ฐ๊ฒฐ ๋ด‰ํ•ฉ์€ ์˜์กด๊ด€๊ณ„์— ์นจ์Šต์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€์•ˆ์ด ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฐ์•ˆํ•ด ์ด๋ฅผ ๋‚จ๊ฒจ ๋†“์„ ๊ฒƒ์ด๋‹ค - 81
    • ์ „์ฒ˜๋ฆฌ ์ด์Œ๋งค์™€ ์—ฐ๊ฒฐ ์ด์Œ๋งค๋Š” ์ผ๋‹จ ์‚ฌ์šฉ์„ ๋ฏธ๋ค„๋‘๊ณ , ์˜์กด๊ด€๊ณ„๊ฐ€ '''๋„๋ฆฌ ํผ์ ธ''' ๋” ๋‚˜์€ ๋Œ€์•ˆ์ด ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค

5์žฅ. ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ

  • ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์ž‘์—…์€ ์ข€ ๋” ์ •ํ™•ํžˆ๋Š” ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์ ํ•ฉ์„ฑ ์˜์—ญ์ด๋‹ค - 93
    • ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์ž‘์—…์€ '''FIT์™€ Fitness์˜ ์˜์—ญ'''์ด๋ผ ๋ณด๋Š”๊ฒŒ ๋” ์ ์ ˆํ•˜๋‹ค

6์žฅ. ๊ณ ์น  ๊ฑด ๋งŽ๊ณ  ์‹œ๊ฐ„์€ ์—†๊ณ 

  • ๋‚ ์งœ๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์—๋Š” ๊ทธ ์ƒˆ ํ•ญ๋ชฉ์ด - 100
    • ๋‚ ์งœ๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ๊ทธ ์ƒˆ ํ•ญ๋ชฉ์ด ('๋Š”' ์‚ญ์ œ)
  • ์นจํˆฌ์„ฑ - 101, 109
    • ์นจ์Šต์ 
  • ์—ฌ๊ธฐ์„œ๋Š” ์ง€๋ถˆ์„ ๊ธฐ๋กํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ํ•œ ๋ถ€๋ถ„์— LogPayDispatcher ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค - 118
    • ์ด์ œ ์ง€๋ถˆ์„ ๊ธฐ๋กํ•ด์•ผํ•  ๊ณณ์—์„œ LogPayDispatcher ํด๋ž˜์Šค๋ฅผ '''์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค'''

7์žฅ. ์ฝ”๋“œ ํ•˜๋‚˜ ๋ฐ”๊พธ๋Š” ๋ฐ ์™œ ์ด๋ฆฌ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€?

  • ๊ทธ๋ฆผ์—๋Š” ๋‚˜ํƒ€๋‚˜ ์žˆ์ง€ ์•Š์ง€๋งŒ ๊ทธ ๋‘ ํด๋ž˜์Šค๊ฐ€ ์„œ๋กœ ์ข…์†๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ๋” ์ข‹๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค - 126
    • ๋‘ ํด๋ž˜์Šค ๋ชจ๋‘ ๊ทธ๋ฆผ์— ๋‚˜์˜ค์ง€ ์•Š์€ '''๋˜ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค์— ์˜์กด'''ํ•˜๊ณ  ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค
  • ๋‹ค์Œ์— ConsultantSchedulerDBImpl, AddOpportunityFormHandler๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๋Š” ์žฌ์ปดํŒŒ์ผํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค - 127
    • ์ด์ œ ConsultantSchedulerDBImpl๋ฅผ ์ˆ˜์ •ํ•ด๋„, AddOpportunityFormHandler๋Š” ์žฌ์ปดํŒŒ์ผํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค

8์žฅ. ํŠน์ง•, ์–ด๋–ป๊ฒŒ ์ถ”๊ฐ€ํ• ๊นŒ?

  • ๋น„๊ต๋ฅผ ํ†ตํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - 140, 148, 151
    • ์ฐจ์ด์— ์˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Programming by Difference)
  • ์˜์กด๊ด€๊ณ„ - 140, 149 ๋“ฑ
    • '''์ƒ์†'''
  • ํ•˜์ง€๋งŒ ์˜์กด๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ œ์ž๋ฆฌ ์˜์กด๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์€ ์•„๋‹ˆ๋‹ค - 140
    • ํ•˜์ง€๋งŒ ์ƒ์†์„ ์‚ฌ์šฉํ–ˆ์„๋•Œ, ์ œ๋Œ€๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ƒ์†์„ ์‚ฌ์šฉํ–ˆ๋‹ค๊ณ  ์žฅ๋‹ด ํ•  ์ˆ˜ ์—†๋‹ค.
    • But just because we use inheritance initially doesn't mean that we have to keep it in place.
    • ์ด ๋ฌธ์žฅ์˜ ์ฃผ์–ด๋Š” ๊ณผ์—ฐ ๋ฌด์—‡์ผ๊นŒ? ์ด ๋ฌธ์žฅ์€ ๊ณผ์—ฐ ๊น”๋”ํ•œ ์˜์–ด ๋ฌธ์žฅ์ผ๊นŒ? ๋ฏธ๊ตญ์• ๋“ค์ด ๋ณผ๋•Œ ๋ฌธ์žฅ๊ตฌ์กฐ๋‚˜ ์˜๋ฏธ๊ฐ€ ๋ช…ํ™•ํ• ๊นŒ?
  • ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์•ˆ์— ์žˆ๋Š” ํ˜„์žฌ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋ ค๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค - 150
    • ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ฉ”์†Œ๋“œ์—์„œ ์˜ค๋ฒ„๋ผ์ด๋“œ ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค
  • ๊ฐ€๋”์”ฉ ์ผ์–ด๋‚˜๋Š” ์ถ”์ƒ์ ์ธ ์˜ค๋ฒ„๋ผ์ด๋“œ๋Š” - 151
    • ๊ฐ€๋”์”ฉ ์ผ์–ด๋‚˜๋Š” '''๊ตฌ์ฒด(concrete)''' ์˜ค๋ฒ„๋ผ์ด๋“œ๋Š”

9์žฅ. ๋š๋”ฑ! ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค์— ํด๋ž˜์Šค ์ œ๋Œ€๋กœ ๋„ฃ๊ธฐ

  • ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋Š” ์ผ์€ ์ฐธ ์–ด๋ ค์šด ์ผ์ด์ง€๋งŒ ๋ฉ‹์ง„ ์ž‘์—…์ด๊ธฐ๋„ ํ•˜๋‹ค - 153
    • ์ด๋Š” ์ •๋ง ์–ด๋ ต๋‹ค
    • This is the hard one
    • 9์žฅ ์ œ๋ชฉ์˜ ์ž‘์—…์ด ์–ด๋ ต๋‹ค๋Š” ์˜๋ฏธ (ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค์— ์š”๋†ˆ์˜ ํด๋ž˜์Šค๋ฅผ ๋ชป ์ง‘์–ด๋„ฃ๊ฒ ์–ด์š”!)
  • ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค์—์„œ ํด๋ž˜์Šค์˜ ๊ตฌ์ฒด์  ์˜ˆ๋ฅผ ๋“œ๋Š” ๊ฒƒ์€ ์‰ฌ์šด ์ผ์ด์ง€๋งŒ, ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ ์–‡์€ ์ด ์ฑ…์„ ํ†ตํ•ด ์ œ์‹œํ•˜๊ธฐ๋ž€ ๊ฒฐ์ฝ” ์‰ฌ์šด ์ผ์ด ์•„๋‹ˆ๋‹ค - 153
    • ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค์—์„œ ํด๋ž˜์Šค์˜ '''์ธ์Šคํ„ด์Šค'''๋ฅผ ๋งŒ๋“ค๊ธฐ๊ฐ€ '''์‰ฝ๋‹ค๋ฉด''', ์ด ์ฑ…์€ ๋ฌด์ฒ™ '''์–‡์•„์กŒ์„''' ๊ฒƒ์ด๋‹ค
  • ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค๋Š” ๊ทธ ์•ˆ์˜ ํด๋ž˜์Šค์™€ ํ•จ๊ป˜ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š๋Š”๋‹ค - 153
    • ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋“ค์„ ์—ฎ์–ด ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ๋Š” ์‰ฝ์ง€ ์•Š๋‹ค
    • The test harness won't easily build with the class in it
  • ๊ตฌ์กฐ - 153, ...
    • ์ƒ์„ฑ์ž(constructor)
  • ๊ทธ๋ฆฌ๊ณ  ์ œ์ž๋ฆฌ ํ…Œ์ŠคํŠธ ์•ˆ์— ๋‘˜ ํ•„์š”๊ฐ€ ์žˆ๊ฒ ๋„ค - 153
    • ๊ทธ๋ฆฌ๊ณ  ๋‹น์—ฐํžˆ ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค ์•ˆ์— ์ง‘์–ด ๋„ฃ์–ด์•ผ์ง€
  • ์—์ด, ์ด๊ฒƒ์€ ์ด ํด๋ž˜์Šค ์ƒ์— ์žˆ๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ƒ์„ฑ์ž๋กœ 3๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ์ƒ์„ฑํ•˜๊ธฐ๋„ ์–ด๋ ต์ง€ ์•Š๊ฒ ๋„ค - 154
    • ์„ธ์ƒ์—, ์ œ์ผ ๋‹จ์ˆœํ•œ ์ƒ์„ฑ์ž๋„ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ 3๊ฐœ๋‚˜ ๋˜๋„ค. ํ•˜์ง€๋งŒ, ์ƒ์„ฑํ•˜๊ธฐ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€๋Š” ์•Š์„๊ฑฐ์•ผ
  • ๋‹จ์ง€ ๋ฐฉ์–ด์ ์ธ ๊ฒƒ์ด์—ˆ๋Š”์ง€ - 154
    • ๋‹จ์ˆœํžˆ '''๋ฐฉ์–ด ์‹ฌ๋ฆฌ'''์˜€๋Š”์ง€
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์œ ํšจํ•œ ์‹ ์šฉ์„ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€ - 154
    • '''๊ณ ๊ฐ'''์˜ ์‹ ์šฉ์ด ์œ ํšจํ•œ์ง€
  • ํด๋ผ์ด์–ธํŠธ๋“ค์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‹ ์šฉ์„ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€๋ฅผ - 154
    • '''๊ณ ๊ฐ'''์ด '''์–ด๋А ์ •๋„'''์˜ ์‹ ์šฉ์„ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€
  • ์šฐ๋ฆฌ๋Š” ์™œ ๊ทธ๊ฒƒ์ด ์ตœ์ƒ์ด๊ณ  ์‰ฌ์šด์ง€(ํ˜น์€ ์–ด๋ ค์šด์ง€)๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด ์ˆ˜ ์ฐจ๋ก€ ๋ถ„์„ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, - 154
    • ์ƒ์„ฑํ•˜๊ธฐ ์‰ฌ์šด์ง€ ์–ด๋ ค์šด์ง€ ์•Œ์•„๋‚ด๊ธฐ์œ„ํ•ด ์—„์ฒญ๋‚˜๊ฒŒ ๋ถ„์„ํ•ด๋„ ๋˜๊ธด ํ•˜์ง€๋งŒ,
    • ๋ถ„์„ํ•˜์ง€ ๋ง๊ณ  ๊ทธ๋ƒฅ ์ฝ”๋”ฉํ•ด์„œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”์ง€ ๋ณด๋ผ๋Š” ์˜๋ฏธ
  • ๊ตฌ์กฐ - 154, ...
    • ์ƒ์„ฑ(construction)
  • ๋”ฐ๋ผ์„œ ์ด ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค์—์„œ ์ด ํด๋ž˜์Šค๋ฅผ ํš๋“ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ์‰ฌ์›Œ ๋ณด์ด๋Š”๋ฐ ์ •๋ง ๊ทธ๋Ÿฌํ• ๊นŒ? - 156
    • ๊ทธ๋ž˜์„œ, ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค์— ์ด ํด๋ž˜์Šค๋ฅผ '''์ƒ์„ฑ'''ํ•˜๊ธฐ๋Š” ์‰ฌ์›Œ๋ณด์ธ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‚˜?
  • ์‹ค์ œ๋กœ ๊ทธ๋ฆฌ ๋น ๋ฅด์ง€๋Š” ์•Š๋‹ค - 156
    • ๋„ˆ๋ฌด ์„œ๋‘๋ฅด์ง€ ๋งˆ๋ผ
  • ์„œ๋ฒ„์— RGHConnections๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ด - 156
    • ์„œ๋ฒ„์— RGHConnections '''์—ฐ๊ฒฐ ์ ‘์†'''์„ ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ด
  • ๋ฐฉ๋ฒ• - 156, ...
    • ๋ฉ”์†Œ๋“œ(method)
  • ๊ทธ๊ฒƒ์€ RGHConnections์ด ์—ฐ๊ฒฐ์„ ~~~ ์ง‘ํ•ฉ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค - 157
    • ์—ฌ๊ธฐ์„œ RGHConnection์€, RFDIReportFor๋‚˜ ACTIOReportFor ๋“ฑ ๋น„์ฆˆ๋‹ˆ์Šค ์ค‘์‹ฌ ๋ฉ”์†Œ๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ connect, disconnect, retry ๋ฉ”์†Œ๋“œ ๋“ฑ ์—ฐ๊ฒฐ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ์ „์„ ๋‹ค๋ฃจ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์˜ ์ง‘ํ•ฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค
    • ์—์ด์ฝ˜ ๊ณต์‹ ์ •์˜คํ‘œ ์ฐธ์กฐ
  • ๋งŒ๋“ฌ - 157
    • ๋งŒ๋“ฆ
  • ๊ณ ์•ฝํ•˜๊ฒŒ๋„ ๊ทธ๊ฒƒ๋“ค์ด ์›ํ• ๋•Œ๋งˆ๋‹ค ๋ˆ„๊ตฌ๋‚˜ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐœ๋œ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค - 158
    • ๋” ๊ณ ์•ฝํ•œ ์‚ฌ์‹ค์€, ๋ณ€์ˆ˜๊ฐ€ public์ด๋ผ ์•„๋ฌด๋‚˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค
  • ๊ทœ์น™์„ ํด๋ž˜์Šค์™€ ๋‹ฌ๋ผ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค - 158
    • ํด๋ž˜์Šค๋ฅผ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๋•Œ ์ ์šฉํ•˜๋Š” ๊ทœ์น™์€ ๊ธฐ์กด์˜ ์ฝ”๋”ฉ ๊ทœ์น™๊ณผ ๋‹ค๋ฅด๋‹ค
  • ์ œ์ž‘ ์ฝ”๋“œ - 158, ...
    • '''์ œํ’ˆ''' ์ฝ”๋“œ(production code)
  • (๋ฌธ์žฅ๋ˆ„๋ฝ)
    • ์ฑ…์„ ๋ฎ์–ด๋ฒ„๋ฆฌ์ง„ ์•Š์œผ์…จ๊ฒ ์ฃ ?
    • Are you still there?
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ์Šคํ…œ ์•ˆ์—์„œ๋Š” ํ•ญ์ƒ ๊ทธ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๊ฒ ๊ตฐ - 159
    • ์šฐ๋ฆฌ๊ฐ€ ๋งจ๋‚  ํ•˜๋Š” ์ง“์ด๊ตฐ
    • ๊ธฐ์กด ์‹œ์Šคํ…œ์ด ์—‰๋ง์ด๋ผ ํŒŒ๋ผ๋ฏธํ„ฐ์— null์„ ๋„˜๊ธฐ๋Š” ์ง“์„ ์ž์ฃผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ
  • ์‹ค์ œ๋กœ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ–๋Š” ๋™์ž‘์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, ๋‹น์‹ ์€ ๊ทธ ์ง€์ ์—์„œ ๊ฐ์ฒด ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•œ ํ›„ - 160
    • ๋™์ž‘ํ•˜๋Š”๋ฐ ์ •๋ง๋กœ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, '''๊ทธ๋•Œ ๊ฐ€์„œ''' ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•œ ํ›„
  • ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ œ์ž‘ ์ฝ”๋“œ์—์„œ๋Š” - 160
    • ๋‹ค๋ฅธ ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ œํ’ˆ ์ฝ”๋“œ์—์„œ๋Š”
  • ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋„๋ก ๊ธฐ๋Œ€ํ•˜์ง€๋งŒ, ์ฐจ๋ผ๋ฆฌ ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ๊ณผ์ ์ด๋‹ค - 160
    • null ๊ฐ’์„ ๋„˜๊ฒจ์•ผํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋ฉด '''๋” ๋‚˜์€ ๋Œ€์•ˆ'''์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค
  • ์ œ์กฑ ์ฝ”๋“œ์—์„œ ๋„์„ ์‚ฌ์šฉํ•˜๋ ค ํ•œ๋‹ค๋ฉด ๋„์ด ๋˜๋Œ์•„์˜ค๊ณ  ๋„์„ ์ „๋‹ฌ์‹œํ‚ฌ ๊ณณ์„ ์ฐพ๊ณ , ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ์„ ๊ณ ๋ คํ•˜์ž - 160
    • ์ œํ’ˆ์ฝ”๋“œ์—์„œ ๋„์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์œ ํ˜น์ด ๋А๊ปด์ง„๋‹ค๋ฉด, ๋„์„ ๋ฆฌํ„ดํ•˜๊ฑฐ๋‚˜ ์ „๋‹ฌํ•˜๋Š” ๊ณณ์„ ์ฐพ์€ ๋‹ค์Œ, ๋‹ค๋ฅธ ๋ฐฉ์‹(protocol)์˜ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•ด๋ณด์ž
  • ์œ„ ์ฝ”๋“œ๋Š” ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ์ฝ”๋“œ ์ค‘ ์ผ๋ถ€๋ถ„์ด๋‹ค - 162
    • ์ด์ œ ํด๋ž˜์Šค ์ƒ์„ฑ์ž์˜ ์ผ๋ถ€๋ฅผ ์‚ดํŽด๋ณด์ž
  • ์ปค์„œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ ํด๋ž˜์Šค ์™ธ๋ถ€๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค - 166
    • ์ปค์„œ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ํด๋ž˜์Šค ๋ฐ–์œผ๋กœ ์˜ฎ๊ธฐ๋ ค '''์‹œ๋„ํ•ด ๋ณผ ์ˆ˜๋„''' ์žˆ๋‹ค
  • ๊ทธ๋Ÿฌ๋‚˜ ํ…Œ์Šคํ•  ๊ณณ์ด ์—†๋‹ค๋ฉด ์ด๋Š” ์•ˆ์ „ํ•˜์ง€ ๋ชปํ•˜๊ณ , - 166
    • ๊ทธ๋Ÿฌ๋‚˜ '''์ ์ ˆํ•œ(in place) ํ…Œ์ŠคํŠธ'''๊ฐ€ ์—†๋‹ค๋ฉด, ์ด๋Š” ์•ˆ์ „ํ•˜์ง€ ๋ชปํ•˜๊ณ 
  • ํŒŒ๊ธฐ - 167, ...
    • ๊ฐˆ์•„์น˜์›€(supersede)
  • ์ œ์ž‘ ์ฝ”๋“œ์—์„œ ํŒŒ๊ธฐ ๋ฐฉ๋ฒ•์€ - 167
    • '''์ œํ’ˆ ์ฝ”๋“œ'''์—์„œ '''๊ฐˆ์•„์น˜์›€ ๋ฉ”์†Œ๋“œ'''๋Š”
  • ๋‹ค๋ฅธ ์ž์›์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ํŒŒ๊ธฐํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๋Š” ์‹ฌ๊ฐํ•œ ์ž์› ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค - 167
    • ์šฐ๋ฆฌ๊ฐ€ '''๊ฐˆ์•„์น˜์šด''' ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋“ค์„ ๊ด€๋ฆฌํ–ˆ๋‹ค๋ฉด, ์‹ฌ๊ฐํ•œ ๋ฆฌ์†Œ์Šค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ์ง€๋„ ๋ชจ๋ฅธ๋‹ค
  • ์šฐ๋ฆฌ๋Š” ๋А๋‚„ ํ•„์š”๊ฐ€ ์žˆ๊ธฐ์—, - 168
    • ์šฐ๋ฆฌ๋Š” '''ํƒ์ง€(sense)'''ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—,

์ง„ํ–‰์ค‘

  • ์‹œ๋ฐค์พ…! 9์žฅ ๋ฒˆ์—ญ ๊ฐœํŒ

10์žฅ. ํ…Œ์ŠคํŠธ ํ•˜๋‹ˆ์Šค์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๋ฉ”์†Œ๋“œ

  • ์ง„ํ–‰์ค‘

11์žฅ. ์ฝ”๋“œ ๋ณ€๊ฒฝ ๊ณผ์ •์—์„œ ๊ผญ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•  ๋ฉ”์†Œ๋“œ

  • ์ง„ํ–‰์ค‘

12์žฅ. ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„, ๋ฐ˜๋“œ์‹œ ์—†์• ์•ผ ํ• ๊นŒ?

  • ์‹œ๋ฐค์พ…! 12์žฅ ๋ฒˆ์—ญ ๊ฐœํŒ

13์žฅ. ๋ณ€๊ฒฝ์— ํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ๋Š” ๋ญ๊ฐ€ ์žˆ์„๊นŒ?

  • ์ง„ํ–‰์ค‘

14์žฅ. ์šฐ๋ฆด ๋ฏธ์น˜๊ฒŒ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด๊ด€๊ณ„

  • ์ข‹์€ ์ฝ”๋“œ๋Š” ์ œ์ž‘์ด๋‚˜ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๋‚ด์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค๋Š” - 260
    • ์ข‹์€ ์ฝ”๋“œ๋Š” ์ œ์ž‘ ํ™˜๊ฒฝ๊ณผ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ '''์–‘์ชฝ ๋ชจ๋‘์—์„œ''' ์‹คํ–‰๋œ๋‹ค๋Š”

15์žฅ. ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด ๋ชจ๋‘ API ํ˜ธ์ถœ๋กœ ์ด๋ค„์กŒ๋‹ค๋ฉด?

  • ์ง„ํ–‰์ค‘

์ฐธ๊ณ 

acorn ์ถœํŒ์‚ฌ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ํ™œ์šฉ ์ „๋žต/์ •์˜คํ‘œ