์๋ ํ์ธ์? ๋๊ตฌ๋ฆฌ์ ๋๋ค. test code์์ F.I.R.S.T ์์น์ค์ ํ๋๋ Independent - ํ ์คํธ๋ ๋ ๋ฆฝ์ ์ด์ฌ์ผ ํ๋ฉฐ ์์กดํ์ง ์์์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ํด ์ค์ ๋ก ๋ง์ด ์์ฑํ๋ ์ฝ๋๋ network๋ฅผ ํตํด request๋ฅผ ํ๊ณ ๊ทธ์ ๋ฐ๋ฅธ response๋ฅผ ๋ฐ๋๋ก ์์ฑํ ์ฝ๋์ ๋๋ค. ์ฌ๊ธฐ์ networkํต์ ์ ์ธ๋ถ์ ์์ญ์ผ๋ก ๋๋๊ฒ ๋์ด ํ ์คํธ ์ ๋ถ๋ฆฌํ์ฌ์ผ ํ๋ ์์ญ์ ๋๋ค. test code์์ ์ค์ ๋ก network ํต์ ์ ํ๊ฒ ๋๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ค์ ๋ก ํธ์ถ๋๋ค ๋ณด๋ ์๊ฐ์ด ์์๋์ด ํ ์คํธ ์คํ ์๊ฐ์ด ๊ธธ์ด์ง๊ณ , ํ ์คํธ๊ฐ ์คํจํ ์๋ ์์ผ๋ฉฐ, ์๋ชป๋ request๋ก ์๋ฒ์ ์ ํจํ์ง ์์ ๋ฐ์ดํฐ๊ฐ ์์ผ ์ ์์ต๋๋ค. ๊ทธ๋์ test code์์ ๋ถ๋ฆฌํ๊ณ , ๊ธฐ๋ฅ ์ฝ๋์..
์๋ ํ์ธ์? ๋๊ตฌ๋ฆฌ ์ ๋๋ค. ํ ์คํธ ์ฝ๋์์ Stub, Mock ๋ฑ ์ด๋ฐ ๋จ์ด๋ค์ ์์ฃผ ๋ณด์ จ์ ํ ๋ฐ์. ๊ทธ๋ฅ ๋๋ฏธ ๋ฐ์ดํฐ์ธ๊ฐ? ์ด๋ ๊ฒ ์๊ฐํ๊ณ ๋์ด๊ฐ์๋ ์์ง๋ง ์ฉ์ด ์ ๋ฆฌ๋ฅผ ํ๊ณ ๊ณต๋ถํ๊ณ ์ ํฉ๋๋ค Test Double์ด๋? test double์ ๋ฌด์์ผ๊น? ํ ์คํธ๋ฅผ ๋๋ฒ ํ๋ค๋ ๋ป์ผ๊น? ์ด ๋ป์ ์์๋ณด๊ธฐ ์ํด ์ ์ ์ฃผ์ ๋ฅผ ์ํ๋ก ์ฎ๊ฒจ๋ณผ๊ฒ์. ์ํ ์ดฌ์์ฅ์์ stunt double์ด๋ผ๋ ์ฉ์ด๊ฐ ์์ต๋๋ค. stunt double์ stunt man๊ณผ ๋น์ทํ๊ฒ ๋ฐฐ์ฐ์ ๋น์ทํ ์ฒด๊ฒฉ, ์ธ๋ชจ, ํน์ง์ ๊ฐ์ง๊ณ ์์ผ๋ฉด์ ์ํํ ์ฌ์ ๋์ ์ดฌ์ํ๋ ์ฌ๋์ ๋งํ๋๋ฐ์. ๊ทธ๋ ๋ค๋ฉด test double์ ์ค์ ๋ก ์๋ ์ฝ๋๋ก ํ ์คํธ๋ฅผ ํ๋๊ฒ ์๋๋ผ ์ค์ ๋ก ๋์ํ๋ ์ฝ๋์ ๋น์ทํ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด์ ํ ์คํธ๋ฅผ ์งํํ๋๋ก ๋๋ ..
Unit Test๋ unit test๋ ๋ฌด์์๊น์? ์ํค๋ฐฑ๊ณผ๋ฅผ ํตํด ์ฐพ์๋ณด๋ฉด ์ด๋ ๊ฒ ์ค๋ช ํ๊ณ ์์ต๋๋ค. ์ ๋ ํ ์คํธ(unit test)๋ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์์ ์์ค ์ฝ๋์ ํน์ ๋ชจ๋์ด ์๋๋ ๋๋ก ์ ํํ ์๋ํ๋์ง ๊ฒ์ฆํ๋ ์ ์ฐจ๋ค. ์ฆ, ๋ชจ๋ ํจ์์ ๋ฉ์๋์ ๋ํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ ์ ์ฐจ๋ฅผ ๋งํ๋ค. ์ด๋ฅผ ํตํด์ ์ธ์ ๋ผ๋ ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ๋จ์๊ฐ ๋ด์ ์ด๋ฅผ ํ์ ํ๊ณ ๋ฐ๋ก ์ก์ ์ ์๋๋ก ํด์ค๋ค. ์ด์์ ์ผ๋ก, ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ์๋ก ๋ถ๋ฆฌ๋์ด์ผ ํ๋ค. ์ด๋ฅผ ์ํด ๊ฐ์ง ๊ฐ์ฒด(Mock object)๋ฅผ ์์ฑํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค. ์ ๋ ํ ์คํธ๋ (์ผ๋ฐ์ ์ธ ํ ์คํธ์ ๋ฌ๋ฆฌ) ๊ฐ๋ฐ์(developer) ๋ฟ๋ง ์๋๋ผ ๋ณด๋ค ๋ ์ฌ๋์๋ ํ ์คํธ๋ฅผ ์ํด ํ ์คํฐ(tester)์ ์ํด ์ํ๋๊ธฐ๋ ํ..
์๋ ํ์ธ์? ๋๊ตฌ๋ฆฌ์ ๋๋ค. ์์ฆ ํ ์คํธ๋ผ๋ ์ฃผ์ ์ ๋น ์ ธ์์ต๋๋ค. ๊ธฐํ์์ ๋ฐ๊ณ ์ฒ์ ๊ฐ๋ฐ์ ํ ๋๋ ๋ชจ๋ ์ผ์ด์ค์ ๋ํด ๊ณ ๋ คํ๋ฉด ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ํ์ง๋ง ๊ธํ๊ฒ ์์ ํ๊ฑฐ๋ ์์ ํ์ง ์ค๋๋ ์ฝ๋๋ฅผ ์์ ํ๋ค ๋ณด๋ฉด ์์์น ๋ชปํ๊ฒ ์ฌ์ด๋ ์ดํํธ๊ฐ ๋๊ธฐ ๋ง๋ จ์ ๋๋ค. ์์ฆ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์์ฑํด์ผ ํ ๊น ๊ณ ๋ฏผํ๋ ์ค ์ค๋ฅ๋ฅผ ์ค์ด๊ณ ์ถํ ์์ ํ๋๋ผ๋ ์ด๋ฐ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ก์๋ด๋ ์ฝ๋๋ฅผ ์์ฑํด๊ฒ ๋ค ์๊ฐ์ด ๋ค์์ต๋๋ค. ๊ทธ๋์ ๊ธฐ๋ฅ ๊ตฌํ์ ๋ฐ๋ ค๋ ์๋ Test Code์ ๋ํด ๊ด์ฌ์ด ์๊ฒผ๊ณ TDD์ ๋ํด ๊ณต๋ถํด๋ณด๊ณ ์ ํฉ๋๋ค. TDD(Test - Driven Development) ๋? TDD๋ Test-Driven-Development, ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ๋๋ค. ๋งค์ฐ ์งง์ ๊ฐ๋ฐ ์ฌ์ดํด์ ๋ฐ๋ณตํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค ์ค ํ๋..
์๋ ํ์ธ์? ๋๊ตฌ๋ฆฌ์ ๋๋ค. swift์์ network๋ถ๋ถ์ ๊ณ์ ๋ค๋ฃจ๊ณ ์๋๋ฐ ์ด๋ฒ์๋ Alamofire๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค. alamofire๋ urlsession๊ธฐ๋ฐ์ผ๋ก ๋์ด ์๋๋ฐ urlsession์ ๋ชจ๋ฅด์๋ ๋ถ์ ์ฌ๊ธฐ ๋ฅผ ๋ณด๊ณ ์์ฃผ์ธ์!! Alamofire๋? Alamofire is an HTTP networking library written in Swift. ๊ณต์๋ฌธ์์๋ "swift๋ก ์์ฑ๋ http ๋คํธ์ํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ" ๋ผ๊ณ ๋์ด ์์ต๋๋ค. ์ฆ, ๋คํธ์ํน ์์ ์ ์ฝ๊ฒ ์์ ํ ์ ์๋๋ก ๋์์ค๋๋ค. alamofire๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์์ต๋๋ค. ์ด๋ฌํ ํน์ง์ ๊ฐ์ง๊ณ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค๋ณด๋ ๋ง์ ๊ณณ์์ alamofire๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ง๋งํ๋ฉด ์ ์ด ์ํ๋ ๋ฐ๋ก ์ฌ์ฉํด๋ณด์ฃ . Ala..
์๋ ํ์ธ์? ๋๊ตฌ๋ฆฌ์ ๋๋ค. URLSession์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฒ์ ์ ํ์๋ ๋ถ์ด๋ผ๋ฉด URL Loading System ์ ๋จผ์ ์ฝ๊ณ ์์ฃผ์ธ์! ๋ชจ๋ ๋ด์ฉ์ ๊ณต์๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. URLSession์ ๋ฌด์์ธ๊ฐ URLSession์ ๋คํธ์ํฌ ํต์ ์ ํ ์ ์๋๋ก ์ ํ์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ API์ ๋๋ค. ์์ฃผ ๋ค์ด๋ณด์ จ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, Alamofire๋ Moya๋ํ URLSession์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. URLSession์ ํตํด data๋ฅผ ์ ๋ก๋ ํ๊ฑฐ๋ ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์์ด์! URLSession์ ๊ฐ๋จํ ์ฌ์ฉํ ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค ๊ฐ์ฒด(shared)๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง shared๊ฐ์ฒด๋ configuration๊ฐ ์์ด์ ์ธ๋ถ์ ์ธ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค. configurat..
์๋ ํ์ธ์? ๋๊ตฌ๋ฆฌ์ ๋๋ค. api ํธ์ถ ์ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๊ตํ๊ธฐ ์ํด์ ์ฒ์๋ถํฐ ๋ค์ ์ง์ด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋์ ๊ทธ ์์์ธ url loading system์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ๊ฐ๋ URL loading system์ ํ์ค ์ธํฐ๋ท ํ๋กํ ์ฝ์ ์ฌ์ฉํด์ url๊ณผ ์ํธ์์ฉํ๊ณ ์๋ฒ์ ์ํตํฉ๋๋ค. - http๋ ์ปค์คํ ๋ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ url๋ก ์๋ณ๋๋ ๋ฆฌ์์ค์ ๋ํ ์์ธ์ค๋ฅผ ์ ๊ณต - ๋น๋๊ธฐ๋ก ์ํ๋๊ณ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ ์ค๋ฅ๊ฐ ๋ค์ด์ค๋ฉด ์ฒ๋ฆฌ ํ ์ ์์ ํ๋ฆ - ํ์ผ์ ๋ค์ด๋ก๋, ์ ๋ก๋ ํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์๋๋ ํ๋ ์ด์์ URLSessionTask ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผํจ - URLSessionTask๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ URLSession์ ์ฌ์ฉํด์ผํจ - ๊ตฌ์กฐ : URLSession > U..
์๋ ํ์ธ์ ๋๊ตฌ๋ฆฌ์ ๋๋ค!! DispatchGroup์ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๋ ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค DispathQueue ํด๋ก์ ์์ ๋น๋๊ธฐ ์์ ์ด ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?? ์ง๊ธ๊น์ง ๊ณต๋ถํด์จ ๋ด์ฉ์ ๋ณด๋ฉด DispatchQueue์ ํด๋ก์ ์์๋ ํ๋์ task๋ฅผ ํ ๋นํด ์๊ณ , ๊ทธ task๋ค์ ๋ชจ๋ ๋๊ธฐ์ ์ธ ์์ ์ด์์ต๋๋ค. ๊ทธ๋ฆผ์ผ๋ก ์์๋ฅผ ๋ค์ด ๋ณด์๋ฉด task๋ค์ ๋๊ธฐ ์์ ์ธ print๋ฌธ์ผ๋ก ์ฐจ์์๋ ์ํฉ๊ณผ ๊ฐ์ ๊ฒ์ด์์ฃ ! ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ task์ค์ ๋น๋๊ธฐ ์์ ์ด ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๋ฐ๋ก ์ด๋ ๊ฒ task2์ ๋น๋๊ธฐ ์์ ์ด ์์ ์ค์์๋ ๋ถ๊ตฌํ๊ณ task2 ์์ ์ด ๋๋ฌ๋ค๊ณ ํ๋จํ๊ณ ์ข ๋ฃ์์ผ๋ฒ๋ฆฌ๋๊ฑฐ์ฃ task2์ ๋น๋๊ธฐ ์์ ์ด ๋๋ ์์ ์ ์๊ณ ์ถ๋ค๋ฉด ๋ฐ๋ก enter()์ leave()ํจ์๋ฅผ ํตํด ํด๊ฒฐ..
์๋ ํ์ธ์? ๋๊ตฌ๋ฆฌ์ ๋๋ค. ์ค๋์ Dispatch Group์ ๋ํด ์ ๋ฆฌํด ๋ณด๋ ค ํฉ๋๋ค Dispatch Group ์ด๋? dispatch group์ ๋ฌด์์๊น์? dispatch๋ฅผ ๋ฌถ์ด๋์๊ฑธ๊น์? ์ผ์ถ ๋น์ทํฉ๋๋ค. ๊ณต์๋ฌธ์๋ก ๊ฐ๋ ์ ์ดํด๋ณผ๊ฒ์ - ์ฌ๋ฌ task๋ฅผ ํ๋์ ์ ๋์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ๊ทธ๋ฃน์ ๋๋ค. - item(=task)๋ค์ ๋ฌถ๊ณ ๋๊ธฐ์ ์ธ ๋๊ธฐ์ ์ผ๋ก ํ๋ํ๊ฒ ํ ์ ์๋ค - ์ฌ๋ฌ item์ ๋ฌถ๊ณ , ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ํ๋ ๋ค๋ฅธ ํ์์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ์ํจ๋ค. - item๋ค์ ์์ ์ด ๋๋๋ฉด ์ปดํ๋ฆฌ์ ํธ๋ค๋ฌ๋ฅผ ์คํ์ํจ๋ค. ๋ํ ์์ ์ด ๋๋ ๋๊น์ง ๋๊ธฐ์ ์ผ๋ก ๋ฉ์ถ ์ ์๋ค. task๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ ๊ด๋ฆฌํ๋ ์น๊ตฌ์ ๋๋คใ ใ ๊ทธ๋ฆผ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํด ๋ณผ๊ฒ์! task1,2,3์ด group1์ ๋ฌถ์ฌ..
์ค๋์ GCD๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ฃผ์ํด์ผํ ์ฌํญ๋ค์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค~~ ์์ํ๊ธฐ ์ ์ ์ฐธ๊ณ ์ฌํญ์ด ์๋๋ฐ์ ๋ฐ๋์ main queue์์ ์ฒ๋ฆฌํด์ผ ํ๋ ์์ ์ฌ๋ฌ๋ถ๋ ์ ์๋ ์ด์ผ๊ธฐ๋ผ๊ณ ์๊ฐ์ด ๋๋๋ฐ์! UI์์ ์ main queue์์ ์์ ํด์ผ ํ๋ค๋ ์ฌ์ค์ ๋๋ค!! ์ฝ๋๋ก ๋ฐ๋ก ํ์ธํด๋ณผ๊ฒ์! DispatchQueue.global().async { // image ๋ค์ด๋ก๋ task DispatchQueue.main.async { // UI ๊ด๋ จ ์์ ์ main ์ค๋ ๋๋ก ๋ณด๋ธ๋ค self.imageView.image = image } } ์ด๋ฐ ํํ๊ฐ ๋ ๊ฒ์ ๋๋ค! ํ๋ก์ฐ๋ฅผ ๋ณด๋ฉด image ๋ค์ด๋ก๋ task๋ฅผ ์ํํ๋ฉด ์๋์ผ๋ก main thread๊ฐ ์๋ ๋ค๋ฅธ thread์์ ์์ ์ ์ํํ๊ฒ ๋ฉ๋๋ค! ๊ทธ๋..
- Total
- Today
- Yesterday
- swift
- func
- ๊ณต๋ถ
- Unit Test
- swift ๊ณต๋ถ
- observable
- XCTest
- Clean
- Subscribe
- ์ค์ํํธ ๊ณต๋ถ
- RX
- RxSwift
- ์คํ ๋ ์ด์์
- URLSession
- ์ค์ํํธ ํ๋กํ ์ฝ
- network
- ios
- ์ค์ํํธ
- Swift Network
- swift ํ๋กํ ์ฝ
- Protocol
- ํ ์คํธ
- test
- ํ๋กํ ์ฝ
- ์ค์ํํธ map
- autolayout
- Property
- swift urlsession
- ํ๋กํผํฐ
- set
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |