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
์๊ณ ๋ฆฌ์ฆ์ ๋ณด๋ค ๋ช
ํํ ๊ฒ์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ์ ๋๋, ๋ฉ์๋์ ๋ชธ์ฒด๋ฅผ ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฐ๊พผ๋ค.
๋์ฒด ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ ์ปดํ์ผ
์๊ณ ๋ฆฌ์ฆ ํ
์คํธ, ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ผ๋ฉด ๋
๊ฒฐ๊ณผ ๊ฐ์ง ์๋ค๋ฉด, ๋๋ฒ๊น