[iOS] ๋ฉ์ดํธ๋ฌ๋: ์ฐ๋นํํ RxTest๋ฅผ ์ด์ฉํ ๋จ์ํ ์คํธ
๋ฉ์ดํธ ๋ฌ๋ ์ฑ ๊ฐ๋ฐ ๊ณผ์ ์ ๊ณต์ ํ๋ ํฌ์คํธ์ ๋๋ค!
์ฌ๊ธฐ์ ์ ํฌ ํ๋ก์ ํธ๋ฅผ ๋ ์์ธํ ๋ณผ ์ ์์ด์!
๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค!
MVVM์ ํด๋ฆฐ ์ํคํ ์ฒ๊น์ง ํด๋๊ณ ํ ์คํธ๋ฅผ ์ ํ๋ค๊ณ ?
์ ํฌ ํ์ MVVM๊ณผ ํด๋ฆฐ ์ํคํ ์ฒ๋ฅผ ํ๋ก์ ํธ์ ์ ์ฉํ๋๋ฐ์, ์ด๋ฐ ๊ตฌ์กฐ๋ก ๋๋์์ ๋ ์ป๋ ํฐ ์ด์ ์ค ํ๋๊ฐ ํ ์คํธ๊ฐ ์ฉ์ดํ ๊ตฌ์กฐ์ ๋๋ค. ํ๋ก์ ํธ ๋ง๋ฌด๋ฆฌ๊น์ง ๋ฑ ํ ์ฃผ, ์ ํฌ ํ์ ๋จ์ ํ ์ฃผ์ ๋ชฉํ๋ฅผ ์ฐ๋ฆฌ๊ฐ ๋๋ ๋ทฐ ๋ชจ๋ธ๊ณผ ์ ์ฆ ์ผ์ด์ค๋ฅผ ์๋ฒฝํ๊ฒ ๋จ์ ํ ์คํธํด๋ณด๋ ๊ฒ์ผ๋ก ์ก์์ต๋๋ค.
๊ทธ๋ ๊ฒ ์ด์๋ฅผ ๋ฑ๋กํ๊ณ
์ด๋ ๊ฒ 44๊ฐ์ ์ด์๊ฐ ๋ฑ๋ก๋ฉ๋๋ค...ใ ใ ใ ใ ์ธ์ ๋ค ํด..?
ํ ์คํธ ์ค๊ณ
์ ํฌ๋ ๋ทฐ ๋ชจ๋ธ์ Input/Output์ผ๋ก ๋ชจ๋ธ๋งํ์ฌ ์ค๊ณํ๊ณ , ์ ์ฆ ์ผ์ด์ค์๋ ๋ทฐ ๋ชจ๋ธ์์ ํธ์ถํ ๋น์ฆ๋์ค ๋ก์ง์ ์ ์ํด๋์๊ธฐ ๋๋ฌธ์ ํ ์คํธ ๋์์ ์ ์ํ๋ ๊ฒ์ ์ด๋ ต์ง ์์์ต๋๋ค.
๋ทฐ ๋ชจ๋ธ์ ์ด๋ ๊ฒ Input์ ๋ํด Ouput์ด ์ํ๋ ๋๋ก ์ ๋์ค๋์ง๋ฅผ ํ ์คํธํ๋ ๊ฒ์ ๋ชฉํ๋ก ์ผ์๊ณ ,
์ ์ฆ ์ผ์ด์ค๋ ํ๋กํ ์ฝ์ ์ ์ํ ํจ์๋ค์ด ์๋ํ๋ ๋๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ง๋๋์ง ํ ์คํธํ๋ ๊ฒ์ ๋ชฉํ๋ก ์ผ์์ต๋๋ค.
๊ทผ๋ฐ ์ฐ๋ฆฐ ๋ค Rx์์..
๊ทธ๋ฐ๋ฐ ์ ํฌ ํ์ ๊ฑฐ์ ๋ชจ๋ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฒฐ๊ณผ์ ๋ทฐ ๋ชจ๋ธ Ouput์ ํ๋กํผํฐ๋ฅผ ์คํธ๋ฆผ์ ํตํด ํ๋ฌ๊ฐ๋๋ก ํ๋ค๋ ๊ฒ ๋๋ฌธ์ ํ ์คํธ๋ฅผ ์์ํ ๋ ํฐ ํผ๋์ด ์์์ต๋๋ค. Rx ์์ฒด๊ฐ ์ฒ์ ํด๋ณด๋ ๊ฒฝํ์ด์๊ธฐ ๋๋ฌธ์ ๋จ์ ํ ์คํธ๋ฅผ ํ๋ ๊ฒ๋ ์กฐ๊ธ์ ๋ง๋งํ์ฃ .
๊ทธ๋์ ์ด์ฌํ ์์นญ์ ํด๋ณธ ๊ฒฐ๊ณผ RxTest ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๊ฐ์์ ์๊ฐ์ input ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถ์ํค๊ณ ์ด ๋ฐ์ดํฐ์ ๋ํด ๋ฐ์ํ๋ ๊ฒฐ๊ณผ ๊ฐ๋ค์ ํ ์คํธํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
RxTest๋ก ํ ์คํธํ๊ธฐ
RxTest๋ก ํ ์คํธ๋ฅผ ์งํํ ๋๋ TestScheduler ๊ฐ์ฒด๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์ต๋๋ค. ์๋๋ ๋ฌ๋ฆฌ๊ธฐ ์ด๋ ์ค ํ๋ฉด์ ๋ทฐ ๋ชจ๋ธ์ ๋ํ ํ ์คํธ์ ๋๋ค. ์ด ํ ์คํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด๋ป๊ฒ RxTest๋ก ๋จ์ ํ ์คํธ๋ฅผ ์งํํ๋์ง ์ด์ผ๊ธฐํด๋ณด๊ฒ ์ต๋๋ค!
๋จผ์ ์ด๋ ๊ฒ ๋งค ํ ์คํธ๊ฐ ์์๋ ๋ TestScheduler์ ์์์๊ฐ์ ๊ฐ์ ์๊ฐ "0"์ผ๋ก ๋จผ์ ์ค์ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ผ์ค๋ฌ๋ฅผ ํตํด ๋ทฐ ๋ชจ๋ธ์์ ๋ฐฉ์ถ๋๋ ๊ฐ๋ค์ ๋ฐ์ Observer๋ฅผ ํ๋ ์์ฑํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ ์๋ก ๋ ์ด๋จ์ ์๊ฐ์ด mm:ss ํํ๋ก ํฌ๋งทํ ์ด ์ ๋๋์ง ํ์ธํ๋ ํ ์คํธ์ด๊ธฐ ๋๋ฌธ์ ์ต์ ๋ฒ๊ฐ ๋ฐ์ ๋ฐ์ดํฐ์ ํ์ ์ String์ผ๋ก ์ง์ ํด์ฃผ์์ต๋๋ค.
์ต์ ๋ฒ๊ฐ ์๋ค๋ฉด ์ต์ ๋ฒ๋ธ๋ ์์ด์ผ๊ฒ ์ฃ ? ๋จ์ ์๊ฐ 10์ Void๋ฅผ ๋ฐฉ์ถํ๋ ์ต์ ๋ฒ๋ธ๋ ํ๋ ์์ฑํ์ต๋๋ค. ์ด Void๋ ์ด ๋ทฐ ๋ชจ๋ธ์ ์ฐ๊ฒฐ๋ ํ๋ฉด์ด ์ฒ์ ๋ก๋๋์์ ๋์ ๋ํ ViewDidLoad ์ด๋ฒคํธ์ ๋ฐ์์ ์๋ฏธํฉ๋๋ค.
๋ฐ๋ผ์ ๋ทฐ ๋ชจ๋ธ์ Input์ ์ ์ํ ๋ ๋ฐฉ๊ธ ์์ฑํ ์ต์ ๋ฒ๋ธ์ viewDidLoadEvent์ ๋ฃ์ด์ฃผ๊ณ , ๋๋จธ์ง ํ๋กํผํฐ๋ค์ ๋ชจ๋ just๋ก ๋ฑ ํ ๋ฒ๋ง ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถ์์ผ์ค๋๋ค.
์ด์ ๋ทฐ ๋ชจ๋ธ์ input์ ouput์ผ๋ก ๋ณํํ๋ transform ๋ฉ์๋๋ฅผ ์คํํ๊ณ ouput์ ์๋ timeSpent ํ๋กํผํฐ๋ฅผ ๊ตฌ๋ ํด ํ ์คํธ์ฉ ์ต์ ๋ฒ์ ๋ฐ์ธ๋ฉ์ ํด์ค๋๋ค.
๊ฐ์๊ธฐ take(2)๊ฐ ์ ๋์๋ ์ถ์ฃ ? ์ ์ ํ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค!
๋ง์ง๋ง์ผ๋ก ์ค์ผ์ค๋ฌ๋ฅผ ์คํ์ํค๋ฉด ์๊น ๋ง๋ค์๋ ์ต์ ๋ฒ๋ธ์ ๊ฐ์์๊ฐ 10์ Void๋ฅผ ๋ฐฉ์ถํ๋ ๋์์ด ์์๋ฉ๋๋ค.
๋ฐ์ดํฐ๊ฐ ๋ฐฉ์ถ๋์์ผ๋ ๋ทฐ ๋ชจ๋ธ์ด ์์ ์ ์ํํ๊ฒ ์ฃ ! ๊ทธ๋ฆฌ๊ณ ๋ทฐ๋ชจ๋ธ์ด ๋ฐฉ์ถํ ๋ฐ์ดํฐ๊ฐ String ํ์ ์ ๊ฐ์ผ๋ก ๋ฐ๋ ์ต์ ๋ฒ์ ๋ค์ด๊ฐ์ ๊ฒ์ ๋๋ค.
Scheduler๋ฅผ ํตํด ์์ฑํ ์ต์ ๋ฒ๋ ์ต๊ทผ ๊ฐ๋ฟ๋ง ์๋๋ผ ์์ ์ด ์คํธ๋ฆผ์์ ๋ฐ์ ๋ชจ๋ ๊ฐ๊ณผ ๋จ์ ์๊ฐ์ ๋ํ ๊ธฐ๋ก์ events ๋ฐฐ์ด์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ์ด ๋ฐฐ์ด์ด ๋ด๊ฐ ์ํ๋ ๊ฒ๊ณผ ๊ฐ์์ง ํ์ธํ๋ฉด ํ ์คํธ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
์์์๋ 10์ด๊ฐ ์ง๋ฌ์ ๋ ๋ฌธ์์ด์ด ์ ๋ง๋ค์ด์ง๋์ง ํ ์คํธํ๊ณ , ๊ตฌ๋ ์ ์์ํ์ ๋ ๋ฐฉ์ถ๋ ์ด๊ธฐ๊ฐ์ธ "00:00"๊ณผ ํ ์คํธํ๊ณ ์ถ์๋ ๊ธฐ๋ ๊ฐ์ธ "00:10"์ด ์ ๋์ฐฉํ๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
HH:MM:SS ๋ฉด ์ด๋กํด..?
์์์ ์งํํ๋ ๋จ์ ํ ์คํธ๋ ํ์ด๋จธ์์ ๋ฐฉ์ถ๋๋ ๊ฒฝ๊ณผ์๊ฐ์ด ๋ฌธ์์ด ํฌ๋งท์ผ๋ก ์ ๋ณ๊ฒฝ๋๋์ง ํ์ธํ๋ ํ ์คํธ์์ต๋๋ค. ๋ทฐ ๋ชจ๋ธ์ input์ ouput์ผ๋ก ๋ณํํ๋ ๋ฉ์๋ ์์ฒด๊ฐ ์ ์ฆ ์ผ์ด์ค์ ์์กด์ ์ด๊ธฐ ๋๋ฌธ์ ๋ทฐ ๋ชจ๋ธ์ ์ง์ ์๊ฐ ๊ฐ์ ์ฃผ๋ ๊ฑด ๋ถ๊ฐ๋ฅํ์ฃ .
๊ทธ๋ผ ๊ฒฐ๊ตญ ๊ธฐ์กด ์ ์ฆ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋๋ฐ, ๋ ๊ฐ์ง ๋ฌธ์ ์ ์ด ์์ต๋๋ค.
1. ์ ์ฆ ์ผ์ด์ค๊ฐ ์๋ชป๋๋ฉด ๋ทฐ ๋ชจ๋ธ์ ๋ํ ๋จ์ ํ ์คํธ๊ฐ ์ค์ผ๋๋ค.
2. ๋ช ์๊ฐ ๋์ ์ผ๋๊ณ ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
์ ์ฆ ์ผ์ด์ค๋ ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์ฝ๋์ธ๋ฐ ์ ์์ ์ผ๋ก ๊ฐ์ด ์ ๋ฐฉ์ถ๋๋ค๊ณ ํ์ ํ ์ ์์๊น์? ๊ทธ๋ฆฌ๊ณ 1์๊ฐ์ด ๋์ด๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ํ ์คํธํ๊ธฐ ์ํด์ ๋จ์ ํ ์คํธ๋ฅผ ํ ์๊ฐ ๋์ ์ผ ๋๊ณ ๊ธฐ๋ค๋ ค์ผ ํ๋ ๋ง๋ ์ ๋๋ ์ํฉ์ด ๋ฐ์ํฉ๋๋ค.
์ด๋ฐ ์ํฉ์ ์ํด์ ์ ํฌ๋ ์ ์ฆ ์ผ์ด์ค๋ฅผ ํ๋กํ ์ฝ๋ก ํ๋ฒ ๊ฐ์ธ ๋ทฐ ๋ชจ๋ธ์ ์ธํฐํ์ด์ค๋ง ์๊ณ ๊ตฌ์ฒด ํ์ ์ ์์ง ๋ชปํ๋๋ก ํ์ต๋๋ค.
์ด๋ ๊ฒ์! ์ด๋ ๊ฒ ๊ตฌ์ฑํ๋ฉด ์ค์ ์ฑ์์๋ ๋ด๋ถ๊ฐ ๋ก์ง์ผ๋ก ๊ตฌํ๋์ด ์๋ DefaultUseCase๋ฅผ ์ฌ์ฉํ๊ณ , ํ ์คํธ์์๋ ์ ์ฆ ์ผ์ด์ค๋ก๋ถํฐ ๋์์ผ ํ ๊ธฐ๋๊ฐ๋ง ๋ฐฉ์ถํ๋ MockUseCase๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ค์ ๋ก ์ ๋ทฐ ๋ชจ๋ธ์์ ์คํ์ํค๋ ํ์ด๋จธ๋ฅผ ์คํ์ํค๋ Mock ๋ฉ์๋๋ ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์๋๋ ์ฌ๊ธฐ์ ์ค์ ํ์ด๋จธ๋ฅผ ์คํ์์ผ์ ํ๋กํผํฐ์ ๊ฐ์ ๊ณ์ ๋ฐฉ์ถํด์ผ ํ์ง๋ง, Mock ๊ฐ์ฒด๋ ํ ์คํธํ๊ณ ์ ํ๋ 10์ด, ๊ทธ๋ฆฌ๊ณ 49000์ด๋ฅผ ๋ฐฉ์ถํ๊ณ ์ข ๋ฃ๋ฉ๋๋ค.
๋ทฐ ๋ชจ๋ธ์ด ๊ตฌ๋ ํ๋ ๊ฐ์ 10, 49000์ด ๋ค์ด์ค๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ์์ฒญ์ผ๋ก ๊ณง๋ฐ๋ก 10์ด์ ๋ํ ํฌ๋งท ๋ณํ๊ณผ 49000์ ๋ํ ํฌ๋งท ๋ณํ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค.
Mock
MockUseCase์ฒ๋ผ ์๋ก ์์กด ๊ด๊ณ์ ์๋ ๋ ์ด์ด๋ค์ ๋ชจ๋ Mock๋ ์ด์ด๋ฅผ ์ ๊ณตํด์ ๊ธฐ๋๊ฐ์ ๋ฌด์กฐ๊ฑด ๋ฐฉ์ถํ๋๋ก ํ๊ณ ์ค์ ํ ์คํธํ๊ณ ์ ํ๋ ๋ ์ด์ด์ ์ง์คํ๋๋ก ํ ์คํธ๋ฅผ ์ค๊ณํ์ต๋๋ค.
์ด๋ ๊ฒ ๋ทฐ ๋ชจ๋ธ์ ๋ํ ํ ์คํธ๋ ๋ชจ๋ Mock ์ ์ฆ ์ผ์ด์ค๋ฅผ ์ ๊ณตํด์ Input๊ณผ output์๋ง ์ง์คํ๊ณ , ์ ์ฆ ์ผ์ด์ค์ ๋ํ ํ ์คํธ๋ Mock ๋ ํ์งํ ๋ฆฌ๋ฅผ ํตํด ์ค์ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํด ๋จ์ ํ ์คํธ๊ฐ ์ด๋ฃจ์ด์ง๋๋ก ํ ์ ์์์ต๋๋ค.
๊ทธ๋์ take(2) ์ ํ๋๊ณ ..
์๊น ์ฌ์ฉ ๋์ด๊ฐ๋ take(2)๋ ์ด์ ์ค๋ช ํ ์ ์๊ฒ ๋ค์!
์ด ํ์ด๋จธ ๋ฉ์๋๋ ํ ๋ฒ์ ์คํ๋ง์ผ๋ก 10, 49000์ ๋ชจ๋ ๋ฐฉ์ถํ๋๋ฐ์,
์ด ๋จ์ ํ ์คํธ์์ ํ์ธํ๊ณ ์ถ์๋ ๊ฒ์ MM:SS๋ก ์ ๋ฐ๋๋ ์ง์๊ณ , HH:MM:SS๋ ๋ณ๋๋ก ํ ์คํธํ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ ์ ์ฆ ์ผ์ด์ค์์ ๋ฐฉ์ถ๋๋ ์ด๊ธฐ๊ฐ, ๊ทธ๋ฆฌ๊ณ 10์ด์ ๋ํ ๊ฐ๋ง ์ทจํด์ ํ ์คํธํ๊ธฐ ์ํด take(2)๋ฅผ ์ฌ์ฉํ์ต๋๋ค..!
ํ ์คํธ ๊ฒฐ๊ณผ
์ผ์ฃผ์ผ ๋์ ํ์๋ค ๋ชจ๋ ์์ฒญ๋๊ฒ ํ์ ๋ธ ๋๋ถ์ 44๊ฐ ์ค 43๊ฐ์ ๋ํ ํ ์คํธ๋ฅผ ๋ชจ๋ ๋ง์ณค์ต๋๋ค.
๋ทฐ ๋ชจ๋ธ์ ์ด๋ ๊ฒ 90% ์ด์์ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ผ ์ ์๋๋ก ํ ์คํธ๋ฅผ ๊ตฌ์ฑํ๊ณ ,
์ ์ฆ ์ผ์ด์ค๋ ์ผ๋ถ ํ์ผ์ ์ ์ธํ๊ณ ๋ 90% ์ด์์ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ง๋ค์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ฒด ํ์ผ์ ๋ํด์๋
30%์ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ง๋ค๋ฉฐ ํ ์คํธ๋ฅผ ์ข ๋ฃํ์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
๋จ์ ํ ์คํธ๋ฅผ ์งํํ๋ค ๋ณด๋, ์ค์ ๋ก ํ์๊ฐ ์๋ ํจ์์ธ๋ฐ ๊ตฌํ์ด ๋์ด์๋ ๊ฒฝ์ฐ๋ ์๊ณ , ํ์ผ ์ค๊ณ๊ฐ ์๋ชป๋ ๊ฒฝ์ฐ๋ ๋ฐ๊ฒฌํ ์ ์์์ต๋๋ค. ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋์ด๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ฉด ๋ถ์์ ์ธ ํจ๊ณผ๋ก ์ข์ ํ์ง์ ์ฝ๋๊ฐ ๋ง๋ค์ด์ง๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ์ฒด ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋์ด๊ธฐ ์ํด ๋ ํ์งํ ๋ฆฌ ์์ญ๊น์ง ํ ์คํธ๋ฅผ ํด๋ณด๊ณ ์ถ์๋ฐ ์๊ฐ ์ ํ ์ ์์๋ ์ ์ด ์์ฝ๋ค์ใ
์ด๋ ๊ฒ Rx๊ฐ ๋ชจ๋ ์ฒ์์ธ ์ฐ๋ฆฌ ํ์ด ๋จ์ ํ ์คํธ๋ฅผ ๊ฒฝํํ ์ด์ผ๊ธฐ๋ฅผ ๊ณต์ ํด๋ณด์์ต๋๋ค. ํ ์คํธ ์ฝ๋๋ ํ๋ก์ ํธ์ ๋ํด ๋ ๊ถ๊ธํ์๋ค๋ฉด ๊นํ๋ธ์ ๋ฐฉ๋ฌธํด์ฃผ์ธ์! ๊ฐ์ฌํฉ๋๋ค!
'๐ ์์ด-์ค-์์ค > ๐ฑ iOS ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote