Composed Method ¶
์ธ๊ฐ๊ณผ ์์ฌ์ํต์ด ์๋๋ ํ๋ก๊ทธ๋จ์ ์ํ๋๊ฐ? ๋ฉ์๋์ ์ด๋ฆ์ ์ง์๋ ์๋๊ฐ ์ ๋๋ฌ๋๊ฒ ์ง์.
๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ ๋ฐ์๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์ฆ ํจ์ ํธ์ถ์๋ ์ค๋ฒํค๋๊ฐ ๋ค๋ฐ๋ฅธ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ต๊ณ ์ ์๋๋ฅผ ๋ด๋ ค๋ฉด ํ๋์ ๋ฉ์๋์ ๋ชจ๋ ๊ฑธ ๋๋ ค๋ฃ์ ์๋ ์๋ค. ํ์ง๋ง? ๋๊ฐ๋ ํด๊ฒ์ด๋ค.(์ธ๋ ฅ๋ญ๋น, ๋น๊ตฌ์กฐ์ ํ๋ก๊ทธ๋จ ์์ฐ)
์ด๋ณด์๋ค์ ์์ ํฌ๊ธฐ์ ๋ง์ ๋ฉ์๋๋ฅผ ๋ณด๊ณ ๋, ํ๋ก๊ทธ๋จ์ ์งํ ์ํฉ์ ์ ๋ชจ๋ฅธ๋ค๊ณ ํ ์๋ ์๋ค. ํ์ง๋ง ๊ฒฝํ์ด ์์ผ์๋ก, ์ ์ง์ด์ง ์ด๋ฆ์ ๋ฉ์ธ์ง๋ ์ฝ๋์ ํ๋ฆ์ ์๊ธฐ ์ฝ๊ฒ ํด์ค๋ค. ๋ฉ์๋ ์ด๋ฆ์ ์๋๊ฐ ๋๋ฌ๋๊ฒ ์ง๋๊ฒ์ ํ๋์ ๋ฉ์๋ ํฌ๊ธฐ๋ฅผ ์๊ฒ ํ๋ ๊ฐ์ฅ ํฐ ์ด์ ๊ฐ ๋๋ค. ๊ทธ ์ฝ๋๋ฅผ ๋ณด๋ ์ฌ๋๋ค์ ํ๋ ํ๋์ ์์ ๋ถ๋ถ์ ์ดํดํจ์ผ๋ก์จ, ๋ ํฐ ๋ถ๋ถ์ ์ดํดํ ์ ์๊ฒ ๋๋ค. ๋ํ ๋ฉ์๋๋ฅผ ์๊ฒ ํ๋ฉด ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์๋๋ ๊ฑฐ๊ธฐ์ ๊ตญํ์ํฌ ์๊ฐ ์๋ค. ๋ญ๊ฐ ๊ฐ์ ํ๊ธฐ๊ฐ ์ฌ์์ง ๊ฒ์ด๋ค. ๋ฌผ๋ก ์์๋ ์์ฐ์ค๋ฝ๊ฒ ํ ์ ์๋ค.
๋น์ ์ ํ๋ก๊ทธ๋จ์ ํ๋์ ๋์ผํ๋ ์์ ์ ์ํํ ์ ์๋ ๋ฉ์๋๋ค๋ก ๋๋ ๋ผ. ๋ชจ๋ ๋ฉ์๋๋ ๊ฐ์ ์์ค์ ์ถ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ค. ์ด๋ ์์ฐ์ค๋ฝ๊ฒ ์ฌ๋ฌ๊ฐ์ ์์ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด๋ด๊ฒ ๋ ๊ฒ์ด๋ค.
๋น์ ์ ํ๋ก๊ทธ๋จ์ ํ๋์ ๋์ผํ๋ ์์ ์ ์ํํ ์ ์๋ ๋ฉ์๋๋ค๋ก ๋๋ ๋ผ. ๋ชจ๋ ๋ฉ์๋๋ ๊ฐ์ ์์ค์ ์ถ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ค. ์ด๋ ์์ฐ์ค๋ฝ๊ฒ ์ฌ๋ฌ๊ฐ์ ์์ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด๋ด๊ฒ ๋ ๊ฒ์ด๋ค.
๋น์ ์ด ๊ฐ์ฅ ์ค์ํ๊ฒ Composed Method๋ฅผ ์ธ๋๋, ๋น์ ์ด ๋ญ๊ฐ๋ฅผ ๊ตฌํํ๊ณ ์์๋ ์๋ก์ด ์ฑ
์์ ๋ฐ๊ฒฌํ์๋์ด๋ค. ๋น์ ์ด ๋ ์ด์์ ๋ฉ์ธ์ง๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ณด๋ผ๋, ์์ ๊ฐ์ฒด์์๋ ๊ทธ ๋ฉ์ธ์ง๋ค์ ํฉ์น๋ Composed Method๋ฅผ ๋ง๋ค ์ ์๋ค. ์ด๋ฌํ Method๋ค์ ๋น์ ์ ์์คํ
์ ๋ค๋ฅธ ๋ถ๋ถ์์๋ ์ ์ฉํ๊ฒ ์ฐ์ผ ๊ฒ์ด๋ค.
~cpp class Controller { private : /* ... */ void controlInitialize() {/* ... */} void controlLoop() {/* ... */} void controlTerminate() {/* ... */} public : void controlActivity() { controlInitialize(); controlLoop(); controlTerminate(); } };
๊ฐ์ธ์ ์ผ๋ก, ๊ฐ๋จํด๋ณด์ด์ง๋ง ์์ฃผ ์ค์ํ ์ด์ผ๊ธฐ๋ผ ์๊ฐํจ. ProgrammingByIntention ์ ์
์ฅ์์, ๋ํ '๊ฐ์ ๋ ๋ฒจ์ ์ถ์ํ๋ฅผ ์ ์งํ๋ผ'๋ผ๋ ๋๋ชฉ์์. (StepwiseRefinement ๋ฅผ ํ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ์งํ๋จ) --1002