๐ŸŽ iOS & Swift

[์˜ค์˜คํˆฌ๋‘ 3ํŽธ] ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ..

taeeekki 2022. 10. 4. 23:17

๋“ค์–ด๊ฐ€๋ฉฐ

์•ˆ๋…•ํ•˜์„ธ์š” 3ํŽธ์ด๋„ค์š”... ๊ธ€ ์“ฐ๋Š”๊ฒŒ ์„ธ์ƒ์—์„œ ์ œ์ผ ํž˜๋“  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (์—„์‚ด...ใ…Ž) ์ด๋ฒˆ ํŽธ์—์„œ๋Š” ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๊ณผ์ •๊ณผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๊ฒช์—ˆ๋˜ ์–ด๋ ค์›€ ๋˜๋Š” ๊ธฐ์ˆ ์ ์ธ ๊ณ ๋ฏผ์— ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ์ ์–ด๋ณผํ…๋ฐ์š”. ์–ด๋–ป๊ฒŒ ์ ์–ด์•ผ ํ• ๊นŒ์š”... ์ด๋ฒˆ ํŽธ์€ ๊ฐ€๋ณ๊ฒŒ ์ ์–ด๋†“๊ณ  ๊ณ ์ณ๊ฐ€๋Š” ์‹์œผ๋กœ ๋ฐฉํ–ฅ์„ ์žก์•„์•ผ๊ฒ ์–ด์š”..


ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋ฐ ๊ณต์ˆ˜ ์‚ฐ์ •

 

์ฒ˜์Œ์—๋Š” ๋…ธ์…˜์œผ๋กœ ๋Ÿฌํ”„ํ•˜๊ฒŒ iteration ์ฃผ๊ธฐ์— ๋”ฐ๋ฅธ ๊ฐœ๋ฐœ ๊ณต์ˆ˜ ์‚ฐ์ •์„ ์ง„ํ–‰ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด์Šˆ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋Š” ์ €์—๊ฒŒ๋Š” ๊นƒํ—ˆ๋ธŒ Project๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ ‘๊ทผ์„ฑ์ด ๋” ํŽธํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ํฐ ์–ด๋ ค์›€์„ ๋А๊ผˆ๋˜ ๋ถ€๋ถ„์ด ๊ฐœ๋ฐœ ๊ณต์ˆ˜ ์‚ฐ์ •์ด์—ˆ๊ณ , estimated time(์˜ˆ์ƒ ์‹œ๊ฐ„)์„ ์ •ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋ถ€๋ถ„๋“ค์„ ๊ณ ๋ คํ•˜๊ณ  ๊ณ ๋ฏผํ•ด๋ด์•ผํ• ์ง€ ์ƒ๊ฐ์„ ์ข€ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

 

1. ์‹œ๊ฐ„ ์‚ฐ์ •์„ ํ•  ๋•Œ ํ”ผ๋ณด๋‚˜์น˜ ๋ฃฐ์ด๋ž€ ๊ฒƒ์ด ์žˆ๋‹ค๊ณ  ํ•˜๋˜๋ฐ, ์Œ.. ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ํฌ๊ฒŒ ์™€๋‹ฟ์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.

2. ์‹œ๊ฐ„ ์‚ฐ์ •์„ ํ•  ๋•Œ ์ž‘๋™ํ•˜๊ฒŒ๋งŒ ์งœ๋Š” ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•  ์ง€, ์ฝ”๋“œ๋ฅผ ์ผ๋ถ€ ์ •๋ฆฌํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋Š” ๊ฐœ์„ ํ•˜๋Š” ์‹œ๊ฐ„๊นŒ์ง€๋กœ ๊ธฐ์ค€์„ ์žก์•„์•ผํ• ์ง€ ๊ณ ๋ฏผ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (์ด๊ฒƒ์€ ์‚ฌ์‹ค ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ๊ฒƒ ๊ฐ™์€๋ฐ, ์—ฌ์œ  ์‹œ๊ฐ„์€ ํ™•๋ณดํ•ด์„œ ์‹œ๊ฐ„ ์‚ฐ์ •์„ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™์•˜์–ด์š”.)

3. ์ด๊ฒƒ์€ ๊ณต์ˆ˜ ์‚ฐ์ •๊ณผ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉด์„œ๋„ ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๋‚ด์šฉ์ด๊ธฐ๋Š” ํ•œ๋ฐ ๋ฌด์—‡์„ ๋จผ์ € ์ž‘์—…ํ•ด์•ผํ• ์ง€์— ๋Œ€ํ•œ ๋ถ€๋ถ„๋„ ๊ณ ๋ฏผํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด๋ณด์—ฌ์š”. UI๋ฅผ ์งœ๋Š” ์ž‘์—…์„ ๋จผ์ € ์ญ‰ ํ•ด์•ผํ• ์ง€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ•˜๋ฉด์„œ ํ•˜๋‚˜์”ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ์™„์„ฑํ•ด๋‚˜๊ฐˆ์ง€๋„ ๊ณ ๋ฏผ์ด ํ•„์š”ํ•ด๋ณด์ž…๋‹ˆ๋‹ค. --- ์ด๋ฒˆ์—๋Š” ๋ ˆ์ด์•„์›ƒ์„ ๋จผ์ € ๋นจ๋ฆฌ ๋‹ค ์žก๊ณ  ๊ธฐ๋Šฅ์ ์ธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ํˆฌ์ž๋ฅผ ์ข€ ๋” ํ–ˆ์œผ๋ฉด ์–ด๋• ์„๊นŒ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์–ด์š”.

4. iteration์ด ๋๋‚ ๋•Œ๋งˆ๋‹ค ๋‚จ์€ ์ž‘์—…์„ ์žฌ์ •๋ฆฌํ•˜๊ณ  ๋‹ค์‹œ ์‚ฐ์ •ํ•˜๋Š” ์ž‘์—…์ด ๋งค์ˆœ๊ฐ„ ๊ผญ ๋“ค์–ด๊ฐ€์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด iteration์ด ์ข…๋ฃŒ๋ ๋•Œ๋งˆ๋‹ค ํ•„์š”ํ•œ ์ž‘์—…์ด ์ถ”๊ฐ€๋ ์ˆ˜๋„ ์‚ญ์ œ๋ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ์š”. ๊ทธ๋ฆฌ๊ณ  ์ƒ๊ฐ๋ณด๋‹ค ์ผ์ •์ด ๋ฐ€๋ ธ๋‹ค๋ฉด ์šฐ์„ ์ˆœ์œ„ ์—ญ์‹œ ์žฌ์ ๊ฒ€ํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด์š”.

5. ํฌ๊ฒŒ ๋А๊ผˆ๋˜ ๊ฑด ์˜ˆ์ƒ ์‹œ๊ฐ„์„ ์žก์•˜๋‹ค๋ฉด ํƒ€์ด๋จธ๋ฅผ ์ผœ๋‘๊ณ  ์ž‘์—…์„ ํ•  ํ•„์š”์„ฑ์„ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. ๋งˆ๋ƒฅ ์ž‘์—…๋งŒ ํ•˜๋‹ค๋ณด๋ฉด ์–ด๋А ์ •๋„์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋Š”์ง€๋„ ์ž˜ ๋ชจ๋ฅด๊ณ  ์ดํ›„ ํ”ผ๋“œ๋ฐฑ์— ๋ฐ˜์˜์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง‘์ค‘๋„๊ฐ€ ํ›„๋ฐ˜๋ถ€์—๋Š” ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์„ ์žก์•„์ฃผ๋Š” ์—ญํ• ๋„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”.

6. ๋ ˆ์ด๋ธ”์€ ready, in progress, done, backlog ์ •๋„๋ฉด ์ถฉ๋ถ„ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


์ด์Šˆ ๊ณต์œ 

์ƒˆ์‹น ์ค‘๊ฐ„ ๋ฐœํ‘œ์—์„œ ๊ณต์œ ํ–ˆ๋˜ ๋‚ด์šฉ๋„ ํฌํ•จ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

 

1. ์ด๋ฒคํŠธ ์ „๋‹ฌ ์ด์Šˆ ํ•ด๊ฒฐํ•˜๊ธฐ

- B(๋ฐ”ํ…€ ์‹œํŠธ)๋ฅผ presentํ•˜๊ณ  dismissํ–ˆ์„ ๋•Œ A์˜ ํ•ญ๋ชฉ์„ ๊ฐฑ์‹ ํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๋ฐœ์ƒํ•œ ์ด์Šˆ

- ํด๋กœ์ €๋ฅผ ํ†ตํ•œ ์ด๋ฒคํŠธ ์ „๋‹ฌ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ

 

2. CollectionView Dynamic Height ์ด์Šˆ

- CollectionView์˜ ๋†’์ด๋ฅผ Contents์˜ ํฌ๊ธฐ์— ๋งž์ถ”์–ด ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•˜๊ธฐ

- intrinsicContentSize ํ”„๋กœํผํ‹ฐ, invalidateIntrinsicContentSize ๋ฉ”์„œ๋“œ๋กœ ํ•ด๊ฒฐ

- Layout Draw Cycle์— ๋Œ€ํ•ด์„œ๋„ ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

3. ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

 

๋‹ค์Œ์˜ ํ™”๋ฉด์„ ์ € ๊ฐ™์€ ๊ฒฝ์šฐ์— ์ƒ‰์œผ๋กœ ๊ตฌ๋ถ„ํ•ด๋†“์€ ๊ฒƒ์ฒ˜๋Ÿผ ๊ณ„์ธต๊ณผ ์˜์—ญ์„ ๊ตฌ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜ ๋ทฐ ๋‚ด์˜ ์…€์˜ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ ํƒํ•˜๋ฉด ํŒŒ๋ž€์ƒ‰ ์˜์—ญ์˜ ํ—ค๋” ๋ทฐ์˜ ํˆฌ๋‘ ๋‹ฌ์„ฑ๋ฅ ์ด ๋ณ€ํ™”๋˜๋„๋ก ํ–ˆ์–ด์•ผ ํ–ˆ๊ณ , ๋‹ฌ๋ ฅ์˜ ๋‚ ์งœ๋ฅผ ํด๋ฆญํ•˜๋ฉด ํ•  ์ผ ๋ชฉ๋ก(ํˆฌ๋‘๋ฆฌ์ŠคํŠธ)์˜ ๋‚ด์šฉ์ด ๋ฐ”๋€Œ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋‹ฌ์„ฑ๋ฅ ์˜ ๋ณ€ํ™” ์ชฝ์€ ํŒŒ๋ž€์ƒ‰ ๋ทฐ์™€ ์ฃผํ™ฉ์ƒ‰ ๋ทฐ์˜ ๊ณ„์ธต์„ ๋™์ผํ•˜๊ฒŒ ๊ตฌ์„ฑํ–ˆ์œผ๋ฉด ๋ฐ์ดํ„ฐ๋‚˜ ์ด๋ฒคํŠธ ์ „๋‹ฌ์ด ๋” ํŽธํ–ˆ์„ ๊ฒƒ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์–ด์š”. ๋ฌด์ž‘์ • ๋ทฐ๋ฅผ ์ชผ๊ฐœ๋Š” ๊ฒƒ์ด ์ข‹์€ ์ž‘์—…์€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ๋‹ค์‹œ ๋А๋ผ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒดํฌ๋ฐ•์Šค ์„ ํƒ/ํ•ด์ œ ์ด๋ฒคํŠธ์— ๋”ฐ๋ฅธ ๋ณ€ํ™”๋ฅผ ํˆฌ๋‘ ๋‹ฌ์„ฑ๋ฅ  ํ‘œ์‹œ์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์€ RxSwift๋ฅผ ์ด์šฉํ•œ Binding์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.


3ํŽธ ๋งˆ๋ฌด๋ฆฌ

3ํŽธ์€ ์ข€ ์งง์Šต๋‹ˆ๋‹ค.. ์‚ฌ์‹ค ๊ธ€ ์“ฐ๋А๋ผ ์ข€ ์ง€์ณค์–ด์š” ใ…‹ใ…‹ใ…‹ ์ž์ž˜ํ•œ ์ด์Šˆ๋„ ๋” ์žˆ๊ณ  ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๋„ ํ–ˆ์—ˆ๋Š”๋ฐ ์ด ๋ถ€๋ถ„์€ ์ดํ›„์— ์ถ”๊ฐ€ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 4ํŽธ์—์„œ๋Š” ์ถœ์‹œ ํ›„๊ธฐ ๋ฐ ํšŒ๊ณ ์— ๋Œ€ํ•œ ๋‚ด์šฉ์œผ๋กœ ์ฐพ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :-)