์ „์ฒด ๊ธ€

๐Ÿ”Ž  1 . TypeAliases (ํƒ€์ž… ๋ณ„์นญ) TypeAliases๋Š” ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํƒ€์ž…(ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•, ํ•จ์ˆ˜, ํŠœํ”Œ ๋“ฑ)์„ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ •์˜ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ํŠน์ • ํƒ€์ž…์˜ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.typealias ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•œ๋‹ค.    ๐Ÿ”Ž  2. ๊ธฐ๋ณธ ๋ฌธ๋ฒ•    ๐Ÿ”Ž  3. ์‚ฌ์šฉ ์˜ˆ์‹œ1. ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ์ฝ”๋“œ์—์„œ ํƒ€์ž…์˜ ์ด๋ฆ„์ด ๊ธธ๊ฑฐ๋‚˜ ๋ณต์žกํ•  ๋•Œ  typealias Point = (x: Int, y: Int) let orign: Point = (x: 0, y: 0)  2. ๋ณต์žกํ•œ ํƒ€์ž… ๋‹จ์ˆœํ™”์ œ๋„ค๋ฆญ ํƒ€์ž…์ด๋‚˜ ํ•จ์ˆ˜ ํƒ€์ž…๊ณผ ๊ฐ™์ด ๋ณต์žกํ•œ ํƒ€์ž…์„ ๊ฐ„๋‹จํ•œ ์ด๋ฆ„์œผ๋กœ ์ •์˜ํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉtypealias StringDictionary = [St..
Swift์—์„œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€1. ์˜ต์…”๋„ : ์ž˜๋ชป๋œ ์ฒ˜๋ฆฌ์˜ ๊ฒฐ๊ณผ๋‚˜ ์‹คํ–‰ ๋„์ค‘ ์‹คํŒจํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋Œ€์‹  nil์„ ๋ฐ˜ํ™˜. 2. ์—๋Ÿฌ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ: ๋ฐ˜ํ™˜๊ฐ’ ํƒ€์ž…์ด๋‚˜ ์ฝ”๋“œ์˜ ํ๋ฆ„๊ณผ ์ƒ๊ด€ ์—†์ด ์˜ค๋ฅ˜๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ.   ์—๋Ÿฌ์ฒ˜๋ฆฌ(Error Handlig)๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์—๋Ÿฌ ์กฐ๊ฑด์—์„œ ์‘๋‹ตํ•˜๊ณ  ๋ณต๊ตฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค. ์ผ๋ถ€ ์ž‘์—…์€ ํ•ญ์ƒ ์‹คํ–‰ ์™„๋ฃŒํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.์˜ต์…”๋„์„ ๊ฐ’์ด ์—†์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ ์ž‘์—…์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ ์›์ธ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.    ๐Ÿ”Ž  1 . ์—๋Ÿฌ ํ‘œํ˜„๊ณผ ๋˜์ง€๊ธฐ(Representing and Throwing Errors) Swift์—์„œ ์—๋Ÿฌ๋Š” Error ํ”„๋กœํ† ์ฝœ์— ์ค€์ˆ˜ํ•˜๋Š” ํƒ€์ž…์˜ ๊ฐ’์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.์ด ํ”„๋กœํ† ์ฝœ์€ ๋น„์–ด์žˆ์œผ๋ฉฐ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜ ๊ฒƒ์— ๋Œ€ํ•ด ์‚ฌ์šฉ๋ ..
๐Ÿ”Ž  1 . Relay์ง€๋‚œ ๋ฒˆ์— ์ •๋ฆฌํ–ˆ๋˜ Subject์™€ ์—ฐ๊ณ„๋˜๋Š” ๋‚ด์šฉ์ด๋‹ค. Subject๋Š” ์˜ต์ €๋ฒ„๋ธ”์ด๋ฉด์„œ ์˜ต์ €๋ฒ„์ด๋‹ค.  Relay๋Š” Subject๊ฐ€ onCompleted, onError๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.์ฆ‰, ์—๋Ÿฌ์™€ ์™„๋ฃŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉ์ถœํ•˜์ง€ ์•Š๊ณ , ์ข…๋ฃŒ๋˜์ง€ ์•Š๋Š” ํŠน์ˆ˜ํ•œ Subject์ด๋‹ค.๊ตฌ๋…์ž๊ฐ€ dispose๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Relay๋Š” ์ฃผ๋กœ UI ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.  Relay์— ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” onNext()๊ฐ€ ์•„๋‹Œ accept ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.  Relay๋Š” RxCocoa์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ import RxCocoa๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.    ๐Ÿ”Ž  2. Relay์˜ ์ข…๋ฅ˜1) PublishRelay : ๊ตฌ๋… ์ดํ›„ ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๊ทธ..
์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๋ฉด์„œ ๊ทธ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋˜[ weak self ]์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด๋ณด๋Š” ์ข‹์€ ๊ธฐํšŒ๊ฐ€ ์ƒ๊ฒผ๋‹ค.    1. weak self๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ฐ•ํ•œ ์ฐธ์กฐ ์‚ฌ์ดํด์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. Swfit์˜ ARC๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๊ฐ์ฒด๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค.  ํ•˜์ง€๋งŒ ๊ฐ์ฒด๋“ค์ด ์„œ๋กœ ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•  ๊ฒฝ์šฐ, ARC๋Š” ์ด ์ฐธ์กฐ๋ฅผ ๋Š์ง€ ๋ชปํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๊ฐ•ํ•œ ์ฐธ์กฐ ์‚ฌ์ดํด์ด๋ผ๊ณ  ํ•œ๋‹ค.    2. ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ด๋–ค ์ƒํ™ฉ์„ ๋งํ•˜๋Š”๊ฑฐ์ง€? ๊ฐ์ฒด๋“ค์ด ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๊ฒƒ์€, ํ•œ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์†Œ์œ ํ•˜๋ฉด์„œ๊ทธ ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ฒด๋˜์ง€ ์•Š๋„๋ก ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œ..
๐Ÿ”Ž  1 . SubjectSubject๋Š” ๋‹ค๋ฆฌ, ํ”„๋ก์‹œ ์—ญํ• ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ค‘๊ณ„ ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ๊ตฌ๋…์ž๋“ค์—๊ฒŒ ์žฌ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋ฐœํ–‰ํ•œ๋‹ค.  ๋”ฐ๋ผ์„œ, Subject๋Š” ์˜ต์ €๋ฒ„์ด๋ฉด์„œ ๋™์‹œ์— ์˜ต์ €๋ฒ„๋ธ”์ด๋‹ค. Subject๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹ค๋ฅธ ์˜ต์ €๋ฒ„๋ธ”์„ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๊ณ (์˜ต์ €๋ฒ„ ์—ญํ• ), ๋™์‹œ์— ์˜ต์ €๋ฒ„๋ธ”์ด๋ฏ€๋กœ ๊ตฌ๋…์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.  * ์˜ต์ €๋ฒ„๋ธ”์€ ๋‹ค๋ฅธ ์˜ต์ €๋ฒ„๋ธ”์„ ๊ตฌ๋…ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์˜ต์ €๋ฒ„๋„ ๋‹ค๋ฅธ ์˜ต์ €๋ฒ„์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ๋ชปํ•œ๋‹ค.     ๐Ÿ”Ž  2. Subject์˜ ์ข…๋ฅ˜Subject๋Š” .next ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ , ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ๋งˆ๋‹ค ๊ตฌ๋…์ž์—๊ฒŒ ๋ฐฉ์ถœํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ต์ €๋ฒ„๋ธ”์€ cold ์˜ต์ €๋ฒ„๋ธ”๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ๋…์ž๊ฐ€ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ์ฒ˜์Œ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ๋‹ค..
๐Ÿ”Ž  1 . Observable = Observable sequence = sequenceRsSwift์—์„œ ๋งํ•˜๋Š” Observable๊ณผ sequence๋Š” ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ๋งํ•œ๋‹ค. Observable: RxSwift์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ, ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ฐ’์ด๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉ์ถœํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„(์ŠคํŠธ๋ฆผ)์„ ๋‚˜ํƒ€๋ƒ„. ์ด ์ŠคํŠธ๋ฆผ์„ ๊ตฌ๋…ํ•จ์œผ๋กœ์จ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋งˆ๋‹ค ํ•ด๋‹น ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.Sequence: ์ผ๋ฐ˜์ ์œผ๋กœ Swift์—์„œ๋Š” ๋ฐ˜๋ณต๊ฐ€๋Šฅํ•œ ๊ฐ’์˜ ์ง‘ํ•ฉ(์˜ˆ: ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ ๋“ฑ)์„ ์˜๋ฏธํ•จ. RxSwift์—์„œ์˜ ์‹œํ€€์Šค๋Š” ๊ฐ’๋“ค์ด ์‹œ๊ฐ„์ด ํ๋ฆ„์— ๋”ฐ๋ผ ํ•˜๋‚˜์”ฉ ๋‚˜์˜ค๋Š” ๋น„๋™๊ธฐ์ ์ธ ์‹œํ€€์Šค๋ฅผ ์˜๋ฏธํ•จ. ์ด ์ŠคํŠธ๋ฆผ์€ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฐฉ์ถœํ•˜์ง€๋งŒ, ๊ทธ ๊ฐ’๋“ค์€ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ „๋‹ฌ๋จ. ..
ํ…Œ์ด๋ธ”๋ทฐ ์ „์ฒด์— cornerRadius๋ฅผ ์ฃผ๊ณ  ์‹ถ์€๋ฐ ์ ์šฉ์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์˜์—ญ์„ ํ™•์ธํ•ด๋ณด๊ณ ์ž ๋ฐฑ๊ทธ๋ผ์šด๋“œ์ปฌ๋Ÿฌ๋ฅผ ์ฃผ๊ณ ํ™•์ธํ•ด๋ณด๋‹ˆ ์…€ ๋ถ€๋ถ„์ด ์ ์šฉ์ด ๋˜์ง€ ์•Š์•˜๋‹ค.  ๊ทธ๋ž˜์„œ ์ ์šฉ์„ ํ•ด๋ดค๋Š”๋ฐ ์ž˜ ๋˜์ง€ ์•Š์•˜๋‹ค. ์‚ฌ์‹ค cell์— ์ ์šฉ์„ ํ•ด์ฃผ๊ณ  ์‹ถ์€๋ฐ ์—ฌ๊ธฐ์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์…€์— ์ค˜์•ผํ•  ์ง€ ๊ณ ๋ฏผ์ด์—ˆ๋‹ค.   ํŒ€์›๋“ค๊ณผ ์–˜๊ธฐ๊ฐ€ ๋‚˜์˜จ ๊น€์— ์ด๊ฒƒ ์ €๊ฒƒ ๋งŽ์ด ์‹œ๋„ ํ•ด๋ณธ ๊ฒฐ๊ณผ...ใ…‹ใ…‹ใ…‹  ๊ทธ๋ž˜์„œ contentView์™€ self ๋ญ๊ฐ€ ๋‹ค๋ฅธ๊ฑฐ์ง€..?๋‚ด๊ฐ€ ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๊ฒƒ์€ ํ˜„์žฌ ํ…Œ์ด๋ธ”๋ทฐ์—๋งŒ cornerRadius ์ ์šฉ์ด ๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—cell์—๋„ cornerRadius์„ ์ฃผ๊ณ  ์‹ถ์—ˆ๋˜ ๊ฒƒ!  self: ์…€ ์ž์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, UITableViewCell ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค.์…€์˜ ์ „์ฒด ์˜์—ญ์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ์…€์˜ ๋ฐฐ๊ฒฝ์ƒ‰, ๊ฒฝ๊ณ„์„ ..
APIKey ๋ฐ ์™ธ๋ถ€ ๋…ธ์ถœ ์‹œ ๋ณด์•ˆ์ƒ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋“ค์„ ๊ธฐ๋กํ•ด๋‘๋Š” SecretsConfig.xcconfig ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ ๊นƒ ์ด๊ทธ๋…ธ์–ด์— ์ถ”๊ฐ€ํ•˜์˜€์œผ๋‚˜ ์ปค๋ฐ‹ ์‹œ ๊ณ„์† Xcode์—์„œ ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์˜ค๋Š˜ ์˜ค์ „ ์Šคํฌ๋Ÿผ ๋•Œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋Š”,ํŒ€์›๋“ค๊ณผ ๊นƒ์ด๊ทธ๋…ธ์–ด์— *.xcconfig ์ด์™ธ์— ๊ตฌ์ฒด์ ์ธ SecretsConfig.xcconfig์€ ์ ์šฉ์ด ๋˜๋Š”์ง€ํ™•์ธ ํ•ด๋ณด๋Š” ๊ณผ์ • ์ค‘ ์‹ค์ˆ˜๋กœ ํŒŒ์ผ์ด ์ปค๋ฐ‹๊นŒ์ง€ ์ง„ํ–‰๋œ ์ƒํƒœ์˜€๋‹ค.(์•„์ง ๋กœ์ปฌ์—์„œ ์ปค๋ฐ‹์„ ํ•˜๊ณ  ํ‘ธ์‰ฌ๋Š” ํ•˜์ง€ ์•Š์•„ ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์€ ์ƒํƒœ) ์—ฌ๊ธฐ์„œ ํ‘ธ์‰ฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด, ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ APIKey๋“ค์ด ๋ชจ๋‘ ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๋Š” ์ƒํ™ฉ...  1. .gitingore๊ฐ€ ์ ์šฉ์ด ์•ˆ๋˜๊ณ  .xcconfig ํŒŒ์ผ์„ ํฌํ•จ์‹œ์ผœ์š” → ๊นƒ ์บ์‰ฌ ์‚ญ์ œgit rm -r --cach..
AHN.Jihyeon
๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป