3์žฅ

์ค‘๋ณต๋œ ์ฝ”๋“œ

ํ•œ ํด๋ž˜์Šค์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๋ฉ”์†Œ๋“œ ์•ˆ์— ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ : Extract Method

๋™์ผํ•œ ์ˆ˜ํผํด๋ž˜์Šค๋ฅผ ๊ฐ–๋Š” ๋‘ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ : Extract Method ํ›„ Pull Up Method

๋น„์Šทํ•˜์ง€๋งŒ ๊ฐ™์ง€๋Š” ์•Š๋‹ค๋ฉด : ๋น„์Šทํ•œ ๋ถ€๋ถ„ Extract Method ํ›„ Form Template Method ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ

๊ฐ™์€ ์ž‘์—…์„ ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด : ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ๋” ๋ช…ํ™•ํ•œ ๊ฒƒ ์„ ํƒํ•ด์„œ Substitute Algorithm ์‚ฌ์šฉ

์„œ๋กœ ๊ด€๊ณ„ ์—†๋Š” ๋‘ ํด๋ž˜์Šค์—์„œ ์ค‘๋ณต๋œ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ : Extract Class ์‚ฌ์šฉํ•œ ๋‹ค์Œ ์–‘์ชฝ์—์„œ ์ด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ

๊ธด ๋ฉ”์†Œ๋“œ

  • ์–ด๋–ค ๊ฒƒ์— ๋Œ€ํ•ด ์ฃผ์„์„ ๋‹ฌ์•„์•ผ ํ•  ํ•„์š”๋ฅผ ๋Š๋‚„ ๋•Œ๋งˆ๋‹ค ๋Œ€์‹  ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ผ

๋‹จ์ง€ ํ•œ ์ค„์˜ ์ฝ”๋“œ๋ผ ํ• ์ง€๋ผ๋„ ๊ทธ๊ฒƒ์ด ์„ค๋ช…์„ ํ•„์š”๋กœ ํ•œ๋‹ค๋ฉด ๋ฉ”์†Œ๋“œ๋กœ ๋ฝ‘์•„๋‚ผ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค.

  • ๋ฉ”์†Œ๋“œ ๊ธธ์ด๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด์„  Extract Method

  • ๋ฉ”์†Œ๋“œ์— ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์ž„์‹œ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด

์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐ ํ•˜๊ธฐ ์œ„ํ•ด Replace Temp with Query
๊ธด ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฆฌ์ŠคํŠธ๋Š” Introduce Parameter Object์™€ Preserve Whole Object๋กœ ์งง๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ
๊ทธ๋ž˜๋„ ๋งŽ๋‹ค๋ฉด Replace Method with Method Object๋ผ๋Š” ์ค‘์žฅ๋น„ ๋™์›ํ•ด์•ผ ํ•  ๋•Œ
  • ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฃจํ”„ ๋˜ํ•œ ๋ฉ”์†Œ๋“œ ์ถ”์ถœ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์‹ ํ˜ธ : Decompose Conditional

๊ฑฐ๋Œ€ํ•œ ํด๋ž˜์Šค

  • ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์€ ์ธ์Šคํ„ด์ˆ˜ ๋ณ€์ˆ˜

Extract Class

์ƒˆ๋กœ ๋งŒ๋“ค ํด๋ž˜์Šค๊ฐ€ ์„œ๋ธŒํด๋ž˜์Šค๋กœ์„œ ์˜๋ฏธ๊ฐ€ ์žˆ์œผ๋ฉด Extract Subclass

  • ์ฝ”๋“œ๊ฐ€ ๋งŽ์€ ํด๋ž˜์Šค

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํด๋ž˜์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์“ฐ๊ฒŒ ํ•  ์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ๊ฐ๊ฐ์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด Extract Interface

๊ธด ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฆฌ์ŠคํŠธ

๋Œ€๋ถ€๋ถ„์˜ ๋ณ€๊ฒฝ์€ ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ์„œ ํ•ด๊ฒฐ

์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์— ์š”์ฒญํ•˜์—ฌ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉด

  • Replace Parameter with Method

ํ•œ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์ฃผ์›Œ ๋ชจ์€ ๋ฐ์ดํ„ฐ ๋ญ‰์น˜๋ฅผ ๊ทธ ๊ฐ์ฒด ์ž์ฒด๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด

  • Preserve Whole Object

๊ฐ์ฒด์™€ ๊ด€๊ณ„ ์—†๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์•„์ดํ…œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ

  • Introduce Parameter Object

ํ™•์‚ฐ์  ๋ณ€๊ฒฝ

ํ•œ ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๋ณ€๊ฒฝ ๋•Œ๋ฌธ์— ์‹œ๋‹ฌ๋ฆฌ๋Š” ๊ฒฝ์šฐ

  • Extract Class ์‚ฌ์šฉํ•ด์„œ ํŠน์ • ์›์ธ์— ๋Œ€ํ•ด ๋ณ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค์„ ๋ฌถ์–ด์คŒ

์‚ฐํƒ„์ด ์ˆ˜์ˆ 

ํ™•์‚ฐ์  ๋ณ€๊ฒฝ๊ณผ ๋ฐ˜๋Œ€

ํ•˜๋‚˜๋ฅผ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ ๋งŽ์€ ํด๋ž˜์Šค๋ฅผ ๊ณ ์ณ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  • Move Method, Move Field๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ถ€๋ถ„์„ ๋ชจ๋‘ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ

  • ๊ธฐ์กด์˜ ํด๋ž˜์Šค ์ค‘์—์„œ ๋ฉ”์†Œ๋“œ๋‚˜ ํ•„๋“œ๊ฐ€ ์˜ฎ๊ฒจ๊ฐˆ ํ›„๋ณด๊ฐ€ ์ ๋‹นํžˆ ์—†๋‹ค๋ฉด ์ƒˆ๋กœ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋ผ

๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ

  • Extract Class

Switch ๋ฌธ

Switch๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์ค‘๋ณต๋œ ๋ชจ๋“  switch๋ฌธ ์ฐพ์•„ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•จ

Switch ๋ณด๋ฉด ํ•ญ์ƒ ๋‹คํ˜•์„ฑ์„ ์ƒ๊ฐํ•ด์•ผ ํ•จ

๋งŒ์•ฝ ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ช‡ ๊ฐœ์˜ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ตณ์ด ๋ฐ”๊ฟ€ ํ•„์š” ์—†๋‹ค.

  • ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋‹คํ˜•์„ฑ์€ ๊ณผํ•˜๋‹ค

  • Replace parameter with Explicit methods

  • ๋งŒ์•ฝ ์กฐ๊ฑด ์ค‘ null์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด Intruduce Null Object

๋ฉ”์‹œ์ง€ ์ฒด์ธ

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋ฌผ์–ด๋ณด๊ณ , ๋˜ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋ฌผ์–ด๋ณด๊ณ  ...

  • Hide Delegate

๋ฐ์ดํ„ฐ ํด๋ž˜์Šค

ํ•„๋“œ์™€ ๊ฐ ํ•„๋“œ์— ๋Œ€ํ•œ get/set ๋ฉ”์†Œ๋“œ๋งŒ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ํด๋ž˜์Šค

์•ฝ๊ฐ„์˜ ์ฑ…์ž„์„ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

get/set ๋ฉ”์†Œ๋“œ๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ฐพ์•„๋ณด๊ณ  ๋™์ž‘์„ ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด

  • Move Method ์‹œ๋„

  • ๋ฉ”์†Œ๋“œ ์ „์ฒด ์˜ฎ๊ธธ ์ˆ˜ ์—†์„ ๋• Extract Method

๊ทธ ํ›„์— get/set ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด Hide Method๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

๊ฑฐ๋ถ€๋œ ์œ ์‚ฐ

  • ์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ฃผ์–ด์ง„ ๊ฒƒ์„ ์›์น˜ ์•Š์„ ๋• ๋‹จ์ง€ ํ•„์š”ํ•œ ๋ช‡๊ฐœ๋งŒ ๊ณ ๋ฅธ๋‹ค

  • ์ƒˆ๋กœ์šด ํ˜•์ œ ํด๋ž˜์Šค ๋งŒ๋“ค๊ณ  Push Down Method, Push Down Field ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋ชจ๋‘ ํ˜•์ œ ๋ฉ”์†Œ๋“œ๋กœ ์˜ฎ๊ฒจ๋ผ

Last updated