Lagacy code ์ Unit Test ์ ์ฉํ๊ธฐ
ํ์ฌ ์ฃผ ์
๋ฌด๋ก ๋ค๋ฃจ๊ณ ์๋ ๋ถ๋ถ์ด iOS Swift ์ด๋ค ๋ณด๋, iOS Swift ๊ธฐ์ค์ผ๋ก ์๊ฐํด ๋ณธ๋ค.
(ํ ์
๋ฌด์์ ์ ์ฉํด๋ณธ ๊ฒฝํ ์์ฃผ๋ก ๊ธฐ์ ํ๋ค.)
A. Legacy code ๋ฅผ testable ํ ์ฝ๋๋ก ๋ณ๊ฒฝํ๊ธฐ
๋ณดํต(๊ฒฝํ์ ๊ฑฐ์ ๋ค..) Legacy code ๋ ํ
์คํธ ์ฝ๋๊ฐ ์๊ณ , ์ฝ๋๋ก ํ
์คํธ ํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ค์ด ์ํ์ด๋ค.
Unit Test ๋ฅผ ์ ์ฉํ๋ค๊ณ ํ๋ ๊ฒ์ ์ฝ๋๋ฅผ ์ฝ๋๋ก ํ
์คํธ ํ๊ฒ ๋ค๋ ์๋ฏธ๋ค.
ํ๋ก๊ทธ๋จ์ ํฌ๊ธฐ๊ฐ ์๊ฑฐ๋ ์ด๊ธฐ๋ผ๋ฉด, ์์ผ๋ก ํ๋ก๊ทธ๋จ์ ๋ก์ง์ ์ฝ๊ฒ ํ
์คํธํ ์ ์๋ค.
ํ์ง๋ง ํ๋ก๊ทธ๋จ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ณ , ๊ธฐ๋ฅ์ด ๋ง๊ณ , ์์ธ ์ํฉ์ด ๋ง๊ณ , ๋ณต์กํ ํ๊ฒฝ์์ ํ๋ก๊ทธ๋จ์ด ๋์ํ๋ค๊ณ ํ๋ค๋ฉด..
(์๋ง๋ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋จ์ด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํ์ฐ์ ์ผ๋ก ์ด๋ ๊ฒ ๋๋ ๊ฒ ๊ฐ๋ค.)
๋ชจ๋ ์ผ์ด์ค์ ๋ํด์ ์์ผ๋ก ํ
์คํธํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ(?)ํด์ง๋ค. ๊ทธ๋ฅ ๊ทธ๋ ๊ทธ๋ ์์ ํ ๋ถ๋ถ์ ์ฝ๋ ์ ๋๋ง ์์ผ๋ก ํ
์คํธํ๊ณ ,
์ถ์ํ๊ฒ ๋ ๊ฒ์ด๋ค. (์ด๋ค ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ฐ์ํ๋์ง ์ ํ ์์ง ๋ชปํ๊ณ .. ๋ฆด๋ฆฌ์ฆํ ๋๋ง๋ค ์ ์ ๊ธ๊ธ๋๊ณ ๊ธฐ๋๋ฅผ ํ๊ฒ ๋ ์ง๋ ๋ชจ๋ฅธ๋ค.
์๋๋ฉด ๋ฐฐ์งธ๋ผ(?)๋ผ๋ ๋ง์ธ๋๊ฐ ๋์ด ์๋ฌด ๊ฑฑ์ ์์ด(?) ์ถ์ํ๊ฒ ๋ ์ง๋ ๋ชจ๋ฅธ๋ค.)
ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ง ์๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ํด์ ์์ผ๋ก ํ
์คํธํ ์ ์์ผ๋,
์ฝ๋/๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋๋ง๋ค ์ฝ๋๋ก ํ
์คํธ๋ฅผ ์์ฑํด๋๋ฉด,
ํ๋ก๊ทธ๋จ์ด ์ ์ ๋ณต์กํด์ ธ๋ ํ
์คํธํ๋๋ฐ ๋ค์ด๊ฐ๋ ์๊ฐ์ด ๊ทธ๋ ๊ฒ ๋ง์ด ๋์ด๋์ง ์๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ช๋ฒ์ด๊ณ ๋ฐ๋ณตํด์ ํ
์คํธ๊ฐ๋ฅํ๋ค.(์์ผ๋ก๋ ์๋ง๋ ์ ์ ํ๋ฒ ์ ์ฒด๋ก ํ
์คํธํ๊ธฐ๋ ๋ถ๊ฐ๋ฅํด์ง ๊ฒ์ด๋ค.. ใ
กใ
)
์๋ก ์ด ๊ธธ์๋ค.
๊ทธ๋ฌ๋ฉด ์ฝ๋๋ฅผ ํ ์คํธ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ธฐ ์ํด์ ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ๋ ๊ฒ์ ๋ฌด์์ผ๊น?
์ ๋ก์ง๊ณผ ๊ทธ๋ ์ง ์์ ๋ถ๋ถ์ผ๋ก ๋ถ๋ฆฌํ๋๊ฐ?
ํ๋ก๊ทธ๋จ์ ์ฝ๋๋ก ํ
์คํธํ๋ค๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํ๋๊ฐ?
์ฝ๋๋ก ๋ฌด์์ ํ
์คํธํด์ผ ํ๋๊ฐ?
ํ๋ก๊ทธ๋จ์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ ๋ก์ง์ด๋ค. ์ด๋ค ์กฐ๊ฑด์ผ ๋, ์ด๋ป๊ฒ ๋ถ๊ธฐ๋๊ณ , ์ด๋ค ํจ์๊ฐ ๋์ํด์ผ ํ๊ณ , ๊ฐ์ด ์ด๋ป๊ฒ ๋ณํ๊ณ ์ ์ฅ๋์ด์ผ ํ๋๊ฐ๊ฐ ๊ฐ์ฅ ์ค์ํ๋ค.
๋ก์ง ์ค์์ ์ด๋ค ๋ถ๋ถ์ ํ
์คํธํด์ผ ํ๋๊ฐ? ์ฌ์ค 100% ๋ชจ๋ ์ฝ๋๋ฅผ ํ
์คํธํ๋ค๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
ํนํ๋ ๋ด๊ฐ ์์ฑํ์ง ์์ ๋ถ๋ถ์ ๋ํ ์ฝ๋๋ ๋์ฑ ํ
์คํธํ๊ธฐ ํ๋ค ๊ฒ์ด๋ค.
ํ์ง๋ง ๋ด๊ฐ ์์ฑํ ๋ถ๋ถ์ ์ฝ๋๋ ํ
์คํธํ๊ธฐ ์ฝ๋ค.
๊ทธ๋์ ๋ด๊ฐ ์์ฑํ์ง ์์ ๋ถ๋ถ์ ์ฝ๋์ ๋ํ ํ
์คํธ๋ ์ต์ํ์ผ๋ก ์์ฑํ๊ณ ,
๋ด๊ฐ ์์ฑํ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ํ
์คํธํ๋๋ฐ ์ง์คํ๋ค.
iOS ์์๋ ์ผ๋จ ๋ก์ง๊ณผ View๋ฅผ ๋ถ๋ฆฌํ๋ค. ์ด๊ฒ์ ์ํด์ MVP๋ฅผ ํ๋ MVVM, Store/Reactor ๋ฑ์ ์์ฑํ๋ค. ํ์ง๋ง ์ผ๋จ ๋ชฉ์ ์ ๋ชจ๋ ๊ฐ๋ค. View(๋ก์ง๊ณผ ํฌ๊ฒ ์๊ด์์ด ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๋ถ๋ถ) ๊ณผ ๋ก์ง์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค. ๋ก์ง์ View ์ ๋ถ๋ฆฌํ์ฌ Presenter๋ , ViewModel, Store, Reactor๋ ํ์ชฝ์ผ๋ก ๋ถ๋ฆฌํด์ ๋ชฐ์ ๋ฃ์ด์ผ ํฉ๋๋ค. (* View ์ ๋ก์ง์ ํ๋๋ ๋จ๊ฒจ๋์ง ์๋ ๊ฒ์ Unit Test Code Coverage ๋ฅผ 100% ํ๋ ค๋ ๊ฒ๋ ๊ฐ๋ค๋ ๋ง๋ ์๊ธด ํฉ๋๋ค. ์ด๋๊น์ง๋ ์ฐ๋ฆฌ์ ๋ชฉ์ ์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ํ ์คํธํ๋ ๊ฒ์ธ๋ฐ, view ์์ (ํ ์คํธ๊ฐ ํ์ ์์ ์ ๋๋ก ์๋ช ํ๊ฒ) ๊ฐ๋จํ ์์ฑํ ์ ์๋ ์ฝ๋๋ฅผ ์ฝ๋๋ก ํ ์คํธ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด์ (๋ง์ด) ๋ณต์กํ๊ฒ ๋ง๋ค์ด์ผ ํ๋ค๋ฉด ๋ชฉ์ ๋ณด๋ค ์๋จ์ ๋๋ฌด ์น์คํ ๊ฒ์ด ๋ ์ ์์ต๋๋ค. ํ์ง๋ง ํ ์คํธ๊ฐ ํ์ ์์ ์ ๋๋ก ์๋ช ํ ์ฝ๋์ ๊ธฐ์ค์ด ์กฐ๊ธ ์ ๋งคํ๊ธด ํฉ๋๋ค. ใ กใ )
...