Deep Copy๋Š” ์™œ Deep Copy์ธ๊ฐ€?

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. Deep Copy์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ณด๋‹ค๊ฐ€์™œ ์ด๋ฆ„์ด Deep Copy์— ๋Œ€ํ•ด ์˜๋ฌธ์ด ์ƒ๊ฒจ์„œ ๊ธ€์„ ์ž‘์„ฑํ•ด ๋ด…๋‹ˆ๋‹ค. # Deep Copy ๋ช…์นญ์— ๋Œ€ํ•ด ์˜๋ฌธ์˜ ์ƒ๊ธด ๊ณ„๊ธฐ Deep Copy, Shallow Copy์— ๋Œ€ํ•ด ์ž๋ฃŒ๋ฅผ ์ฐพ๋‹ค๋ณด๋ฉด ๋งŽ์€ ์ž๋ฃŒ๋“ค์ด ์žˆ๊ณ , ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ •์˜ ์„ค๋ช…์„ ๋ณด๋ฉด Deep Copy : ๊ฐ’ ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•œ๋‹ค.Shallow Copy: ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค. ์˜ ํ˜•ํƒœ๋กœ ๋˜์–ด์žˆ๋‹ค. ์‹ค์ œ๋กœ ๋งž๋Š” ์„ค๋ช…์ด๊ธด ํ•˜์ง€๋งŒ ๊ทธ๋Ÿผ Deep Copy์˜ ์„ค๋ช…์— ๋”ฐ๋ผ ๊ฐ’์„ ์ „์ฒด ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— Deep๋ณด๋‹ค Whole, all ์ด๋Ÿฐ ๋‹จ์–ด๊ฐ€ ์—ฐ๊ด€์„ฑ ๋” ๋†’์ง€ ์•Š๊ฒ ๋‚˜ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์™œ Deep Copy์— Deep์ด ๋ถ™์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค...

[iOS/UIKit] App Lifecycle

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์•ฑ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ คํ•ฉ๋‹ˆ๋‹ค. App Life Cycle์ด๋ž€? life cycle์ด๋ž€ ์‚ฌ์ „์ •์˜๋กœ ์ƒ๋ช…์ฃผ๊ธฐ ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์œผ๋กœ ์น˜๋ฉด ํƒœ์–ด๋‚˜์„œ ์ฃฝ๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •์ธ๊ฑฐ์ฃ  ๊ทธ๋Ÿผ App Life Cycle์€ ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์ž…๋‹ˆ๋‹ค. ์•ฑ์„ ํด๋ฆญํ•ด์„œ ์•ฑ์ด ์‹คํ–‰ ๋˜๊ณ  ์™„์ „ํžˆ ์ข…๋ฃŒ๋˜๊ธฐ ๊นŒ์ง€์˜ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. App Based vs Scene Based life cycle ์„ค๋ช…ํ•˜๋‹ค ๋ง๊ณ  ๊ฐ‘์ž๊ธฐ ๋ฌด์Šจ ์ฃผ์ œ๋ƒ? ๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์œ„์˜ ์ƒํƒœ์— ๋”ฐ๋ผ์„œ ์ƒ๋ช…์ฃผ๊ธฐ์˜ ์ผ๋ถ€ ๊ณผ์ •๊ณผ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์˜ ๊ฐ์ฒด๊ฐ€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ž ์‹œ ์•Œ์•„๋ณด๊ณ  ๊ฐˆ๊ฒŒ์š”! iOS13์„ ๊ธฐ์ ์œผ๋กœ iOS ์•ฑ์— ๋ณ€ํ™”๊ฐ€ ์ฐพ์•„์˜ต๋‹ˆ๋‹ค.(ํ•ญ์ƒ ๋ณ€ํ™”๊ฐ€ ์ฐพ์•„์˜ต๋‹ˆ๋‹ค๋งŒ..ใ…Ž) iPadOS์™€ macOS๋ฅผ ํฌํ•จํ•˜์—ฌ iOS13 ์ดํ›„๋กœ ๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ๊ฐ€ ์ง€์›..

[Clean Architecture] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ํด๋ฆฐ์•„ํ‚คํ…์ฒ˜์—์„œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ณต๋ถ€ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. # ๊ฐ์ฒด ์ง€ํ–ฅ์„ ์–ด๋–ป๊ฒŒ ์„ค๋ช…ํ•ด์•ผ ํ• ๊นŒ? ๊ฐ์ฒด ์ง€ํ–ฅ์„ ์ œ๋Œ€๋กœ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์บก์Šํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ ๊ฐœ๋…์ด ํ•„์š”ํ•˜๋‹ค. # ์บก์Šํ™” ์บก์Šํ™”๋ž€ ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜๊ฐ€ ์‘์ง‘๋ ฅ์žˆ๊ฒŒ ๊ตฌ์„ฑ๋œ ์ง‘๋‹จ์„ ์„œ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ง‘๋‹จ์ด ๊ตฌ๋ถ„๋˜๋ฉด ์ง‘๋‹จ ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ”๊นฅ์œผ๋กœ ๋ถ€ํ„ฐ ์€๋‹‰๋˜๊ณ  ์ผ๋ถ€ ํ•จ์ˆ˜๋งŒ ๋…ธ์ถœ๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ”๊นฅ์—์„œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ํ•จ์ˆ˜ ๊ตฌํ˜„์„ ์™„์ „ํžˆ ๋ชจ๋ฅผ ๋•Œ ์™„์ „ํ•œ ์บก์Šํ™”๋‹ค. swift์—์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์•„๋Š” ์ ‘๊ทผ ์ œ์–ด์ž(private, public ๋“ฑ)๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ๋ฐ ๋ฐ์ดํ„ฐ๋“ค์€ private๋กœ ์„ ์–ธํ•˜์—ฌ ์ง‘๋‹จ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ  ์™ธ๋ถ€์—์„œ ๊ฐ’์„ ์›ํ• ๋•Œ๋Š” public์œผ๋กœ ์„ ์–ธ๋œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ..

[Clean Architecture] ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์•ˆ๋…•ํ•˜์„ธ์š”? ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํด๋ฆฐ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. # ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ƒ์„ฑ ๋ฐฐ๊ฒฝ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ˆ˜ํ•™์ ์œผ๋กœ ์ฆ๋ช…ํ•ด ๋ณด๋ ค๋Š” ๊ณผ์ •์—์„œ ์ƒ๊ฒจ๋‚ฌ๋‹ค. ์ฆ๋ช… ๊ณผ์ •(์ˆœ์ฐจ ๊ตฌ๋ฌธ-์—ด๊ฑฐ๋ฒ•, ๋ถ„๊ธฐ-์—ด๊ฑฐ๋ฒ•, ๋ฐ˜๋ณต-๊ท€๋‚ฉ๋ฒ•)์„ ํ†ตํ•ด ์œ ํด๋ฆฌ๋“œ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ–ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ goto๋ฌธ์ด ๋ชจ๋“ˆ ๋ถ„ํ•ด๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๋ถ„ํ•ดํ•˜๋Š” ๊ณผ์ •์— ๋ฐฉํ•ด๊ฐ€ ๋˜๋Š”์ ์„ ํŒŒ์•… goto๋ฌธ์— ๋Œ€ํ•œ ํ•ด๋กœ์›€์„ ๋‹ด์€ ๊ธ€์„ ์žก์ง€์— ์‹ค์—ˆ๋‹ค. # ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ๊ณ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์„ ๊ธฐ๋Šฅ์ ์œผ๋กœ ์ €์ˆ˜์ค€์˜ ๋ชจ๋“ˆ๋กœ, ์ €์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€์˜ ํ•จ์ˆ˜๋กœ ๋ถ„ํ•ดํ•˜๋Š”๋ฐ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๊ธฐ๋Šฅ๋‹จ์œ„๋กœ ๋ถ„ํ•ดํ•  ์ˆ˜ ์žˆ๊ณ , ์ด ๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ œํ•œ๋œ ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๋ถ„ํ•ด๋œ ๊ธฐ๋Šฅ์€ ์ฆ๋ช… ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. # ํ…Œ์ŠคํŠธ ํ…Œ์ŠคํŠธ..

[Clean Architecture] ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์•ˆ๋…•ํ•˜์„ธ์š” ๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด ๋ณด๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋ ›์ธ ๊ณ  # ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€? ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ ๊ธฐ๋ฐ˜์€ ๋žŒ๋‹ค ๊ณ„์‚ฐ๋ฒ•์œผ๋กœ ๋ฐœ๋ช…๋˜์—ˆ๋‹ค. ํฐ ํŠน์ง•์œผ๋กœ๋Š” ๊ฐ€๋ณ€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. (ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋„ ๋‹ค์Œ์— ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ณ  ๋ณด์ถฉํ•ด์•ผ๊ฒ ๋‹ค) # ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ฐ”๋ผ๋ณธ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์•„ํ‚คํ…์ฒ˜๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ€๋ณ€๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ ์„ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์„๊นŒ? ๊ฐ€๋ณ€ ๋ณ€์ˆ˜๋ฅผ ์“ฐ๋ฉด race condition, dead lock, concurrent update ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•„ํ‚คํ…์ฒ˜๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š”๋ฐ ์Šค๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ ์ƒํ™œ์—์„œ๋„ ์„ค๊ณ„ํ•œ ์‹œ์Šคํ…œ์ด ๊ฐ•๊ฑดํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ถˆ๋ณ€์„ฑ์ด ์‹คํ˜„..

[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
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
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
๊ธ€ ๋ณด๊ด€ํ•จ