๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

Hash๋ž€? ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ, ์œ ์ง€ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋“ค์„ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด key๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ , ๊ทธ key์— ๋”ฐ๋ผ value๋ฅผ ์ €์žฅํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๋œปํ•œ๋‹ค. HashTable์ด๋ž€ Key๋ฅผ ์ด์šฉํ•ด ๋ฐฐ์—ด์˜ Index๋ฅผ ์ฐพ๊ณ , ๊ทธ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค. "์ œ๋ฆฌ"์˜ ์˜์–ด ์ด๋ฆ„์„ ์ฐพ๊ธฐ ์œ„ํ•ด 1. "์ œ๋ฆฌ"๋ผ๋Š” key๋ฅผ hash ํ•จ์ˆ˜์— ์ „๋‹ฌํ•œ๋‹ค 2. hash ํ•จ์ˆ˜ ๋‚ด์— hashํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ฐพ์„ value์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๋Š”๋‹ค. 3. ์ฐพ์€ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด value๊ฐ’ "jarry"๋ฅผ ์–ป๋Š”๋‹ค. Hashable์ด๋ž€? https://developer.apple.com/documentation/swift/hashable Hashable | Apple Developer Documentation A type that can be h..
ยท iOS
UIAlertAction์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์–ด๋–ค ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ UIAlertAction์„ ๊ทธ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ค์ •ํ•˜์—ฌ addAction()ํ•˜๋Š” ๊ฒฝ์šฐ๋กœ๋งŒ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ ํ•„์š”ํ•œ Actions๋ฅผ ๋ฏธ๋ฆฌ ํ”„๋กœํผํ‹ฐ๋กœ ์ €์žฅํ•ด๋‘” ํ›„ ์ถ”ํ›„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” UIAlertAction์„ ์ „๋‹ฌํ•˜์—ฌ UIAlertController๋กœ ๋„์šฐ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. var myActions: [UIAlertAction] = [] ๋จผ์ € ๋‚ด๊ฐ€ ์ €์žฅํ•  ์•ก์…˜ ๋ฐฐ์—ด์„ ํด๋ž˜์Šค ๋‚ด ํ”„๋กœํผํ‹ฐ๋กœ ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด๋‘”๋‹ค. private func setupAlertActions() { let action1 = UIAlertAction(title: "action1", style: .default, handler: { _ in print("select action1"..
ยท iOS
๋‚˜๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ์ ‘ํ•  ๋•Œ ๋ญ”๊ฐ€ ์ด๊ฑธ ์‚ฌ์šฉํ•ด์„œ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๊ณ , ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€๋ฅผ ์ฒด๊ฐํ–ˆ์„ ๋•Œ ๊ทธ ๊ฐœ๋…์„ ์™„์ „ํžˆ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋ญ”๊ฐ€ ๋‚ด๊ฐ€ ์ด ๊ฐœ๋…์˜ ํ•„์š”์„ฑ์„ ์˜จ์ „ํžˆ ๋Š๋ผ์ง€ ๋ชปํ•˜๋ฉด ์‚ฌ์šฉ์„ ํ•˜๋ฉด์„œ๋„ ๋งˆ์Œ ํ•œ์ผ ์— ์˜๋ฌธ์ด ์ž‘๊ฒŒ ์ž๋ฆฌ์žก๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜๋„ ํ˜‘์—…์„ ํ•˜๊ณ  ์ผ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‚ด๊ฐ€ ๋งˆ์Œ์œผ๋กœ ์™„์ „ํžˆ ๋ฐ›์•„๋“ค์ด์ง€ ์•Š์•˜์Œ์—๋„ ๊ทธ๊ฒŒ ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ๋น ๋ฅด๊ฒŒ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ์ค€๋น„๋Š” ๋˜์–ด์žˆ์–ด์•ผ ํ•˜๋Š”๊ฒŒ ๋งž๋‹ค๊ณ ๋Š” ์ƒ๊ฐํ•œ๋‹ค.(๊ทผ๋ฐ ๊ทธ๋ ‡๊ฒŒ ์•ˆํ–ˆ์Œใ…‹ใ…œ) ์ด๋ฒˆ์— Coordinator Pattern์„ ์ฒ˜์Œ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์˜ˆ์ „์— ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๊ฐœ๋…์„ ์ ‘ํ•œ ์ ์€ ์žˆ์—ˆ์ง€๋งŒ ๊ทธ๋•Œ๋Š” ์‹ค๋ ฅ์ด ๋ถ€์กฑํ•ด์„œ ์ธ๊ฐ€ ํ•„์š”์„ฑ์„ ์˜จ์ „ํžˆ ๋Š๋ผ์ง€ ๋ชปํ–ˆ๋‹ค. ์™œ ๊ทธ๋žฌ๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋„ˆ๋ฌด ์ž‘์€ ํ”„๋กœ์ ํŠธ์— ์ด ๊ฐœ๋…์„ ..
ยท iOS
RxSwift๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ž์ฃผ ์ ‘ํ•˜๊ฒŒ ๋˜๋Š” subscribe, bind, drive๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ •๋ฆฌํ•ด๋ณด์ž! 1. subscribe public func subscribe( onNext: ((Element) -> Void)? = nil, onError: ((Swift.Error) -> Void)? = nil, onCompleted: (() -> Void)? = nil, onDisposed: (() -> Void)? = nil ) -> Disposable { let disposable: Disposable if let disposed = onDisposed { disposable = Disposables.create(with: disposed) } else { disposable = Disposable..
ยท iOS
์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Operator์ธ๋ฐ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ฐจ์ด์ ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•œ ํ›„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋•Œ๊ทธ๋•Œ ์ฐพ์•„์„œ ์‚ฌ์šฉํ–ˆ์—ˆ์–ด์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ๋ช…ํ™•ํžˆ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค. Merge ์—ฌ๋Ÿฌ Observable์ด ๋ฐฉ์ถœํ•˜๋Š” ํ•ญ๋ชฉ๋“ค์„ ํ•˜๋‚˜์˜ Observable์ด ๋ฐฉ์ถœํ•˜๋„๋ก ๋ณ‘ํ•ฉํ•œ๋‹ค. ๋งˆ๋ธ” ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ๊ฐ™์ด ์ฒซ๋ฒˆ์งธ ์ŠคํŠธ๋ฆผ๊ณผ ๋‘๋ฒˆ์งธ ์ŠคํŠธ๋ฆผ์„ ํ•ฉ์ณ ํ•˜๋‚˜์˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. ์ด๋•Œ ์ฒซ๋ฒˆ์งธ ์ŠคํŠธ๋ฆผ, ๋‘๋ฒˆ์งธ ์ŠคํŠธ๋ฆผ์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๋งˆ๋‹ค ๋ฐ”๋กœ๋ฐ”๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉ์ถœํ•œ๋‹ค. ๋‹จ์ˆœํžˆ ๋‘ ์ŠคํŠธ๋ฆผ์˜ ์ด๋ฒคํŠธ๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ŠคํŠธ๋ฆผ์„ ๊ตฌ๋ณ„ ํ•  ์ˆ˜๋Š” ์—†๋‹ค. let firstSubject = BehaviorSubject(value: 1) let secondSubject = BehaviorSubject(value: 2) let thirdSu..
ยท iOS
์šฐ์—ฐํžˆ ViewModel์˜ input๊ณผ output์— ๋Œ€ํ•œ ์กด์žฌ๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ์ด ๋ถ€๋ถ„์„ ์•Œ์ง€ ๋ชปํ–ˆ๊ณ , ์ฐพ์•„๋ณด๋‹ˆ ๊ต‰์žฅํžˆ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋…์ธ ๊ฒƒ ๊ฐ™์•„ ๊ณต๋ถ€ํ•ด๋ณด๊ณ ์žํ•œ๋‹ค! ๊ฐ€์žฅ ๋จผ์ € input/output ํŒจํ„ด์ด ๋ฌด์—‡์ด๊ณ , ์ด๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ? 1. input (View -> ViewModel) View์—์„œ ViewModel์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ (View๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•จ) ex) ํ…์ŠคํŠธ ํ•„๋“œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ 2. output (ViewModel -> View) ViewModel์—์„œ View์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ (View๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์Œ) ex) ํ™”๋ฉด ์ „ํ™˜, ์ž…๋ ฅํ•œ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ(๋กœ๊ทธ์ธ ์„ฑ๊ณต ์œ ๋ฌด, ์ด๋ฉ”์ผ/๋น„๋ฐ€๋ฒˆํ˜ธ ์œ ํšจ์„ฑ ๋“ฑ) ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋Š” input์€ ์œ ์ €์˜ ๋™์ž‘์„ ํ†ตํ•ด ๋“ค์–ด์˜จ ๋ฐ์ด..
์Šค์ผ€์ค„๋ง? ํ•˜๋‚˜์˜ ๊ด€๋ฆฌ์ž๋กœ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ์—ฌ๋Ÿฌ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์—ฌ cpu์™€ ์‹œ์Šคํ…œ ์ž์›์„ ์–ด๋–ป๊ฒŒ ๋ฐฐ์ •ํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•จ - ๊ณ ์ˆ˜์ค€ ์Šค์ผ€์ค„๋ง (๊ฐ€์žฅ ํฐ ํ‹€์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ์Šค์ผ€์ค„๋ง) ์–ด๋–ค ์ž‘์—…์š”์ฒญ์ด ์˜ค๋ฉด ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์‹œ์Šคํ…œ์˜ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์—ฌ ์ž‘์—…์„ ์Šน์ธํ• ์ง€, ๊ฑฐ๋ถ€ํ• ์ง€ ๊ฒฐ์ •ํ•จ(์Šน์ธ ์Šค์ผ€์ค„๋ง ์ด๋ผ๊ณ ๋„ ํ•จ) - ์ค‘๊ฐ„์ˆ˜์ค€ ์Šค์ผ€์ค„๋ง ์ „์ฒด ์‹œ์Šคํ…œ์˜ ํ™œ์„ฑํ™”๋œ ํ”„๋กœ์„ธ์Šค ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ๊ณผ๋ถ€ํ™”๋ฅผ ๋ง‰์Œ - ์ €์ˆ˜์ค€ ์Šค์ผ€์ค„๋ง ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์— CPU๋ฅผ ํ• ๋‹นํ•˜๊ณ  ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋ณด๋‚ผ์ง€ ๋“ฑ์„ ๊ฒฐ์ •ํ•จ ์•„์ฃผ ์งง์€ ์‹œ๊ฐ„์— ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ๊ธฐ ์Šค์ผ€์ค„๋ง์ด๋ผ๊ณ ๋„ ํ•จ ์Šค์ผ€์ค„๋ง์˜ ๋ชฉ์  ๊ทผ๋ณธ์ ์œผ๋กœ ์ด๋Ÿฐ ์Šค์ผ€์ค„๋ง์„ ์™œ ํ• ๊นŒ? ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณตํ‰ํ•˜๊ฒŒ ์ž‘์—…ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ์—„์ฒญ๋‚˜๊ฒŒ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋งŒ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์งง..
ยท iOS
ํด๋ฆฐ์ฝ”๋“œ ๋…ํ›„๊ฐ .. :) ๋”๋ณด๊ธฐ ํด๋ฆฐ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ๋” ์ข‹์€ ์ฝ”๋“œ์— ๊ด€์‹ฌ์ด ์ƒ๊ธฐ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ธฐ์กด ๊ฐœ๋ฐœ ๋ฐฉ์‹์€ ๊ตฌํ˜„์„ ์œ„์ฃผ๋กœ ๊ณ ๋ฏผ์„ ํ•˜์˜€๋Š”๋ฐ, ํด๋ฆฐ์ฝ”๋“œ์— ๋‚˜์˜จ ๋‚ด์šฉ์„ ๋‚ด ํ”„๋กœ์ ํŠธ์— ์ง์ ‘ ์ ์šฉํ•ด๋ณด๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ๋” ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ๊ณ ๋ฏผ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํด๋ฆฐ์ฝ”๋“œ์— ๋‚˜์™€์žˆ๋Š” ๋‚ด์šฉ๋“ค์ด ์ „๋ถ€ ๋‹ค ๋งž๋Š” ๋ง์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ข‹์ง€ ๋ชปํ•œ ๋ฐฉ๋ฒ•, ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๊ณ , ํšจ์œจ์ ์ธ, ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์ด ์„ ํ˜ธํ•˜๋Š” ๊ทธ๋Ÿฐ ๋ฐฉ์‹๋“ค์ด ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์–ด๋–ค ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋†’์€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•ด ํŒ€์›๋“ค์ด ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ์†Œ๋น„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๊ทธ๋Ÿฐ๋ฐ ์ด ๋•Œ ํ”„๋กœ์ ํŠธ ๊ธฐํ•œ์ด ์งง๋‹ค๋ฉด ๊ณผ์—ฐ ๊ทธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•˜๋Š”๊ฒŒ ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์ผ๊นŒ? ํ˜„์žฌ์˜ ๋‚˜๋Š” ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ข‹์€ ์•„ํ‚คํ…์ฒ˜, ๊ณ ๋ฏผ..
๋ฆด๋ฆฌ๐Ÿฐ
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก