์ „์ฒด ๊ธ€

๐Ÿ”Ž  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..
๋ฌธ์ œ์ 1๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์—์„œ ์ œ๊ณต๋˜๋Š” ํ‚ค๋Š” ์ธ์ฝ”๋”ฉ์ด ํ•œ ๋ฒˆ๋œ ์„œ๋น„์Šคํ‚ค๋‹ค. urlComponents์˜ queryItems๋ฅผ ํ†ตํ•ด์„œ ์ฟผ๋ฆฌํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” url์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œํ•œ๋ฒˆ ๋” ์ธ์ฝ”๋”ฉ์ด ๋˜์–ด 2๋ฒˆ ์ธ์ฝ”๋”ฉ์ด ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ธ์ฝ”๋”ฉ์ด 2๋ฒˆ๋จ์— ๋”ฐ๋ผ, ์™„์„ฑ๋œ url์˜ ์ฃผ์†Œ๊ฐ€ ๋‹ฌ๋ผ์ ธ ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์—†์—ˆ๋‹ค.   ๋ฌธ์ œํ•ด๊ฒฐ1 ํ•ด๋‹น ์‚ฌํ•ญ์„ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ์ธ์ฝ”๋”ฉ์ด ๋‘๋ฒˆ ๋˜์–ด ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ธ์ฝ”๋”ฉ์ด ๋‘ ๋ฒˆ๋œ ๊ฒƒ์ด ๋ฌธ์ œ์˜€์œผ๋ฏ€๋กœ, ๋””์ฝ”๋”ฉ์„ ํ•ด์ค€๋‹ค. ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์˜ ๋งˆ์ดํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€๋ฉด ์ธ์ฝ”๋”ฉ๋œ ์ธ์ฆํ‚ค์™€ ๋””์ฝ”๋”ฉ๋œ ์ธ์ฆํ‚ค ๋‘˜ ๋‹ค ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ๊ธฐ๋ณธ ์ธ์ฝ”๋”ฉ๋œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด removingPercentEncoding ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋””์ฝ”๋”ฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋”๋ณด๊ธฐ..
1. ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šคํ‚ค๋Š” ์ผ๋‹จ ์ธ์ฝ”๋”ฉ๋œ ํ‚ค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด %์™€ ๊ฐ™์ด ๋ณ€ํ™˜๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.  // ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ธ์ฝ”๋”ฉ๋œ ํ‚ค(์„œ๋น„์Šคํ‚ค ์ผ๋ถ€ ์‚ญ์ œ)https://apis.data.go.kr/1160100/service/GetMarketIndexInfoService/getStockMarketIndex?serviceKey=qfXqzDLVVPW1Ks0oWU%2Bm8Z9JphEfjCDxm7GMBUkVC4GoPQshE%2B8Uk%2BQ%3D%3D&์ด๋ ‡๊ฒŒ ํฌ์ŠคํŠธ๋งจ์ด๋‚˜ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์—์„œ ํ…Œ์ŠคํŠธํ•ด๋ณด๋ฉด ์ œ๋Œ€๋กœ ๋‚˜์˜ค์ง€๋งŒ, ์ฝ”๋“œ์ƒ์œผ๋กœ๋Š” ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. ๋‹ค๋ฅธ API๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋‚˜ ์ด๊ฑด ์ œ๋Œ€๋กœ ๋‚˜์™€์„œ ๋” ์™œ ์•ˆ๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.    -> ๊ทธ๋Ÿผ ์ธ์ฝ”๋”ฉ์˜ ๋œป์ด ์ •ํ™•ํ•˜๊ฒŒ ๋ฌด์—‡..
AHN.Jihyeon
๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป