6์žฅ

Extract Method(v)

  • ๊ทธ๋ฃน์œผ๋กœ ํ•จ๊ป˜ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์ด ์žˆ์œผ๋ฉด, ์ฝ”๋“œ์˜ ๋ชฉ์ ์ด ์ž˜ ๋“œ๋Ÿฌ๋‚˜๋„๋ก ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์„ ์ง€์–ด ๋ณ„๋„์˜ ๋ฉ”์†Œ๋“œ๋กœ ๋ฝ‘์•„๋‚ธ๋‹ค.

๋™๊ธฐ

์ง€๋‚˜์น˜๊ฒŒ ๊ธด ๋ฉ”์†Œ๋“œ
์ฃผ์„์ด ํ•„์š”ํ•œ ์ฝ”๋“œ( ๋ชฉ์ ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ )

์žฅ์  ( ์งง๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ด๋ฆ„์œผ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ )

์žฌ์‚ฌ์šฉ ํ™•๋ฅ  ๋†’์•„์ง
๋ฉ”์†Œ๋“œ๋ฅผ ๋ณผ ๋•Œ ์ฃผ์„์„ ์ฝ๋Š” ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์ด ๋“ค๋„๋ก ํ•  ์ˆ˜ ์žˆ์Œ
์˜ค๋ฒ„๋ผ์ด๋“œ ํ•˜๊ธฐ ์‰ฌ์›€

์ ˆ์ฐจ

๋ฉ”์†Œ๋“œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ฆ
์˜๋„๋ฅผ ์ž˜ ๋‚˜ํƒ€๋‚ด๋„๋ก ์ด๋ฆ„์„ ์ •ํ•จ
๋ฝ‘์•„๋‚ด๊ณ ์ž ํ•˜๋Š” ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ ๋ฉ”์†Œ๋“œ๋กœ ์˜ฎ๊น€
์›๋ž˜ ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ๋ฝ‘์•„๋‚ธ ์ฝ”๋“œ์— ์žˆ๋Š”์ง€ ํ™•์ธ
๋ฝ‘์•„๋‚ธ ์ฝ”๋“œ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ์ž„์‹œ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ๋ณธ๋‹ค
๋ฝ‘์•„๋‚ธ ์ฝ”๋“œ ๋‚ด์—์„œ ์ง€์—ญ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ์ˆ˜์ •๋˜๋Š”์ง€ ๋ณธ๋‹ค.

Inline Method

๋ฉ”์†Œ๋“œ ๋ชธ์ฒด๊ฐ€ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„๋งŒํผ์ด๋‚˜ ๋ช…ํ™•ํ•  ๋•Œ๋Š”, ํ˜ธ์ถœํ•˜๋Š” ๊ณณ์— ๋ฉ”์†Œ๋“œ์˜ ๋ชธ์ฒด๋ฅผ ๋„ฃ๊ณ , ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ผ

๋™๊ธฐ

๋•Œ๋ก  ๋ฉ”์†Œ๋“œ ๋ชธ์ฒด๊ฐ€ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„๋งŒํผ ๋ช…ํ™•ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ญ์ œ

์ ˆ์ฐจ

๋ฉ”์†Œ๋“œ๊ฐ€ ๋‹คํ˜•์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธ ( ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ์—๋Š” ์ ์šฉ X )
๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์„ ๋ชจ๋‘ ์ฐพ๋Š”๋‹ค
๊ฐ๊ฐ์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์„ ๋ฉ”์†Œ๋“œ ๋ชธ์ฒด๋กœ ๋ฐ”๊พผ๋‹ค.
์ปดํŒŒ์ผ๊ณผ ํ…Œ์ŠคํŠธ
๋ฉ”์†Œ๋“œ ์ •์˜ ์ œ๊ฑฐ

Inline Temp

๊ฐ„๋‹จํ•œ ์ˆ˜์‹์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์ž„์‹œ๋ณ€์ˆ˜๊ฐ€ ์žˆ๊ณ , ๊ทธ ์ž„์‹œ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๋ฆฌํŒฉํ† ๋ง์„ ํ•˜๋Š”๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋œ๋‹ค๋ฉด, ์ด ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ชจ๋‘ ์›๋ž˜์˜ ์ˆ˜์‹์œผ๋กœ ๋ฐ”๊พธ๋ผ.

๋™๊ธฐ

Replace Temp with Query์˜ ํ•œ ๋ถ€๋ถ„์œผ๋กœ ์‚ฌ์šฉ
๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ์ž„์‹œ๋ณ€์ˆ˜์— ๋Œ€์ž…๋˜๋Š” ๊ฒฝ์šฐ

์ ˆ์ฐจ

์ž„์‹œ๋ณ€์ˆ˜๋ฅผ final๋กœ ์„ ์–ธํ•œ ๋‹ค์Œ ์ปดํŒŒ์ผ
์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ณณ์„ ๋ชจ๋‘ ์ฐพ์•„ ๋Œ€์ž…๋ฌธ์˜ ์šฐ๋ณ€์— ์žˆ๋Š” ์ˆ˜์‹์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
๊ฐ๊ฐ์˜ ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ์ปดํŒŒ์ผ๊ณผ ํ…Œ์ŠคํŠธ
์ž„์‹œ๋ณ€์ˆ˜์˜ ์„ ์–ธ๊ณผ ๋Œ€์ž…๋ฌธ ์ œ๊ฑฐ
์ปดํŒŒ์ผ๊ณผ ํ…Œ์ŠคํŠธ

Replace Temp with Query(v)

์–ด๋–ค ์ˆ˜์‹์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ˆ˜์‹์„ ๋ฝ‘์•„๋‚ด์„œ ๋ฉ”์†Œ๋“œ๋กœ ๋งŒ๋“ค๊ณ , ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ณณ์„ ์ฐพ์•„ ๋ชจ๋‘ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋กœ ๋ฐ”๊พผ๋‹ค.

Extract Method ์ ์šฉํ•˜๊ธฐ ์ „์˜ ํ•„์ˆ˜ ๋‹จ๊ณ„
์ง€์—ญ๋ณ€์ˆ˜ ๋˜๋Š” ์ž„์‹œ๋ณ€์ˆ˜๋Š” ๋ฉ”์†Œ๋“œ ์ถ”์ถœ์„ ์–ด๋ ต๊ฒŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์งˆ์˜ ๋ฉ”์†Œ๋“œ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์ข‹์Œ
์ž„์‹œ๋ณ€์ˆ˜์— ๊ฐ’์ด ํ•œ๋ฒˆ๋งŒ ๋Œ€์ž…๋˜๋Š”์ง€ ํ™•์ธ

์—ฌ๋Ÿฌ๋ฒˆ ๋Œ€์ž…๋˜๋Š” ๊ฒฝ์šฐ Split Temporary Variable ์ ์šฉ
์ž„์‹œ๋ณ€์ˆ˜๋ฅผ final๋กœ ์„ ์–ธ
์ปดํŒŒ์ผ
๋Œ€์ž…๋ฌธ์˜ ์šฐ๋ณ€์„ ๋ฉ”์†Œ๋“œ๋กœ ์ถ”์ถœ
์ปดํŒŒ์ผ๊ณผ ํ…Œ์ŠคํŠธ
Inline Temp ์ ์šฉ

Introduce Explaining Variable(v)

๋ณต์žกํ•œ ์ˆ˜์‹์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š”, ์ˆ˜์‹์˜ ๊ฒฐ๊ณผ๋‚˜ ๋˜๋Š” ์ˆ˜์‹์˜ ์ผ๋ถ€์— ์ž์‹ ์˜ ๋ชฉ์ ์„ ์ž˜ ์„ค๋ช…ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ๋œ ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.

๋™๊ธฐ

ํŠนํžˆ ์กฐ๊ฑด๋ฌธ์—์„œ ๊ฐ๊ฐ์˜ ์กฐ๊ฑด์˜ ๋œป์„ ์ž˜ ์„ค๋ช…ํ•˜๋Š” ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉ
๊ธด ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๊ฐ ๋‹จ๊ณ„์˜ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ
ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„ Extract Method๋ฅผ ๋ณดํ†ต ์“ฐ๊ฒŒ ๋œ๋‹ค.

Split Temporary Variable(v)

๋ฃจํ”„ ์•ˆ์— ์žˆ๋Š” ๋ณ€์ˆ˜๋‚˜ collecting temporary variable๋„ ์•„๋‹Œ ์ž„์‹œ๋ณ€์ˆ˜์— ๊ฐ’์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋Œ€์ž…ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”, ๊ฐ๊ฐ์˜ ๋Œ€์ž…์— ๋Œ€ํ•ด์„œ ๋”ฐ๋กœ๋”ฐ๋กœ ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ผ.

์–ด๋–ค ๋ณ€์ˆ˜๋“  ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ๊ฐ์˜ ์šฉ๋„์— ๋Œ€ํ•ด ๋”ฐ๋กœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฐ”๊พธ์–ด์•ผ ํ•จ
์ž„์‹œ๋ณ€์ˆ˜๊ฐ€ ์ฒ˜์Œ ์„ ์–ธ๋œ ๊ณณ๊ณผ ์ž„์‹œ๋ณ€์ˆ˜์— ๊ฐ’์ด ์ฒ˜์Œ ๋Œ€์ž…๋œ ๊ณณ์—์„œ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ๋ฐ”๊พผ๋‹ค.
์ƒˆ๋กœ ๋งŒ๋“  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ final๋กœ ์„ ์–ธ
์ž„์‹œ๋ณ€์ˆ˜์— ๋‘ ๋ฒˆ์งธ๋กœ ๋Œ€์ž…ํ•˜๋Š” ๊ณณ์˜ ์ง์ „๊นŒ์ง€ ์›๋ž˜ ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ณณ์„ ๋ชจ๋‘ ๋ฐ”๊ฟˆ
์ž„์‹œ๋ณ€์ˆ˜์— ๋‘ ๋ฒˆ์งธ๋กœ ๋Œ€์ž…ํ•˜๋Š” ๊ณณ์—์„œ ๋ณ€์ˆ˜ ์„ ์–ธ
์ปดํŒŒ์ผ & ํ…Œ์ŠคํŠธ

Remove Assignments to Parameters(v)

ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด, ๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ.

ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ(pass by value)์ด๋ผ๋ฉด ๋ฌธ์ œ ์—†์ง€๋งŒ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ(pass by reference)์ผ ๋•Œ๋Š” ํ˜ผ๋™
์ถœ๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋Š” ์ƒ๊ด€์—†๊ธด ํ•˜์ง€๋งŒ ์ถœ๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๊ฐ€๋Šฅํ•œ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์œ„ํ•œ ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.
ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•œ ์ฝ”๋“œ ์ดํ›„์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ž„์‹œ๋ณ€์ˆ˜๋กœ ๋ฐ”๊พผ๋‹ค.
ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€์ž…ํ•˜๋Š” ๊ฐ’์„ ์ž„์‹œ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๋„๋ก ๋ฐ”๊พผ๋‹ค.
์ปดํŒŒ์ผ & ํ…Œ์ŠคํŠธ

Substitute Algorithm

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ๋Š”, ๋ฉ”์†Œ๋“œ์˜ ๋ชธ์ฒด๋ฅผ ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ”๊พผ๋‹ค.

๋Œ€์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œ์ŠคํŠธ, ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์œผ๋ฉด ๋
๊ฒฐ๊ณผ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด, ๋””๋ฒ„๊น…

Last updated