7์žฅ

Move Method(v)

๋ฉ”์†Œ๋“œ๊ฐ€ ์ž์‹ ์ด ์ •์˜๋œ ํด๋ž˜์Šค๋ณด๋‹ค ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด
์ด ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์— ๋น„์Šทํ•œ ๋ชธ์ฒด๋ฅผ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ผ. 
๊ทธ๋ฆฌ๊ณ  ์ด ์ „ ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ„๋‹จํ•œ ์œ„์ž„์œผ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๋ผ.

๋™๊ธฐ

์ž์‹ ์ด ์†ํ•ด ์žˆ๋Š” ํด๋ž˜์Šค๋ณด๋‹ค ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ๋” ๋งŽ์ด ์ฐธ์กฐํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ

์ ˆ์ฐจ

์†Œ์Šค ํด๋ž˜์Šค์— ์ •์˜๋œ ์†Œ์Šค ๋ฉ”์†Œ๋“œ์— ์˜ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์„ ์กฐ์‚ฌ
์†Œ์Šค ํด๋ž˜์Šค์˜ ์„œ๋ธŒํด๋ž˜์Šค๋‚˜ ์Šˆํผํด๋ž˜์Šค์—์„œ ์˜ฎ๊ธฐ๋ ค๊ณ  ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์„ ์–ธ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
ํƒ€๊ฒŸ ํด๋ž˜์Šค์— ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜
์†Œ์Šค ๋ฉ”์†Œ๋“œ์—์„œ ํƒ€๊ฒŸ ๋ฉ”์†Œ๋“œ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌ. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฉ”์†Œ๋“œ๊ฐ€ ํƒ€๊ฒŸ ํด๋ž˜์Šค์—์„œ ๋™์ž‘ํ•˜๋„๋ก ์ ์ ˆํžˆ ์ˆ˜์ •
ํƒ€๊ฒŸ ํด๋ž˜์Šค ์ปดํŒŒ์ผ
์†Œ์Šค ํด๋ž˜์Šค์—์„œ ์ ์ ˆํ•œ ํƒ€๊ฒŸ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ๋ฒ• ๊ฒฐ์ •
์†Œ์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ์œ„์ž„ ๋ฉ”์†Œ๋“œ๋กœ ๋ฐ”๊พผ๋‹ค.
์ปดํŒŒ์ผ, ํ…Œ์ŠคํŠธ ํ•œ๋‹ค.
์†Œ์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ฑฐํ• ์ง€ ์œ„์ž„ ๋ฉ”์†Œ๋“œ๋กœ ๋‚จ๊ฒจ๋‘˜์ง€ ๊ฒฐ์ •

Move Field(v)

ํ•„๋“œ๊ฐ€ ์ž์‹ ์ด ์ •์˜๋œ ํด๋ž˜์Šค๋ณด๋‹ค ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์˜ํ•ด์„œ ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค๋ฉด
ํƒ€๊ฒŸ ํด๋ž˜์Šค์— ์ƒˆ๋กœ์šด ํ•„๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ธฐ์กด ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•˜๋ผ.

๋™๊ธฐ

์–ด๋–ค Field๊ฐ€ ์ž์‹ ์ด ์†ํ•œ Class๋ณด๋‹ค ๋‹ค๋ฅธ Class์˜ Method์—์„œ ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์„ ๋•Œ
get/set์œผ๋กœ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋งŽ์ด ์“ฐ๊ณ  ์žˆ์„ ๊ฑฐ ๊ฐ™์œผ๋ฉด Method๋ฅผ ์˜ฎ๊ธฐ๋Š” ๊ฒŒ ์ข‹๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ Method์˜ ์œ„์น˜๊ฐ€ ์ ์ ˆํ•˜๋‹ค๋ฉด ํ•„๋“œ๋ฅผ ์˜ฎ๊ธด๋‹ค.
Extract Class๋ฅผ ํ•  ๋• Field๋ฅผ ๋จผ์ € ์˜ฎ๊ธฐ๊ณ  Method๋ฅผ ์˜ฎ๊ธด๋‹ค.

์ ˆ์ฐจ

Field๊ฐ€ public์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์œผ๋ฉด Encapsulate Field๋ฅผ ์‚ฌ์šฉ
Compile, Test
Target Class์— Field์™€ ๊ทธ Field์— ๋Œ€ํ•œ get/set method๋ฅผ ๋งŒ๋“ ๋‹ค.
Compile Target Class 
Source Class์—์„œ Target ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ๋ฒ• ๊ฒฐ์ •
Source Class์— ์žˆ๋Š” Field ์ œ๊ฑฐ
Source Field๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์„ Target Class์— ์žˆ๋Š” ์ ๋‹นํ•œ Method๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ๋ฐ”๊พผ๋‹ค.
Compile, Test

Extract Class(v)

๋‘ ๊ฐœ์˜ Class๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์„ ํ•˜๋‚˜์˜ Class๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ
์ƒˆ๋กœ์šด Class๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ด€๋ จ ์žˆ๋Š” Field์™€ Method๋ฅผ ์˜ˆ์ „ Class์—์„œ ์ƒˆ๋กœ์šด Class๋กœ ์˜ฎ๊ฒจ๋ผ

๋™๊ธฐ

Class๊ฐ€ ๋งŽ์€ Method, Data๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋„ˆ๋ฌด ์ปค์„œ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ
์–ด๋–ค Data์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ๊ณผ Method์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ด ๊ฐ™์ด ๋ชฐ๋ ค๋‹ค๋‹ˆ๋Š” ๊ฒฝ์šฐ
๋งŒ์•ฝ ์ผ๋ถ€ Data๋‚˜ Method๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ Field๋‚˜ Method๊ฐ€ ์˜๋ฏธ ์—†๋Š” ๊ฒƒ์ด ๋ ์ง€๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ์€ ํŽธ๋ฆฌํ•œ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•

์ ˆ์ฐจ

Class์˜ ์ฑ…์ž„์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆŒ์ง€ ๊ฒฐ์ •
๋ถ„๋ฆฌ๋œ ์ฑ…์ž„์„ ๋– ๋งก์„ ์ƒˆ๋กœ์šด Class ์ƒ์„ฑ
์ด์ „ ํด๋ž˜์Šค์—์„œ ์ƒˆ๋กœ ๋งŒ๋“  ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋งŒ๋“ ๋‹ค.
์˜ฎ๊ธฐ๊ณ ์ž ํ•˜๋Š” ๊ฐ๊ฐ์˜ Field์— ๋Œ€ํ•ด Move Field ์‚ฌ์šฉ
๊ฐ๊ฐ์˜ Field๋ฅผ ์˜ฎ๊ธธ ๋•Œ๋งˆ๋‹ค Compile, Test
Move Method๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด์ „ Class์—์„œ ์ƒˆ๋กœ ๋งŒ๋“  Class๋กœ Method๋ฅผ ์˜ฎ๊ธด๋‹ค.
์ €์ˆ˜์ค€ Method(ํ˜ธ์ถœํ•˜๊ธฐ๋ณด๋‹ค ํ˜ธ์ถœ๋˜๋Š” Method) -> ๊ณ ์ˆ˜์ค€ Method ์ˆœ์„œ๋กœ
๊ฐ๊ฐ์˜ Method ์˜ฎ๊ธธ ๋•Œ๋งˆ๋‹ค Compile, Test
๊ฐ Class๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ , Interface๋ฅผ ์ค„์ธ๋‹ค.
์ƒˆ๋กœ์šด Class๋ฅผ ๊ณต๊ฐœํ• ์ง€ ๊ฒฐ์ •

Inline Class

Class๊ฐ€ ํ•˜๋Š” ์ผ์ด ๋งŽ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š”
๊ทธ Class์— ์žˆ๋Š” ๋ชจ๋“  ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ์˜ฎ๊ธฐ๊ณ  ๊ทธ ํด๋ž˜์Šค๋ฅผ ์ œ๊ฑฐํ•˜๋ผ.

๋™๊ธฐ

Extract Class์™€ ๋ฐ˜๋Œ€
Refactoring์œผ๋กœ ๊ทธ Class์˜ ์ฑ…์ž„์„ ๋Œ€๋ถ€๋ถ„ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์˜ฎ๊ธฐ๊ณ  ๋‚จ์€ ๊ฒƒ์ด ๊ฑฐ์˜ ์—†๋Š” ๊ฒฝ์šฐ

์ ˆ์ฐจ

ํก์ˆ˜ํ•˜๋Š” Class์— Source Class์˜ public Field์™€ Method๋ฅผ ์„ ์–ธ
Source Class๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์„ ํก์ˆ˜ํ•˜๋Š” Class๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ๋ณ€๊ฒฝ
Compile, Test
Move Method์™€ Move Field๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Source Class์— ์žˆ๋Š” ๋ชจ๋“  Field์™€ Method๋ฅผ ํก์ˆ˜ํ•˜๋Š” Class๋กœ ์˜ฎ๊น€

Hide Delegate

Client๊ฐ€ ๊ฐ์ฒด์˜ ์œ„์ž„ Class๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ
์„œ๋ฒ„์— Method๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋Œ€๋ฆฌ๊ฐ์ฒด(delegate)๋ฅผ ์ˆจ๊ฒจ๋ผ

Remove Middle Man

Class๊ฐ€ ๊ฐ„๋‹จํ•œ ์œ„์ž„์„ ๋„ˆ๋ฌด ๋งŽ์ด ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š”
Client๊ฐ€ ๋Œ€๋ฆฌ๊ฐ์ฒด(delegate)๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๋ผ.

Introduce Foreign Method

์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„ Class์— ๋ถ€๊ฐ€์ ์ธ Method๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ Class๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” 
์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ์„œ๋ฒ„ Class์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ›๋Š” Method๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋งŒ๋“ค์–ด๋ผ

๋™๊ธฐ

๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ •๋ง๋กœ ๋ฉ‹์ง„ Class๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๊ผญ ํ•„์š”ํ•˜์ง€๋งŒ ๊ทธ Class๊ฐ€ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์„œ๋น„์Šค๊ฐ€ ํ•˜๋‚˜ ์žˆ๋‹ค. 
๊ทธ๋Ÿฐ๋ฐ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ ์™ธ๋ž˜ ๋ฉ”์†Œ๋“œ(Foreign Method)๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•๋ฐ–์— ์—†๋‹ค. 
Foreign Method๋Š” ์ž„์‹œ๋ฐฉํŽธ์ผ ๋ฟ

์ ˆ์ฐจ

ํ•„์š”ํ•œ ์ž‘์—…์„ ํ•˜๋Š” Method๋ฅผ ํด๋ผ์ด์–ธํŠธ Class์— ๋งŒ๋“ ๋‹ค.
 ใ„ด์ด Method๋Š” ํด๋ผ์ด์–ธํŠธ Class์˜ ์–ด๋–ค ๋ถ€๋ถ„์—๋„ ์ ‘๊ทผํ•ด์„  ์•ˆ ๋จ
 ใ„ด๊ฐ’์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ฐ’์„ Parameter๋กœ ๋„˜๊ฒจ์•ผ ํ•จ
์ฒซ ๋ฒˆ์งธ Parameter๋กœ ์„œ๋ฒ„ Class์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ›๋„๋ก ํ•จ
Method์— "์™ธ๋ž˜ ๋ฉ”์†Œ๋“œ, ์›๋ž˜ ์„œ๋ฒ„ ํด๋ž˜์Šค์— ์žˆ์–ด์•ผ ํ•œ๋‹ค."์™€ ๊ฐ™์€ ์ฃผ์„์„ ๋‹ฌ์•„ ๋†“๋Š”๋‹ค.

Introduce Local Extension(v)

์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„ Class์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Method๋ฅผ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์žˆ์ง€๋งŒ ์„œ๋ฒ„ Class๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
ํ•„์š”ํ•œ ์ถ”๊ฐ€ Method๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒˆ๋กœ์šด Class๋ฅผ ๋งŒ๋“ค์–ด๋ผ.
์ด ํ™•์žฅ Class๋ฅผ ์›๋ž˜ Class์˜ ์„œ๋ธŒํด๋ž˜์Šค ๋˜๋Š” ๋ž˜ํผ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด๋ผ.

Introduce Foreign Method๋งŒ์œผ๋กœ๋Š” ๊ฐ๋‹น์ด ์•ˆ ๋  ๋งŒํผ Method๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ

Last updated

Was this helpful?