[iOS/Swift]Test Code๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž - Network test๋ฅผ ์œ„ํ•œ mock

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. test code์—์„œ F.I.R.S.T ์›์น™์ค‘์— ํ•˜๋‚˜๋Š” Independent - ํ…Œ์ŠคํŠธ๋Š” ๋…๋ฆฝ์ ์ด์—ฌ์•ผ ํ•˜๋ฉฐ ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ์‹ค์ œ๋กœ ๋งŽ์ด ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” network๋ฅผ ํ†ตํ•ด request๋ฅผ ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ response๋ฅผ ๋ฐ›๋„๋ก ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ networkํ†ต์‹ ์€ ์™ธ๋ถ€์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜๊ฒŒ ๋˜์–ด ํ…Œ์ŠคํŠธ ์‹œ ๋ถ„๋ฆฌํ•˜์—ฌ์•ผ ํ•˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. test code์—์„œ ์‹ค์ œ๋กœ network ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์‹ค์ œ๋กœ ํ˜ธ์ถœ๋˜๋‹ค ๋ณด๋‹ˆ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜์–ด ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๊ณ , ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ• ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์ž˜๋ชป๋œ request๋กœ ์„œ๋ฒ„์— ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ test code์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ , ๊ธฐ๋Šฅ ์ฝ”๋“œ์—..

iOS/Swift 2023. 10. 26. 00:48
[iOS/Swift] TestCode๋ฅผ ์ž‘์„ฑํ•ด ๋ณด์ž - Test Doubles(Mock, Stub, Fake, dummy)

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ Stub, Mock ๋“ฑ ์ด๋Ÿฐ ๋‹จ์–ด๋“ค์„ ์ž์ฃผ ๋ณด์…จ์„ ํ…๋ฐ์š”. ๊ทธ๋ƒฅ ๋”๋ฏธ ๋ฐ์ดํ„ฐ์ธ๊ฐ€? ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๊ณ  ๋„˜์–ด๊ฐˆ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์šฉ์–ด ์ •๋ฆฌ๋ฅผ ํ•˜๊ณ  ๊ณต๋ถ€ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค Test Double์ด๋ž€? test double์€ ๋ฌด์—‡์ผ๊นŒ? ํ…Œ์ŠคํŠธ๋ฅผ ๋‘๋ฒˆ ํ•œ๋‹ค๋Š” ๋œป์ผ๊นŒ? ์ด ๋œป์„ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ์ž ์‹œ ์ฃผ์ œ๋ฅผ ์˜ํ™”๋กœ ์˜ฎ๊ฒจ๋ณผ๊ฒŒ์š”. ์˜ํ™” ์ดฌ์˜์žฅ์—์„œ stunt double์ด๋ผ๋Š” ์šฉ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. stunt double์€ stunt man๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋ฐฐ์šฐ์™€ ๋น„์Šทํ•œ ์ฒด๊ฒฉ, ์™ธ๋ชจ, ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด์„œ ์œ„ํ—˜ํ•œ ์”ฌ์„ ๋Œ€์‹  ์ดฌ์˜ํ•˜๋Š” ์‚ฌ๋žŒ์„ ๋งํ•˜๋Š”๋ฐ์š”. ๊ทธ๋ ‡๋‹ค๋ฉด test double์€ ์‹ค์ œ๋กœ ์žˆ๋Š” ์ฝ”๋“œ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ์™€ ๋น„์Šทํ•œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ๋•๋Š” ..

iOS/Swift 2023. 10. 20. 00:20
[iOS/Swift] Test Code๋ฅผ ์ž‘์„ฑํ•ด ๋ณด์ž - Unit Test

Unit Test๋ž€ unit test๋ž€ ๋ฌด์—‡์„๊นŒ์š”? ์œ„ํ‚ค๋ฐฑ๊ณผ๋ฅผ ํ†ตํ•ด ์ฐพ์•„๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ๋‹› ํ…Œ์ŠคํŠธ(unit test)๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์†Œ์Šค ์ฝ”๋“œ์˜ ํŠน์ • ๋ชจ๋“ˆ์ด ์˜๋„๋œ ๋Œ€๋กœ ์ •ํ™•ํžˆ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ์ ˆ์ฐจ๋‹ค. ์ฆ‰, ๋ชจ๋“  ํ•จ์ˆ˜์™€ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๋งํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ์–ธ์ œ๋ผ๋„ ์ฝ”๋“œ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ๋‹จ์‹œ๊ฐ„ ๋‚ด์— ์ด๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ๋ฐ”๋กœ ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ์ด์ƒ์ ์œผ๋กœ, ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์„œ๋กœ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๊ฐ€์งœ ๊ฐ์ฒด(Mock object)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค. ์œ ๋‹› ํ…Œ์ŠคํŠธ๋Š” (์ผ๋ฐ˜์ ์ธ ํ…Œ์ŠคํŠธ์™€ ๋‹ฌ๋ฆฌ) ๊ฐœ๋ฐœ์ž(developer) ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ณด๋‹ค ๋” ์‹ฌ๋„์žˆ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ…Œ์Šคํ„ฐ(tester)์— ์˜ํ•ด ์ˆ˜ํ–‰๋˜๊ธฐ๋„ ํ•œ..

iOS/Swift 2023. 10. 15. 17:53
[iOS/Swift] Test Code๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž - TDD๋ž€?

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์š”์ฆ˜ ํ…Œ์ŠคํŠธ๋ผ๋Š” ์ฃผ์ œ์— ๋น ์ ธ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐํš์•ˆ์„ ๋ฐ›๊ณ  ์ฒ˜์Œ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ๋Š” ๋ชจ๋“  ์ผ€์ด์Šค์— ๋Œ€ํ•ด ๊ณ ๋ คํ•˜๋ฉด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ํ•˜์ง€๋งŒ ๊ธ‰ํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ž‘์—…ํ•œ์ง€ ์˜ค๋ž˜๋œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋‹ค ๋ณด๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•˜๊ฒŒ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ๋‚˜๊ธฐ ๋งˆ๋ จ์ž…๋‹ˆ๋‹ค. ์š”์ฆ˜ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ• ๊นŒ ๊ณ ๋ฏผํ•˜๋˜ ์ค‘ ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ณ  ์ถ”ํ›„ ์ˆ˜์ •ํ•˜๋”๋ผ๋„ ์ด๋Ÿฐ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์žก์•„๋‚ด๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๊ฒ ๋‹ค ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ๋ฐ€๋ ค๋‚˜ ์žˆ๋˜ Test Code์— ๋Œ€ํ•ด ๊ด€์‹ฌ์ด ์ƒ๊ฒผ๊ณ  TDD์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. TDD(Test - Driven Development) ๋ž€? TDD๋ž€ Test-Driven-Development, ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์ž…๋‹ˆ๋‹ค. ๋งค์šฐ ์งง์€ ๊ฐœ๋ฐœ ์‚ฌ์ดํด์„ ๋ฐ˜๋ณตํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜..

iOS/Swift 2023. 10. 11. 00:28
[iOS/Swift] Alamofire ์•Œ์•„๋ณด๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. swift์—์„œ network๋ถ€๋ถ„์„ ๊ณ„์† ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” Alamofire๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. alamofire๋Š” urlsession๊ธฐ๋ฐ˜์œผ๋กœ ๋˜์–ด ์žˆ๋Š”๋ฐ urlsession์„ ๋ชจ๋ฅด์‹œ๋Š” ๋ถ„์€ ์—ฌ๊ธฐ ๋ฅผ ๋ณด๊ณ  ์™€์ฃผ์„ธ์š”!! Alamofire๋ž€? Alamofire is an HTTP networking library written in Swift. ๊ณต์‹๋ฌธ์„œ์—๋Š” "swift๋กœ ์ž‘์„ฑ๋œ http ๋„คํŠธ์›Œํ‚น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ" ๋ผ๊ณ  ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋„คํŠธ์›Œํ‚น ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. alamofire๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋‹ค๋ณด๋‹ˆ ๋งŽ์€ ๊ณณ์—์„œ alamofire๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ง๋งŒํ•˜๋ฉด ์ž…์ด ์•„ํ”„๋‹ˆ ๋ฐ”๋กœ ์‚ฌ์šฉํ•ด๋ณด์ฃ . Ala..

iOS/Swift 2023. 7. 23. 22:32
[iOS/Swift] URLSession ์•Œ์•„๋ณด๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. URLSession์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ ์ ‘ํ•˜์‹œ๋Š” ๋ถ„์ด๋ผ๋ฉด URL Loading System ์„ ๋จผ์ € ์ฝ๊ณ  ์™€์ฃผ์„ธ์š”! ๋ชจ๋“  ๋‚ด์šฉ์€ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. URLSession์€ ๋ฌด์—‡์ธ๊ฐ€ URLSession์€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์• ํ”Œ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ API์ž…๋‹ˆ๋‹ค. ์ž์ฃผ ๋“ค์–ด๋ณด์…จ๋˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Alamofire๋‚˜ Moya๋˜ํ•œ URLSession์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. URLSession์„ ํ†ตํ•ด data๋ฅผ ์—…๋กœ๋“œ ํ•˜๊ฑฐ๋‚˜ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”! URLSession์„ ๊ฐ„๋‹จํžˆ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด(shared)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ shared๊ฐ์ฒด๋Š” configuration๊ฐ€ ์—†์–ด์„œ ์„ธ๋ถ€์ ์ธ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. configurat..

iOS/Swift 2023. 6. 4. 19:42
[iOS/Swift] URL Loading System ์•Œ์•„๋ณด๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. api ํ˜ธ์ถœ ์‹œ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์งš์–ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ ์‹œ์ž‘์ธ url loading system์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋… URL loading system์€ ํ‘œ์ค€ ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด์„œ url๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ณ  ์„œ๋ฒ„์™€ ์†Œํ†ตํ•ฉ๋‹ˆ๋‹ค. - http๋‚˜ ์ปค์Šคํ…€๋œ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ url๋กœ ์‹๋ณ„๋˜๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์—‘์„ธ์Šค๋ฅผ ์ œ๊ณต - ๋น„๋™๊ธฐ๋กœ ์ˆ˜ํ–‰๋˜๊ณ  ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ์Œ ํ๋ฆ„ - ํŒŒ์ผ์€ ๋‹ค์šด๋กœ๋“œ, ์—…๋กœ๋“œ ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„๋•Œ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ URLSessionTask ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•จ - URLSessionTask๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” URLSession์„ ์‚ฌ์šฉํ•ด์•ผํ•จ - ๊ตฌ์กฐ : URLSession > U..

iOS/Swift 2023. 5. 29. 12:33
[iOS/Swift] ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - DispatchGroup์˜ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ๋ฒ•

์•ˆ๋…•ํ•˜์„ธ์š” ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค!! DispatchGroup์„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค DispathQueue ํด๋กœ์ € ์•ˆ์— ๋น„๋™๊ธฐ ์ž‘์—…์ด ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?? ์ง€๊ธˆ๊นŒ์ง€ ๊ณต๋ถ€ํ•ด์˜จ ๋‚ด์šฉ์„ ๋ณด๋ฉด DispatchQueue์˜ ํด๋กœ์ € ์•ˆ์—๋Š” ํ•˜๋‚˜์˜ task๋ฅผ ํ• ๋‹นํ•ด ์™”๊ณ , ๊ทธ task๋“ค์€ ๋ชจ๋‘ ๋™๊ธฐ์ ์ธ ์ž‘์—…์ด์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ๋ณด์ž๋ฉด task๋“ค์€ ๋™๊ธฐ ์ž‘์—…์ธ print๋ฌธ์œผ๋กœ ์ฐจ์žˆ์—ˆ๋˜ ์ƒํ™ฉ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด์˜€์ฃ ! ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ task์ค‘์— ๋น„๋™๊ธฐ ์ž‘์—…์ด ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๋ฐ”๋กœ ์ด๋ ‡๊ฒŒ task2์˜ ๋น„๋™๊ธฐ ์ž‘์—…์ด ์ž‘์—…์ค‘์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  task2 ์ž‘์—…์ด ๋๋‚ฌ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  ์ข…๋ฃŒ์‹œ์ผœ๋ฒ„๋ฆฌ๋Š”๊ฑฐ์ฃ  task2์˜ ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋๋‚œ ์‹œ์ ์„ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐ”๋กœ enter()์™€ leave()ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐ..

iOS/Swift 2023. 1. 29. 16:56
[iOS/Swift] ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - Dispatch Group

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ Dispatch Group์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค Dispatch Group ์ด๋ž€? dispatch group์€ ๋ฌด์—‡์„๊นŒ์š”? dispatch๋ฅผ ๋ฌถ์–ด๋†“์€๊ฑธ๊นŒ์š”? ์–ผ์ถ” ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹๋ฌธ์„œ๋กœ ๊ฐœ๋…์„ ์‚ดํŽด๋ณผ๊ฒŒ์š” - ์—ฌ๋Ÿฌ task๋ฅผ ํ•˜๋‚˜์˜ ์œ ๋‹›์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฃน์ž…๋‹ˆ๋‹ค. - item(=task)๋“ค์„ ๋ฌถ๊ณ  ๋™๊ธฐ์ ์ธ ๋™๊ธฐ์ ์œผ๋กœ ํ–‰๋™ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค - ์—ฌ๋Ÿฌ item์„ ๋ฌถ๊ณ , ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฐ™์€ ํ๋‚˜ ๋‹ค๋ฅธ ํ์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚จ๋‹ค. - item๋“ค์˜ ์ž‘์—…์ด ๋๋‚˜๋ฉด ์ปดํ”„๋ฆฌ์…˜ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ๋˜ํ•œ ์ž‘์—…์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๋™๊ธฐ์ ์œผ๋กœ ๋ฉˆ์ถœ ์ˆ˜ ์žˆ๋‹ค. task๋ฅผ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ์นœ๊ตฌ์ž…๋‹ˆ๋‹คใ…Žใ…Ž ๊ทธ๋ฆผ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณผ๊ฒŒ์š”! task1,2,3์ด group1์— ๋ฌถ์—ฌ..

iOS/Swift 2023. 1. 11. 23:36
[iOS/Swift] ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - GCD์˜ ์ฃผ์˜์‚ฌํ•ญ

์˜ค๋Š˜์€ 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์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค! ๊ทธ๋ž˜..

iOS/Swift 2023. 1. 8. 00:10
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2024/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ