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?