2. ์ผ์ต์ฐ๊ธฐ ๋ชจ๋ธ๋ก ๋ฐ๊พธ์ด ๋ณผ ํ์๋ ์์ต๋๋ค.
private ๋ฉ์๋ ํ๋ํ๋๋ฅผ ๋จ์ ํ
์คํธ ํ๋ ๊ฒ๋ ์ ์ฉํ์ง๋ง
๊ทธ๊ฒ์ ์ฌ์ฉํ๋ public ๋ฉ์๋๋ง์ ์ํ ๋จ์ ํ
์คํธ๋ฅผ ๋ง๋ค ์ ์๋์ง ๊ณ ๋ฏผํด ๋ณด๋ฉด ์ข๊ฒ ์ง์...
๊น๋ฐฅํด์ฒดํ๊ธฐ ๋ณด๋ค ๊น๋ฐฅ์ฐ๊ธฐ๋ฅผ ํ๋๋ก ์ ๋ฅผ ์ฐ๋ฉด private์ ๋จ์ ํ
์คํธํ๋ ๋ถ๋ถ์ด ์ค์ด ๋ค๊ธฐ๋ ํ๊ฑฐ๋ ์...
1๋ฒ. TDD๋ฅผ ํ๋ค๋ณด๋ฉด ์ฝ๋๊ฐ ์ ๋ฐ์ ์ผ๋ก functional๋ก ๊ฐ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ์ ๋ ๋๋ถ๋ถ ๋ณ์๋ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ๋
๋ฐฉ์์ผ๋ก ํ์์ํจ ๋ค์, ์ฌ๋ฌ ๋ฉ์๋์์ ๊ทธ ๋ณ์๋ฅผ ํ์๋ก ํ๋ฉด(์ฆ, ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ์์ ๋ฉ์๋๊ฐ ์ค๋ณต์ด ๋ฐ์ํ๋ฉด), ๊ทธ ๋
๋ฆฌํฉํ ๋ง์ ํฉ๋๋ค. ๋ช๊ฐ์ง ๋ฐฉ์์ด ์๋๋ฐ ๊ทธ ์ค ํ๋๊ฐ ์ธ์คํด์ค ๋ณ์๋ก ๋ฐ๊พธ๋ ๊ฒ์ด์ฃ .
์ค์ ์ฝ๋ ์(๋จ์ํ๋ ์๊ฐ ์๋๊ณ )๋ฅผ ๋ณด์ฌ์ฃผ์๋ฉด ์ ๊ฐ ๋น์ทํ ๊ฒฝ์ฐ์ ์ด๋ป๊ฒ ํ๋์ง ๋ง์๋๋ฆด ์ ์๊ฒ ์ต๋๋ค.
2๋ฒ. http://xper.org/wiki/xp/TestingPrivateInterfaces ๋ฅผ ์ฐธ๊ณ ํ์ธ์. 2004๋
๋์
ํ์ฐฝ ์งํํ๋ ๋
ผ์์
๋๋ค.
2009/12/7 ChungHee Lee <dre...@gmail.com>:
2๋ฒ์ ๋ํด์๋ ํญ์ ๋ง์ด ๋ง์ ๋ถ๋ถ์
๋๋ค. ์ ์ ๊ฒฌํด๋ private ์ ๊ฒฝ์ฐ public ์์ ์ฌ์ฉ์ด ๋๋ฏ๋ก ๊ตณ์ด ํ
์คํธ๋ฅผ
์ํด public ์ผ๋ก ์ด ์ด์ ๋ ์๋ค๊ณ ๋ด
๋๋ค. ๋ณดํต private ์ด๋ผ๋ฉด ํด๋น ํด๋์ค์ public ๋ฉ์๋์ ์ง์์ ํด์ฃผ๋
helper ์ ์ฑ๊ฒฉ์ด ๊ฐํ๋ฏ๋ก ๋
๋ฆฝ์ ์ผ๋ก ํธ์ถ์ ํ๋ ๊ฒ์ ๊ทธ๋ค์ง ์๋ฏธ๊ฐ ์๋ค๊ณ ๋ด
๋๋ค. ๋
๋ฆฝ์ ์ธ ํธ์ถ์ด ์๋ฏธ๊ฐ ์๋ค๋ฉด
public ์ผ๋ก ๊ฐ๋ฐฉ์ ํ๋ ๊ฒ์ด ๋ง๊ฒ ์ฃ . ๊ทธ๋๋ ๊ตณ์ด private ์ ๋ฐ๋ก ํ
์คํธ๋ฅผ ํด์ผ ๋ง์์ด ๋์ด๊ฒ ๋ค ์ถ์ผ๋ฉด
reflection ์ ์ฌ์ฉํด์ ํ
์คํธ๋ฅผ ํฉ๋๋ค. ๋ฌผ๋ก ์ธ์ด์ฐจ์์์ ์ง์์ด ๋์ด์ผ ๊ฒ ์ฃ .
์์์๋IDT ์ํ์์ ๋๋ค.
ย
1.ย ย ย ย ๋ด๋ถ ๋ณ์ ์์กด์ฑ ๋ฌธ์
A.ย ย ย ย ํ ์คํธ๋ฅผ ์ํด ๋ด๋ถ ๋ณ์๋ฅผ ๋ค์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ ํ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค
B.ย ย ย ย ย ๋ด๋ถ ๋ณ์๋ฅผ ์ค์ ํ๋ ํจ์๋ฅผ ์ด์ฉํด์ ํ ์คํธ๋ฅผ ํต์ ํ๋ ๊ฒ์ด ์ข๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ด๋ถ๋ณ์ ๋ณํ์ ๋ฐ๋ฅธ ํ ์คํธ ๊ฒฐ๊ณผ ์์กด์ฑ์ ํต์ ํ ์ ์๋ค๊ณ ๋ด ๋๋ค.
C.ย ย ย ย ย ๊ทธ๋ฆฌ๊ณ ์ธ์ดํ๊ฒฝ์ด ๋ฌด์์ธ์ง๋ ๋ชจ๋ฅด์ง๋ง, ํ ์คํธ ํจ์๋ฅผ ์ ํ ํด๋์ค์ ๋ฃ๋ ๊ฒ๋ ์ด์ํ๊ตฐ์. ๊ทธ๊ฒ ์๋๋ผ๋ฉดโฆ.
2.ย ย ย ย Public ๋จ์ฉ ๋ฌธ์
A.ย ย ย ย ํ ์คํธ ์ฝ๋ ์์ฑ ์ ์ Private์๋๋ฐ ํ ์คํธ๋ฅผ ์ํด public์ผ๋ก ์ ํํ๋ค๋ฉด ํ์คํ ๋ฌธ์ ๋ผ๊ณ ๋ณด์ฌ์ง๋๋ค.
B.ย ย ย ย ย ํ ์คํธ ์ฉ์ด์ฑ์ ํ ์คํธ ์ฝ๋ ์์ฒด๋ง์ผ๋ก๋ ํฅ์๋์ง ์๋๋ค๊ณ ๋ณด์์ผ ํฉ๋๋ค.
C.ย ย ย ย ย ํ ์คํธ ์ฝ๋๋ฅผ ์ ์์ฑํ๋ ํ๋ จ๋ ํ์ํ์ง๋ง, ๊ทผ๋ณธ์ ์ผ๋ก ์ ํ ์ฝ๋์ ์ค๊ณ๊ฐ ํ ์คํธ ์ฉ์ดํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฒ์ด๋ผ๊ณ ๋ณด์ฌ์ง๋๋ค.
D.ย ย ย ย ๋ฐ๋ผ์ ์ ํ ์ฝ๋๊ฐ ํ ์คํธ ์ฉ์ดํ์ง ์๋ค๋ฉด, ๋ฆฌํฉํฐ๋ง์ ์ ํํด์ผ ํ๋์ง ๊ฒํ ํด๋ณด์๊ธฐ๋ฅผ ๊ถํด๋๋ฆฝ๋๋ค.
E.ย ย ย ย ย ๊ทธ๋ฆฌ๊ณ ํ ์คํธ๋ ํด๋์ค ๋ด๋ถ์ ๋ชจ๋ ํจ์์ ๊ธฐ๋ฅ์ ํ ์คํธ ํ๋ ๊ฒ์ด ์๋๋ผ๊ณ ์๊ณ ์์ต๋๋ค.
F.ย ย ย ย ย ์ธ๋ถ์ ๋ ธ์ถ๋๊ณ ์ฌ์ฉ๋๋ ์๋ฏธ ์๋ Behavior์ ๋ํด์ ํ ์คํธํ๋ ๊ฒ์ด ๋จ์ํ ์คํธ์ด๋ ํ ์คํธ ์ฝ๋๋ฅผ ๊ณผ๋ํ๊ฒ ์์ฑํ๋ ค๋์ง ์ดํด๋ณด์์ผ๊ฒ ์ต๋๋ค.
ย
ย TDD ์ค์ ๊ฒฝํ์ ๊ทธ๋ฆฌ ๋ง์ง ์์ง๋ง ํ์ตํ๊ณ ์ดํดํ ๋ฐ์ ๋ฐ๋ผ ์๊ฒฌ์ ํ์ ๋๋ฆฝ๋๋ค. ํน์ ์์ฑํ์ ๋์ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์ค์ ๋ก ํ ๋ก ์ ํด๋ ๋๋ค๋ฉด ์ ๋ก๋์ ๋ง์ ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ์๋์ ์ง๋ฌธ์ ๋์จ ์ฝ๋๋ฅผ ํ๊ณ ๋ค์ด ๊ธ์ง์ ์ผ๋ก ์ง๋ฌธํ๋ค๋ฉด,
์ ๋ง๋ก if ๋ถ๊ธฐ๊ฐ ํ์ํ ๊น์?
2. ์ธ๋ถ์์ ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋๋ ์ฌ์ค์ ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ๋์ผํ๋ค๊ณ ๋ด ๋๋ค.
private ๋ฉ์๋๊ฐ ํ์ํ๋ค๋ฉด, ์ ๋ง๋ก private์ผ๋ก ๋ง๋ค๋ ค๋ ์ด์ ๋ฅผ ์ฐพ์
ํด๋น ์ฑ ์์ ์์ ํด๋์ค ํ๋์ ์์ํ๋ ๊ฒ ์ข๋ค๊ณ ๋ด ๋๋ค.
TDD์์ ๊ฒฝํํ๋ ๊ฒ๊ณผ ๋จ์ ํ ์คํ ์ ํผ๋ํ๋ ์ผ์ด์ค๊ฐ ๋ณด์ด๋ ๊ฒ ๊ฐ์๋ฐ
์ ๋ ๋๊ฐ์ง๋ฅผ ๋ช ๋ฐฑํ ๊ตฌ๋ถํด ์ค๊ณ ๊ฐ์ ์ ๋์์ ์ฃผ๋ ๊ฒ ์ ์ฉํ ์ ๋ต์ด๋ผ๊ณ ๋ด ๋๋ค.
2009๋
12์ 8์ผ ์ค์ 9:27, ์ํ์-ํซ๋ฉ์ผ <ldst...@hotmail.com>๋์ ๋ง:
์ต๊ทผ์ ์ ๋ TDD๋ผ๊ธฐ ๋ณด๋ค ๊ธฐ์กด์ ์์ฑ๋ ์ฝ๋ ์ค์ UnitTest๋ฅผ ๋ถ์ด๋ ๊ฒ์
๋ง์ด ํด๋ณด๊ณ ์์ต๋๋ค.
์ค๊ณ์์ ์ณ๊ณ ๊ทธ๋ฆ์ ๋ ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ UnitTest๋ฅผ ๋ถ์ผ ์๋ ์์ต๋๋ค.
1. ๋ด๋ถ๋ณ์ ์ฌ์ฉ์ ๊ฒฝ์ฐ
Testํด์ผํ class๋ฅผ ์์๋ฐ์์ Mock class๋ฅผ ๋ง๋ค๊ณ Mock class ์์ ๋ด๋ถ ๋ณ์๋ฅผ ์
ํ
ํ๋ ํจ
์๋ฅผ ๋ง๋ค๊ณ ,
Mock Class๋ฅผ testํ๋ฉด ๋๊ฒ ์ง์. ๊ทธ๋ผ ๊ธฐ์กด class์๋ ์ ํ ์๋์ง ์๊ณ UnitTesting๊ฐ๋ฅํ
๊ฒ ๋ฉ๋๋ค.
2. Public method์ ๋จ๋ฐ
Public์ด ์ซ์ผ์๋ฉด ๊ฐ๊ธ์ protected๋ก ์ฌ์ฉํ์๊ณ ์ญ์ Mock Class๋ฅผ ์ด์ฉํด์ public ์์
์ ๋ฐ์์,
Mock Class๋ฅผ testํ๋ฉด ๋ฉ๋๋ค.
์ ๊ฐ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ UnitTest๋ฅผ ๋ถ์ด๋ ๊ฒ์ ์ธ๊ธํ ๊ฒ์
์ต๊ทผ์ ์ ๊ฐ ์ด๋ฐ๋ฅ์ ์์
์ ๋ง์ด ํ๊ณ ์์ด์ ์
๋๋ค.
์ ํฌ ํ์ฌ์ ๊ฒฝ์ฐ ์ฒ์๋ถํฐ TDD๋ก ์์ฑ๋์ง ์์์ผ๋, ์ฌ์ฌ์ฉ์ด ์๋น๋ถ๋ถ ๋์ด
์ง์์ ์ผ๋ก ์์ ๋๊ณ ์๋ Legacy ์ฝ๋๋ค์ด ๋ง๊ณ ์ด๋ฐ ์ชฝ์ ๋ฌธ์ ์ ์ด ์ง์ ๋ฐ๊ฒฌ๋๋ค๋ณด๋,
UnitTest๋ฅผ ์ด๋ฏธ ์ง์ ธ์๋ ์ฝ๋์ ๋ง์ด ๋ฃ์ ํ์์ฑ์ด ์๋๊ตฐ์.
๊ธฐ์กด ์ฝ๋์ ์์ ๋์ง ์๊ณ UnitTest๋ฅผ ๋ฃ๋ ๊ฒ์ด ์ฌ์ด ๋ถ๋ถ์ด ์๋๋๊ตฐ์.
ํนํ ์์ ์์ ๊ฐ์ด ๋ด๋ถ state๋ฅผ ๊ฐ์ง์ง ์๋ function๋ค์ ์ฝ๊ฒ UnitTest๊ฐ ๋ถ์ ์ ์์ผ๋,
๋ด๋ถ state๋ฅผ ๋ณต์กํ๊ฒ ๋ง์ด ์ฐธ์กฐํ๋ ๊ฒ๋ค์ ๊ฒฝ์ฐ๋ UnitTest ๋ถ์ด๋ ๊ฒ์ด ์ฝ์ง๋ง์ ์์ต๋๋ค.
๋ฌผ๋ก testableํ๊ฒ refactoringํ๋ฉด ์ข๊ฒ ์ง๋ง,
๊ธฐ์กด ์ฝ๋์ UnitTest๊ฐ ์ด๋ฏธ ๋ง์ด ์์ฑ๋์ด ์์ผ๋ฉด refactoring๋ํ ๋๋ ค์์ด ์์ด์ง๋,
๊ทธ๋ ์ง ์๊ธฐ ๋๋ฌธ์ refctoring๋ํ side-effect์ ๋๋ ค์์ผ๋ก ํ์ฅ์์๋ ์ฝ์ง๋ง์ ์์ ์์
์
๋๋ค.
์ด์ ๊ด๋ จํด์ ์ฝ์ด๋ณผ๋งํ ์ฑ
์ ์ถ์ฒํฉ๋๋ค.
"Working Effectively With Legacy Code" by Michael C. Feathers from
PRENTICE HALL
Public์ ๋จ๋ฐ์ ๊ฒฝ์ฐ ๋์ protected๋ฅผ ์ฌ์ฉํ๋ฉด
JAVA๊ฐ ์๋๋ผ C++ ๊ด๋ จ์
๋๋ค๋ง,
GoogleTest์์๋ FRIEND_TEST() ๋ผ๋ macro๋ฅผ ์ง์ํด์ค์ test case์ ๋ํ
friend ship์ ์ด์ฉํด์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ ์ ํ์ฌ์ ๊ฒฝ์ฐ UnitTest++ framework์ ์ฌ์ฉํ๋ค ์ฌ๋ฌ ์ด์ ๋๋ฌธ์ ์ต๊ทผ์ GoogleTest๋ก ์ฎ๊ฒผํ์ต๋๋ค.
๊ฐ๋จํ python script์ผ๋ก ๊ธฐ์กด UnitTest++ ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์ ๋ถ GoogleTest๋ก ์ฝ๊ฒ ์ฎ๊ฒจ์,
์๊ฐ๋งํผ Framework ์ฎ๊ธฐ๋ ๊ฒ์ overhead๋ ์ปค์ง ์์ ๋ฏ ํฉ๋๋ค.
์ฌํํผ ์ง๊ธ ๊ฐ๊ณ ์๋ ์ ๋ณด์์ ๋ง์๋๋ฆฌ๋ฉด,
์ค๊ณ๋ฅผ ๋ฐ๊ฟ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ค์ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๊ฐ์ด ๋๋ค์.
1) Downloader๋ฅผ ๋ช ๊ฐ์ class๋ก ์ชผ๊ฐ ๋ค (coherentํ ๋๋ค๋ผ๋ฆฌ ๋ฌถ์ด์ -- ์ด ๊ฒฝ์ฐ ์๋ก ์๊ธด
ํด๋์ค๋ค์ ๋ฉ์๋๋ฅผ ํ
์คํธํจ)
2) Downloader๋ฅผ ์์ฑํ๊ธฐ ์ฝ๊ฒ "๊ฐ๋ณ๊ฒ" ๋ง๋ ๋ค. DI ์ฌ์ฉ. (์ด ๊ฒฝ์ฐ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋ก ์ถ๊ฐํ์ง ์๊ณ ํ
์คํธ)
์ธ์คํด์ค ๋ณ์๋ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ๋ ๋ ๋ค ์ค๋ณต์ผ๋ก ์๋ ๊ฒ์ ๋ฆฌํฉํ ๋ง ๋์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Downloader๋ผ๋ ์ด๋ฆ์ ๋ํด. http://xper.org/wiki/seminar/OOP_c0_fb ์ฐธ๊ณ ํ์ธ์.
ํ ์คํธํ๊ธฐ ์ด๋ ค์ด ๊ฒ์ ๋๋ถ๋ถ ์ค๊ณ ๋ฌธ์ ์ ๋๋ค.
2009/12/8 ChungHee Lee <dre...@gmail.com>:
--~--~---------~--~----~------------~-------~--~----~
ํ๊ตญ XP ์ฌ์ฉ์ ๋ชจ์(http://xper.org) ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ๊ฐ์ ํ์ จ๊ธฐ์ ์ด ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋๋ฆฝ๋๋ค. Google ๊ทธ๋ฃน์ค "xper" ๊ทธ๋ฃน
์ด ๊ทธ๋ฃน์ ๊ฒ์ํ๋ ค๋ฉด ๋ค์ ์ฃผ์๋ก ์ด๋ฉ์ผ์ ๋ณด๋ด์ฃผ์ญ์์ค.
xp...@googlegroups.com
์ด ๊ทธ๋ฃน์์ ํํดํ์๋ ค๋ฉด ๋ค์์ผ๋ก ์ด๋ฉ์ผ์ ๋ณด๋ด์ฃผ์ญ์์ค.
xper+uns...@googlegroups.com
์ถ๊ฐ ์ต์ ์ ๋ณด๋ ค๋ฉด http://groups.google.com/group/xper?hl=ko?hl=ko์ ๊ทธ
๋ฃน์ ๋ฐฉ๋ฌธํ์ญ์์ค.
-~----------~----~----~----~------~----~------~--~---