[swift] ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด (Singleton Pattern)

์‹ฑ๊ธ€ํ†คํŒจํ„ด์ด๋ž€. ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋ฅผ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด์„œ ์“ฐ๋Š” ํŒจํ„ด Singleton pattern์— ๋Œ€ํ•ด ์ƒ์„ฑ๋ฐฉ๋ฒ•, ์ •์˜, ์“ฐ์ž„ ์ˆœ์œผ๋กœ ์ •๋ฆฌํ•ด๋‚˜๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. 1. ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์ƒ์„ฑ ๋ฐฉ๋ฒ•. ์šฐ์„  class๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‚ด๋ถ€์—๋Š”, class์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” class ์ž์ฒด ์ƒ์ˆ˜๋ฅผ static ์œผ๋กœ ์„ ์–ธ ํ•ด์ค๋‹ˆ๋‹ค. static์„ ๋ถ™์ด๋ฉด 'shared' ๋Š” ์ƒ์†์ด ์•ˆ๋˜๋ฉฐ ์ธ์Šคํ„ด์Šคํ™” ํ•˜์—ฌ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑ ๋˜์ง€ ์•Š๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. ( static ์„ ์ž˜ ๋ชจ๋ฅด์‹ ๋‹ค๋ฉด https://ggasoon2.tistory.com/2#typeProperty ์ด ๊ธ€์˜ 'ํƒ€์ž… ํ”„๋กœํผํ‹ฐ'๋ฅผ ์ฐธ๊ณ  ํ•ด์ฃผ์„ธ์š”.^^ ) ๊ทธ๋ฆฌ๊ณ  private init() ์ƒ์„ฑ์ž๋ฅผ private์œผ๋กœ ์ œํ•œํ•˜์—ฌ ์™ธ๋ถ€์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜์—ฌ, 'Si..

iOS & swift 2021. 7. 20. 02:15
[iOS] // MARK: - ๋ฅผ ๋‹จ์ถ•ํ‚ค๋กœ ๋งŒ๋“ค๊ธฐ ๐Ÿฏtip

๋‹จ๋ฝ์„ ํ‘œ์‹œํ•ด์ฃผ๊ธฐ ์œ„ํ•ด // MARK: - ๋ฅผ ๋งŽ์ด ์“ฐ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ํ‘œ์‹œํ•ด๋‘๋ฉด. ์›ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ํŽธํ•ด์š” ๋ถ๋งˆํฌ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ์ด๊ฒŒ ๋‹จ์ถ•์–ด๋กœ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋„ค์š”. ์ตœ๊ทผ์— ์•Œ๊ฒŒ ๋๋Š”๋ฐ ๋ฌด์ฒ™ ํŽธํ•œ ๊ธฐ๋Šฅ ๊ฐ™์•„์„œ ๋„๋ฆฌ ์•Œ๋ ค์กŒ์œผ๋ฉด ํ•˜๋Š” ๋งˆ์Œ์— ์ž‘์„ฑํ•˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค. ์šฐ์„  // MARK: - ์ž‘์„ฑ ํ›„ ๋“œ๋ž˜๊ทธ ํ•˜์—ฌ Create Code Snippet ๋“ค์–ด๊ฐ€์ค๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ์—” // MARK: - ์ ์–ด ์ฃผ์‹œ๊ณ  Completion ์—๋Š” ์„ค์ • ํ•˜๊ณ ์‹ถ์€ ๋‹จ์ถ•์–ด๋ฅผ ์ ์–ด์ฃผ์„ธ์š”. ์ €๋Š” ๋‹จ์ถ•์–ด๋กœ mark๋ผ ์ ์–ด์คฌ์–ด์š”. bookmark๋ผ๋Š” ๋Œ€์ฒด ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ(?)๋Š” ๋กœ ์ž‘์„ฑ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ mark ๋ผ๊ณ  ํƒ€์ดํ•‘ ํ•˜๊ธฐ๋„์ „์— m๋งŒ ์ณ๋„ ๋œจ๋Š” ๋ชจ์Šต ์—”ํ„ฐ๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค. ๊น”๋”ํ•˜๊ฒŒ ๋‚˜์˜ค๋Š” ๋ชจ์”! + ์ถ”๊ฐ€๋กœ @IBOutlet ๊ฐ™์€ ..

iOS & swift 2021. 7. 15. 22:06
[swift] public vs private (์ ‘๊ทผ์ œ์–ด, ์ ‘๊ทผ์ง€์ •์ž)

public๊ณผ private ํ•จ์ˆ˜, ํด๋ž˜์Šค, ํ”„๋กœํผํ‹ฐ ๋“ฑ ์„ ์–ธํ•  ๋•Œ ํ•ญ์ƒ ์จ์™”์—ˆ์ฃ .. public์€ ๋Œ€์ถฉ ์ „์—ญ ๋ณ€์ˆ˜ ๋Š๋‚Œ, private์€ ์ง€์—ญ๋ณ€์ˆ˜ ๋Š๋‚Œ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๊ณ  ๋„˜์–ด๊ฐ”์Šต๋‹ˆ๋‹ค. ๊ฐœ๋…์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์—ˆ์–ด์š”. ์ด๋ฒˆ์— ํ•œ๋ฒˆ ์™„๋ฒฝํ•œ ์ดํ•ด๋ฅผ ํ•ด๋ณด๊ณ ์ž ๊ธ€์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ Swift ์—์„œ๋Š” Access Control (์ ‘๊ทผ ์ œ์–ด)๋ผ๊ณ  ๋ช…ํ•ด ๋’€์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์ ์€ ์„ธ๋ถ€์ ์ธ ๊ตฌํ˜„์€ ๊ฐ์ถ”๊ณ , ํ•„์š”ํ•œ๋งŒํผ๋งŒ ๊ณต๊ฐœํ•ด ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. ๊ณต๊ฐœ ์ •๋„์— ๋”ฐ๋ผ 5๊ฐ€์ง€ ๋ ˆ๋ฒจ๋กœ ๋ถ„๋ฅ˜ํ•ด๋’€๋Š”๋ฐ์š”. ๊ณต๊ฐœ์ •๋„๊ฐ€ ๋†’์€ ์ˆœ์— ๋”ฐ๋ผ์„œ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 1. Open : ์„ ์–ธํ•œ ๋ชจ๋“ˆ ์™ธ์— ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ์˜ค๋ฒ„๋ผ์ด๋“œ์™€ ์„œ๋ธŒํด๋ž˜์‹ฑ์ด ๊ฐ€๋Šฅํ•ด์š”. ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ์ด์ „ ..

iOS & swift 2021. 4. 30. 18:09
[RxSwift] Debounce vs Throttle

๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋…ธ์ถœํ• ๋•Œ, ํ‚ค์›Œ๋“œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•œ emit์„ ์ œ์–ดํ•˜๋ ค๊ณ  Debounce๋ผ๋Š” ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. RxSwift๋ฌธ๋ฒ•์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ Throttle์ด๋ผ๋Š” ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์ ‘ํ–ˆ๋Š”๋ฐ, Debounce์™€ ๋น„์Šทํ•˜๋ฉด์„œ๋„ ๋ช…ํ™•ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์–ด ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Debounce์™€ Throttle์€ ์ด๋ฒคํŠธ๋ฅผ (์–‘์ ์ธ ์ธก๋ฉด์—์„œ) ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ์ •์˜์™€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ๋””๋ฐ”์šด์Šค์— ๋Œ€ํ•œ ์ •์˜์ž…๋‹ˆ๋‹ค. ์ง๊ด€์ ์ธ ๋งˆ๋ธ” ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋จผ์ € ๋ณด์ž๋ฉด. ์ด๋ ‡์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋“ค์–ด์™”๋Š”๋ฐ ๋งˆ์ง€๋ง‰ item๋งŒ emit ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ด ์ง€๋‚˜๊ธฐ ์ „์— ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด ๊ทธ ๊ฐ’๋“ค์€ emit ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊น ๊ฐ„๊ฒฉ์ด 1์ดˆ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ! ๊ฐ’์„ ..

iOS & swift 2021. 4. 20. 18:14
[swift] final, static, class ( + ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ, ํƒ€์ž… ํ”„๋กœํผํ‹ฐ )

final ์“ฐ๋Š” ์ด์œ ! static ์“ฐ๋Š” ์ด์œ ! class์™€ ์ฐจ์ด ํ•ญ์ƒ ์• ๋งคํ•˜๊ฒŒ ํ–ˆ๋˜ ๊ฒƒ๋“ค.. ํ•œ๋ฒˆ ์ •๋ฆฌํ•˜๋Š” ๊ฒŒ ์ข‹๊ฒ ๋‹ค ์‹ถ์–ด์„œ ๊ธ€์„ ์”๋‹ˆ๋‹ค. ๊ธ€์ด ๋„ˆ๋ฌด ๊ธฐ๋‹ˆ๊น ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋ง์”€๋“œ๋ฆด๊ฒŒ์š”. 1. final ์€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ. 2. static๊ณผ class์˜ ์“ฐ์ž„์€ ๋ฉ”์†Œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•˜์ง€ ์•Š๊ณ  ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ. -> ํƒ€์ž… ๋ฉ”์†Œ๋“œ, ํƒ€์ž… ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋จ, ์ฐจ์ด๋Š” static์€ ์ƒ์†์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค๋Š”์ . ์š”์•ฝ์„ ๋ณด๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€์‹ ๋‹ค๋ฉด (์ €๋Š” ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€์„œ ์ฐพ์•„๋ณด๊ณ  ์ •๋ฆฌํ•จ) ๋’ท๋ฐ›์นจ๋˜๋Š” ๋‚ด์šฉ๊นŒ์ง€ ์ƒ์„ธํ•˜๊ฒŒ ์ •๋ฆฌํ–ˆ์œผ๋‹ˆ, ๋‹ค ์ฝ์–ด๋ณด์‹ ๋‹ค๋ฉด ์ดํ•ด๋˜์‹œ๋ฆฌ๋ผ ์ƒ๊ฐํ•ด์š”. ์šฐ์„  ์ฒซ๋ฒˆ์งธ, final ์€ Overriding์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Overriding ์ด๋ž€? ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†..

iOS & swift 2021. 4. 5. 23:01
[swift] Map vs CompactMap vs FlatMap

์Œ~ ์ฒซ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋ญ๋ถ€ํ„ฐ ์จ์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋„ค์š”. (๋ˆ„๊ฐ€ ๋ด์ค„์ง„ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ) ํ˜„์žฌ ์‹œ์ ์—์„œ ๊ฐ•์˜ ํ•™์Šต ์ค‘ ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค ํ•˜๋Š” ์šฉ์–ด๋ถ€ํ„ฐ ์ •๋ฆฌํ•ด๋‚˜๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋„ ๊ณต๋ถ€ํ•˜๋ฉฐ ๋ชจ๋ฅด๋Š” ๋‚ด์šฉ์— ๋Œ€ํ•˜์—ฌ ์ •๋ฆฌํ•ด๋‚˜๊ฐˆ ๊ณ„ํš์ž…๋‹ˆ๋‹ค.   ์ฒซ ๋ฒˆ์งธ. compactMap  ์• ํ”Œ ๋ฌธ์„œ์—์„œ compactMap ์ •์˜๋Š” ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. nil์ด ์•„๋‹Œ ๊ฒฐ๊ณผ๊ฐ’์˜ ๋ฐฐ์—ด์„   map์€ map(ํ•จ์ˆ˜, ์ž๋ฃŒํ˜•) ์ด๋ ‡๊ฒŒ ์ƒ๊ฒจ์„œ ์ž๋ฃŒํ˜•์„ ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ์ž์ž…๋‹ˆ๋‹ค.  ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ์˜ˆ์ œ๋กœ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.     Map vs CompactMap  map์€ ํ•จ์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ์—ˆ์ฃ ? (์˜ˆ์ œ ๋‘๋ฒˆ์งธ ์ค„) ํ•จ์ˆ˜์˜ ํ˜•ํƒœ๋Š” ํด๋กœ์ €์ž…๋‹ˆ๋‹ค.  ๋ฌธ์ž์—ด์ธ ๋ฐฐ์—ด๋“ค์˜ ์š”์†Œ๋ฅผ Intํ˜•์œผ๋กœ ๋ฐ”๊พธ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜์˜€๋„ค์š” Int(t..

iOS & swift 2021. 3. 26. 17:44