SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Refactoring 6์žฅ Remove Assignment to Parameters Replace Method with Method Object Substitute Algorithm ์•„๊ฟˆ์‚ฌhttp://cafe.naver.com/architect1 ๊น€์šฉ๋ฝ  http://blog.naver.com/subhill
Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ.
Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ๋™๊ธฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์ง„ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ž‘์—…์€ OK! ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์—๋Š” ๋ฐ˜๋Œ€! ์ด์œ  ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค. ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ(pass by value)์™€ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ(pass by reference)๋ฅผ ํ˜ผ๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ
Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ๋”ฐ๋ผ์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š”์ „๋‹ฌ๋œ ๊ทธ๋Œ€๋กœ ์“ฐ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋ช…ํ™•ํ•˜๋ฉฐ ์ผ๊ด€์ ์ธ ์‚ฌ์šฉ๋ฒ•์ด๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์—๊ฐ’์„ ๋Œ€์ž…ํ•ด์„œ๋Š” ์•ˆ๋˜๊ณ  ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด Remove Assignments to Parameters ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๊ฑฐํ•˜์ž
Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ์ ˆ์ฐจ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์œ„ํ•œ ์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•œ ์ฝ”๋“œ ์ดํ›„์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ž„์‹œ๋ณ€์ˆ˜๋กœ ๋ฐ”๊พผ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€์ž…ํ•˜๋Š” ๊ฐ’์„ ์ž„์‹œ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•œ๋‹ค ์ปดํŒŒ์ผ๊ณผ ํ…Œ์ŠคํŠธ.
Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ์ฃผ์˜ ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ์ผ ๊ฒฝ์šฐ(call by reference)์ธ ๊ฒฝ์šฐ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๋ถ€๋ถ„์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๊ณ„์† ์‚ฌ์šฉ๋˜๋Š”์ง€ ์‚ดํŽด๋ณด๋ผ. ๋˜ํ•œ ๊ฑฐ๊ธฐ์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์ด ๋Œ€์ž…๋˜๊ณ  ์‚ฌ์šฉ๋˜๋Š”์ง€๋„ ๋ณธ๋‹ค. ๋ฆฌํ„ด๊ฐ’์œผ๋กœํ•˜๋‚˜์˜ ๊ฐ’์„ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ผ. ๋งŒ์•ฝ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€, ๋˜๋Š” ๋ณ„๋„์˜ ๋ฉ”์†Œ๋“œ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด๋ผ.-> Replace Method with Method Object(163) ํ™œ์šฉ.
Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ์˜ˆ์ œ 2 ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผFinal๋กœ ์„ ์–ธํ•˜์—ฌ ๊ด€๋ก€๋ฅผ ๋”ฐ๋ฅด๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์ €์ž๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์—final ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ์งง์€ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ์ฝ”๋“œ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๋Š”๋ฐ ๋ณ„๋กœ ํฐ ๋„์›€์ด ์•ˆ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ”์†Œ๋“œ๊ฐ€๊ธธ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š”์ง€ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์“ฐ๊ธฐ๋„ ํ•œ๋‹ค.
Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ์ž๋ฐ”์—์„œ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ(Pass By Value) ์ž๋ฐ”๋Š” ์—„๊ฒฉํ•˜๊ฒŒ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ์„ ์‚ฌ์šฉ
Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ์ž๋ฐ”์—์„œ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ(Pass By Value) ๋ณธ์งˆ์ ์œผ๋กœ ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ€ ๊ฐ’์œผ๋กœ ๋„˜๊ฒจ์ง„๋‹ค. ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅ ํŒŒ๋ผ๋ฏธํ„ฐ์—  ๋‹ค๋ฅธ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ๊ฒƒ์€ ๊ณ ๋ ค์•ˆํ•จ
ReplaceMethod with Method Object ์ง€์—ญ๋ณ€์ˆ˜ ๋•Œ๋ฌธ์— Extract Method๋ฅผ  ์ ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ธด ๋ฉ”์†Œ๋“œ์˜ ๊ฒฝ์šฐ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ทธ ์ž์‹ ์„ ์œ„ํ•œ ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ” ๋ชจ๋“  ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ๊ทธ ๊ฐ์ฒด์˜ ํ•„๋“œ๊ฐ€ ๋˜๋„๋ก ํ•œ๋‹ค.  ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ™์€ ๊ฐ์ฒด ์•ˆ์˜ ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„ํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•œ์ค„ ์š”์•ฝ ๋ฉ”์†Œ๋“œ๋ฅผ(๋ฉ”์†Œ๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‹ด๋Š”)๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”๋ผ.
ReplaceMethod with Method Object ๋ฉ”์†Œ๋“œ๋ฅผ(๋ฉ”์†Œ๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‹ด๋Š”) ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”๋ผ. ๋™๊ธฐ ์ž‘์€ ๋ฉ”์†Œ๋“œ์˜ ์•„๋ฆ„๋‹ค์›€ ๊ฐ•์กฐ. ๋งŽ์€ ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋ถ„ํ•ดํ•  ๋•Œ ์–ด๋ ค์›€์„ ์ค€๋‹ค ์ด๋Ÿฐ ๊ฒฝ์šฐ ย Replace Method with Method Object๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฐ ๋ชจ๋“  ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋ฉ”์†Œ๋“œ ๊ฐ์ฒด๋กœ ๋ฐ”๊พธ์–ด ๋ฒ„๋ฆฐ๋‹ค.๊ทธ ๋‹ค์Œ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ฅผ Extract Method๋ฅผ ์ด์šฉํ•˜์—ฌ ์›๋ž˜์˜ ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„ํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
ReplaceMethod with Method Object ๋ฉ”์†Œ๋“œ๋ฅผ(๋ฉ”์†Œ๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‹ด๋Š”) ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”๋ผ. ์ ˆ์ฐจ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์„ ๋”ฐ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ์ƒ์„ฑ. ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์— Final ํ•„๋“œ๋กœ ์›๋ž˜ ๋ฉ”์†Œ๋“œ์˜ ๊ฐ์ฒด๋ฅผ ์ €์žฅ ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ž„์‹œ๋ณ€์ˆ˜์™€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์œ„ํ•œ ํ•„๋“œ ์ƒ์„ฑ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์—์„œ ์†Œ์Šค๊ฐ์ฒด์™€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ทจํ•จ. ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์— Compute๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
ReplaceMethod with Method Object ๋ฉ”์†Œ๋“œ๋ฅผ(๋ฉ”์†Œ๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‹ด๋Š”) ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”๋ผ. ์ ˆ์ฐจ ์›๋ž˜์˜ ๋ฉ”์†Œ๋“œ๋ฅผCompute์— ๋ณต์‚ฌ. ์›๋ž˜์˜ ๊ฐ์ฒด์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์†Œ์Šค ๊ฐ์ฒด ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฐ”๊ฟˆ. ์ปดํŒŒ์ผ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์›๋ž˜์˜ ๋ฉ”์†Œ๋“œ๋ฅผ์ƒˆ๋กœ๋งŒ๋“  ๊ฐ์ฒด์˜ Compute๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ๋ฐ”๊ฟˆ. ์ด์ œ Extract Method๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งˆ์Œ๋Œ€๋กœ Refactoring.
Substitute Algorithm ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ๋Š”, ๋ฉ”์†Œ๋“œ์˜ ๋ชธ์ฒด๋ฅผ ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
Substitute Algorithm ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ๋Š”, ๋ฉ”์†Œ๋“œ์˜ ๋ชธ์ฒด๋ฅผ ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ”๊พผ๋‹ค. ,[object Object],๋™๊ธฐ ๋” ๋ช…ํ™•ํ•œ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ฒŒ ๋˜์—ˆ์„ ๋•Œ ์ค‘๋ณต๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ ํฌ๊ณ  ๋ณต์žกํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ.
Substitute Algorithm ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ๋Š”, ๋ฉ”์†Œ๋“œ์˜ ๋ชธ์ฒด๋ฅผ ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ”๊พผ๋‹ค. ์ ˆ์ฐจ ๋Œ€์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค€๋น„. ์ ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ๊ฐ™๋‹ค๋ฉด ๋ ๊ฒฐ๊ณผ ๋‹ค๋ฅด๋ฉด ์˜ˆ์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉํ•˜์—ฌ ๋””๋ฒ„๊น….
๋.

Weitere รคhnliche Inhalte

Andere mochten auch

Refactoring
RefactoringRefactoring
RefactoringYongRak Kim
ย 
Overview of our products
Overview of our productsOverview of our products
Overview of our productsaramstore
ย 
Halo Headphones
Halo  HeadphonesHalo  Headphones
Halo Headphonesaramstore
ย 
About Slice
About SliceAbout Slice
About Slicearamstore
ย 
Twitter juist
Twitter juistTwitter juist
Twitter juistStijnPollet
ย 
Refactoring
RefactoringRefactoring
RefactoringYongRak Kim
ย 
Presentatie for "Studiemiddag Linked Data Archieven"
Presentatie for "Studiemiddag Linked Data Archieven"Presentatie for "Studiemiddag Linked Data Archieven"
Presentatie for "Studiemiddag Linked Data Archieven"Victor de Boer
ย 

Andere mochten auch (8)

Refactoring
RefactoringRefactoring
Refactoring
ย 
Overview of our products
Overview of our productsOverview of our products
Overview of our products
ย 
Halo Headphones
Halo  HeadphonesHalo  Headphones
Halo Headphones
ย 
About Slice
About SliceAbout Slice
About Slice
ย 
Twitter juist
Twitter juistTwitter juist
Twitter juist
ย 
Light
LightLight
Light
ย 
Refactoring
RefactoringRefactoring
Refactoring
ย 
Presentatie for "Studiemiddag Linked Data Archieven"
Presentatie for "Studiemiddag Linked Data Archieven"Presentatie for "Studiemiddag Linked Data Archieven"
Presentatie for "Studiemiddag Linked Data Archieven"
ย 

ร„hnlich wie Refactoring

Python ์ดํ•ดํ•˜๊ธฐ 20160815
Python ์ดํ•ดํ•˜๊ธฐ 20160815Python ์ดํ•ดํ•˜๊ธฐ 20160815
Python ์ดํ•ดํ•˜๊ธฐ 20160815Yong Joon Moon
ย 
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 3์ผ์ฐจ] @MVC
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 3์ผ์ฐจ] @MVC[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 3์ผ์ฐจ] @MVC
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 3์ผ์ฐจ] @MVCAnselmKim
ย 
[HaU] ์‹ ์ž… ๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ java
[HaU] ์‹ ์ž… ๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ java[HaU] ์‹ ์ž… ๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ java
[HaU] ์‹ ์ž… ๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ java์œ ๋ฆฌ ํ•˜
ย 
Refactoring Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]
Refactoring  Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]Refactoring  Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]
Refactoring Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]Bingu Shim
ย 
Refactoring Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]
Refactoring  Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]Refactoring  Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]
Refactoring Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]Bingu Shim
ย 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorialBingu Shim
ย 
Refactoring tutorial 1์ฃผ์ฐจ[refactoring ๊ฐœ์š”]
Refactoring tutorial 1์ฃผ์ฐจ[refactoring ๊ฐœ์š”]Refactoring tutorial 1์ฃผ์ฐจ[refactoring ๊ฐœ์š”]
Refactoring tutorial 1์ฃผ์ฐจ[refactoring ๊ฐœ์š”]bbongcsu
ย 
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 1์ผ์ฐจ] ํ…œํ”Œ๋ฆฟ
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 1์ผ์ฐจ] ํ…œํ”Œ๋ฆฟ[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 1์ผ์ฐจ] ํ…œํ”Œ๋ฆฟ
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 1์ผ์ฐจ] ํ…œํ”Œ๋ฆฟAnselmKim
ย 
Devon 2011-b-5 ํšจ๊ณผ์ ์ธ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋‹ค๋ฃจ๊ธฐ
Devon 2011-b-5 ํšจ๊ณผ์ ์ธ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋‹ค๋ฃจ๊ธฐDevon 2011-b-5 ํšจ๊ณผ์ ์ธ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋‹ค๋ฃจ๊ธฐ
Devon 2011-b-5 ํšจ๊ณผ์ ์ธ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋‹ค๋ฃจ๊ธฐDaum DNA
ย 
Scala variable
Scala variableScala variable
Scala variableYong Joon Moon
ย 
Scala syntax function
Scala syntax functionScala syntax function
Scala syntax functionYong Joon Moon
ย 
DevRookie ๋ฆฌํŽ™ํ„ฐ๋ง.pptx
DevRookie ๋ฆฌํŽ™ํ„ฐ๋ง.pptxDevRookie ๋ฆฌํŽ™ํ„ฐ๋ง.pptx
DevRookie ๋ฆฌํŽ™ํ„ฐ๋ง.pptxMUUMUMUMU
ย 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic functionYong Joon Moon
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ ๊ธฐ์ดˆ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ ๊ธฐ์ดˆ แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ ๊ธฐ์ดˆ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ ๊ธฐ์ดˆ Yong Joon Moon
ย 
2014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #72014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #7Chris Ohk
ย 
Scala namespace scope
Scala namespace scopeScala namespace scope
Scala namespace scopeYong Joon Moon
ย 

ร„hnlich wie Refactoring (17)

Python ์ดํ•ดํ•˜๊ธฐ 20160815
Python ์ดํ•ดํ•˜๊ธฐ 20160815Python ์ดํ•ดํ•˜๊ธฐ 20160815
Python ์ดํ•ดํ•˜๊ธฐ 20160815
ย 
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 3์ผ์ฐจ] @MVC
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 3์ผ์ฐจ] @MVC[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 3์ผ์ฐจ] @MVC
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 3์ผ์ฐจ] @MVC
ย 
[HaU] ์‹ ์ž… ๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ java
[HaU] ์‹ ์ž… ๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ java[HaU] ์‹ ์ž… ๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ java
[HaU] ์‹ ์ž… ๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ java
ย 
Refactoring Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]
Refactoring  Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]Refactoring  Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]
Refactoring Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]
ย 
Refactoring Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]
Refactoring  Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]Refactoring  Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]
Refactoring Tutorial 1์ฃผ์ฐจ[ Refactoring ๊ฐœ์š”]
ย 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
ย 
Refactoring tutorial 1์ฃผ์ฐจ[refactoring ๊ฐœ์š”]
Refactoring tutorial 1์ฃผ์ฐจ[refactoring ๊ฐœ์š”]Refactoring tutorial 1์ฃผ์ฐจ[refactoring ๊ฐœ์š”]
Refactoring tutorial 1์ฃผ์ฐจ[refactoring ๊ฐœ์š”]
ย 
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 1์ผ์ฐจ] ํ…œํ”Œ๋ฆฟ
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 1์ผ์ฐจ] ํ…œํ”Œ๋ฆฟ[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 1์ผ์ฐจ] ํ…œํ”Œ๋ฆฟ
[์Šคํ”„๋ง ์Šคํ„ฐ๋”” 1์ผ์ฐจ] ํ…œํ”Œ๋ฆฟ
ย 
Devon 2011-b-5 ํšจ๊ณผ์ ์ธ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋‹ค๋ฃจ๊ธฐ
Devon 2011-b-5 ํšจ๊ณผ์ ์ธ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋‹ค๋ฃจ๊ธฐDevon 2011-b-5 ํšจ๊ณผ์ ์ธ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋‹ค๋ฃจ๊ธฐ
Devon 2011-b-5 ํšจ๊ณผ์ ์ธ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋‹ค๋ฃจ๊ธฐ
ย 
Scala variable
Scala variableScala variable
Scala variable
ย 
Scala syntax function
Scala syntax functionScala syntax function
Scala syntax function
ย 
DevRookie ๋ฆฌํŽ™ํ„ฐ๋ง.pptx
DevRookie ๋ฆฌํŽ™ํ„ฐ๋ง.pptxDevRookie ๋ฆฌํŽ™ํ„ฐ๋ง.pptx
DevRookie ๋ฆฌํŽ™ํ„ฐ๋ง.pptx
ย 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic function
ย 
Scala ๊ธฐ์ดˆ (3)
Scala ๊ธฐ์ดˆ (3)Scala ๊ธฐ์ดˆ (3)
Scala ๊ธฐ์ดˆ (3)
ย 
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ ๊ธฐ์ดˆ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ ๊ธฐ์ดˆ แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ ๊ธฐ์ดˆ
แ„‘แ…กแ„‹แ…ตแ„Šแ…ฅแ†ซ ๊ธฐ์ดˆ
ย 
2014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #72014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #7
ย 
Scala namespace scope
Scala namespace scopeScala namespace scope
Scala namespace scope
ย 

Refactoring

  • 1. Refactoring 6์žฅ Remove Assignment to Parameters Replace Method with Method Object Substitute Algorithm ์•„๊ฟˆ์‚ฌhttp://cafe.naver.com/architect1 ๊น€์šฉ๋ฝ http://blog.naver.com/subhill
  • 2. Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ.
  • 3. Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ๋™๊ธฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์ง„ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ž‘์—…์€ OK! ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์—๋Š” ๋ฐ˜๋Œ€! ์ด์œ  ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค. ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ(pass by value)์™€ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ(pass by reference)๋ฅผ ํ˜ผ๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ
  • 4. Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ๋”ฐ๋ผ์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š”์ „๋‹ฌ๋œ ๊ทธ๋Œ€๋กœ ์“ฐ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋ช…ํ™•ํ•˜๋ฉฐ ์ผ๊ด€์ ์ธ ์‚ฌ์šฉ๋ฒ•์ด๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์—๊ฐ’์„ ๋Œ€์ž…ํ•ด์„œ๋Š” ์•ˆ๋˜๊ณ  ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด Remove Assignments to Parameters ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๊ฑฐํ•˜์ž
  • 5. Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ์ ˆ์ฐจ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์œ„ํ•œ ์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•œ ์ฝ”๋“œ ์ดํ›„์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ž„์‹œ๋ณ€์ˆ˜๋กœ ๋ฐ”๊พผ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€์ž…ํ•˜๋Š” ๊ฐ’์„ ์ž„์‹œ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•œ๋‹ค ์ปดํŒŒ์ผ๊ณผ ํ…Œ์ŠคํŠธ.
  • 6. Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ์ฃผ์˜ ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ์ผ ๊ฒฝ์šฐ(call by reference)์ธ ๊ฒฝ์šฐ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๋ถ€๋ถ„์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๊ณ„์† ์‚ฌ์šฉ๋˜๋Š”์ง€ ์‚ดํŽด๋ณด๋ผ. ๋˜ํ•œ ๊ฑฐ๊ธฐ์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์ด ๋Œ€์ž…๋˜๊ณ  ์‚ฌ์šฉ๋˜๋Š”์ง€๋„ ๋ณธ๋‹ค. ๋ฆฌํ„ด๊ฐ’์œผ๋กœํ•˜๋‚˜์˜ ๊ฐ’์„ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ผ. ๋งŒ์•ฝ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€, ๋˜๋Š” ๋ณ„๋„์˜ ๋ฉ”์†Œ๋“œ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด๋ผ.-> Replace Method with Method Object(163) ํ™œ์šฉ.
  • 7. Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ์˜ˆ์ œ 2 ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผFinal๋กœ ์„ ์–ธํ•˜์—ฌ ๊ด€๋ก€๋ฅผ ๋”ฐ๋ฅด๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์ €์ž๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์—final ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ์งง์€ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ์ฝ”๋“œ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๋Š”๋ฐ ๋ณ„๋กœ ํฐ ๋„์›€์ด ์•ˆ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ”์†Œ๋“œ๊ฐ€๊ธธ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š”์ง€ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์“ฐ๊ธฐ๋„ ํ•œ๋‹ค.
  • 8. Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ์ž๋ฐ”์—์„œ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ(Pass By Value) ์ž๋ฐ”๋Š” ์—„๊ฒฉํ•˜๊ฒŒ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ์„ ์‚ฌ์šฉ
  • 9. Remove Assignments to Parameters ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,๋Œ€์‹  ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ผ. ์ž๋ฐ”์—์„œ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ(Pass By Value) ๋ณธ์งˆ์ ์œผ๋กœ ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ€ ๊ฐ’์œผ๋กœ ๋„˜๊ฒจ์ง„๋‹ค. ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋‹ค๋ฅธ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ๊ฒƒ์€ ๊ณ ๋ ค์•ˆํ•จ
  • 10. ReplaceMethod with Method Object ์ง€์—ญ๋ณ€์ˆ˜ ๋•Œ๋ฌธ์— Extract Method๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ธด ๋ฉ”์†Œ๋“œ์˜ ๊ฒฝ์šฐ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ทธ ์ž์‹ ์„ ์œ„ํ•œ ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ” ๋ชจ๋“  ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ๊ทธ ๊ฐ์ฒด์˜ ํ•„๋“œ๊ฐ€ ๋˜๋„๋ก ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ™์€ ๊ฐ์ฒด ์•ˆ์˜ ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„ํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•œ์ค„ ์š”์•ฝ ๋ฉ”์†Œ๋“œ๋ฅผ(๋ฉ”์†Œ๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‹ด๋Š”)๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”๋ผ.
  • 11. ReplaceMethod with Method Object ๋ฉ”์†Œ๋“œ๋ฅผ(๋ฉ”์†Œ๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‹ด๋Š”) ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”๋ผ. ๋™๊ธฐ ์ž‘์€ ๋ฉ”์†Œ๋“œ์˜ ์•„๋ฆ„๋‹ค์›€ ๊ฐ•์กฐ. ๋งŽ์€ ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋ถ„ํ•ดํ•  ๋•Œ ์–ด๋ ค์›€์„ ์ค€๋‹ค ์ด๋Ÿฐ ๊ฒฝ์šฐ ย Replace Method with Method Object๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฐ ๋ชจ๋“  ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋ฉ”์†Œ๋“œ ๊ฐ์ฒด๋กœ ๋ฐ”๊พธ์–ด ๋ฒ„๋ฆฐ๋‹ค.๊ทธ ๋‹ค์Œ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ฅผ Extract Method๋ฅผ ์ด์šฉํ•˜์—ฌ ์›๋ž˜์˜ ๋ฉ”์†Œ๋“œ๋กœ ๋ถ„ํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 12. ReplaceMethod with Method Object ๋ฉ”์†Œ๋“œ๋ฅผ(๋ฉ”์†Œ๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‹ด๋Š”) ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”๋ผ. ์ ˆ์ฐจ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์„ ๋”ฐ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ์ƒ์„ฑ. ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์— Final ํ•„๋“œ๋กœ ์›๋ž˜ ๋ฉ”์†Œ๋“œ์˜ ๊ฐ์ฒด๋ฅผ ์ €์žฅ ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ž„์‹œ๋ณ€์ˆ˜์™€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์œ„ํ•œ ํ•„๋“œ ์ƒ์„ฑ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์—์„œ ์†Œ์Šค๊ฐ์ฒด์™€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ทจํ•จ. ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์— Compute๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • 13. ReplaceMethod with Method Object ๋ฉ”์†Œ๋“œ๋ฅผ(๋ฉ”์†Œ๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‹ด๋Š”) ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”๋ผ. ์ ˆ์ฐจ ์›๋ž˜์˜ ๋ฉ”์†Œ๋“œ๋ฅผCompute์— ๋ณต์‚ฌ. ์›๋ž˜์˜ ๊ฐ์ฒด์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์†Œ์Šค ๊ฐ์ฒด ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฐ”๊ฟˆ. ์ปดํŒŒ์ผ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์›๋ž˜์˜ ๋ฉ”์†Œ๋“œ๋ฅผ์ƒˆ๋กœ๋งŒ๋“  ๊ฐ์ฒด์˜ Compute๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ๋ฐ”๊ฟˆ. ์ด์ œ Extract Method๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งˆ์Œ๋Œ€๋กœ Refactoring.
  • 14. Substitute Algorithm ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ๋Š”, ๋ฉ”์†Œ๋“œ์˜ ๋ชธ์ฒด๋ฅผ ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
  • 15.
  • 16. Substitute Algorithm ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ๋Š”, ๋ฉ”์†Œ๋“œ์˜ ๋ชธ์ฒด๋ฅผ ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ”๊พผ๋‹ค. ์ ˆ์ฐจ ๋Œ€์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค€๋น„. ์ ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ๊ฐ™๋‹ค๋ฉด ๋ ๊ฒฐ๊ณผ ๋‹ค๋ฅด๋ฉด ์˜ˆ์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉํ•˜์—ฌ ๋””๋ฒ„๊น….