์ „์ฒด ๊ธ€

์ „์ฒด ๊ธ€

    [iOS] App Project ์†์„ฑ | Xcode Project / Project / Target

    [PROJECT] : ๋ชจ๋“  ํŒŒ์ผ, ๋ฆฌ์†Œ์Šค, ์†Œํ”„ํŠธ์›จ์–ด ๋นŒ๋“œ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด์˜ ์ €์žฅ์†Œ ํ”„๋กœ์ ํŠธ์—๋Š” ์•ฑ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ์š”์†Œ ๊ฐ„์˜ ๊ด€๊ณ„(relationships)๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ๋Š” product๋ฅผ buildํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ช…์‹œํ•˜๋Š” target์„ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จํ•˜๋ฉฐ ๋ชจ๋“  target์— ๋Œ€ํ•œ ๊ธฐ๋ณธ build setting์„ ์ •์˜ํ•œ๋‹ค. Info Deployment Target: ์ง€์›ํ•˜๋Š” ์ตœ์†Œ OS ๋ฒ„์ „ Configurations: Debug / Release build setting (๋ณดํ†ต ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ - Debug, Archiveํ•  ๋•Œ - Release)⇒ ๋ณด๋‹ค ๋” ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด configuration์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ ex. ๊ฐœ๋ฐœ ๋ฒ„..

    [iOS] info.plist | Xcode 12

    Info.plist = Information Property List Files Info.plist๋Š” Xcode ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ์‹คํ–‰ ํŒจํ‚ค์ง€์— ๊ด€ํ•œ ํ•„์ˆ˜ ์„ค์ • ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ XML์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐํ™”๋œ ํ…์ŠคํŠธ ํŒŒ์ผ์ด๋‹ค. iOS ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ์ •๋ณด๋ฅผ ๋‹ด์•„ ๋†“์„ ์ˆ˜ ์žˆ๋Š” ์„ค์ •ํŒŒ์ผ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. XML์€ Key, Value๋กœ ๊ตฌ์„ฑ๋œ Dictionary ํ˜•ํƒœ์ด๋‹ค. ์‹œ์Šคํ…œ์€ ์ด ํ‚ค์™€ ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ์•ฑ๊ณผ ์•ฑ์˜ ์„ค์ •์„ ๊ฐ€์ ธ์˜จ๋‹ค. ๐Ÿ’ก ํŠน์ • ํ‚ค or ๊ฐ’์„ ํŽธ์ง‘ํ•˜๋ ค๋ฉด ๊ฐ’์„ ๋”๋ธ”ํด๋ฆญํ•˜์—ฌ ์„ ํƒํ•œ ๋‹ค์Œ ์ƒˆ ๊ฐ’์„ ์ž…๋ ฅํ•œ๋‹ค. ๐Ÿ’ก ์ƒˆ๋กœ์šด ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด (+) ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ์ž„์˜์˜ ํ‚ค๋ฅผ ํด๋ฆญํ•˜๊ณ  ์—”ํ„ฐ๋ฅผ ์น˜๋ฉด ํ•ด๋‹น ํ‚ค ์•„๋ž˜์— ์ƒˆ๋กœ์šด ํ‚ค๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค. [ Information Property List ..

    [iOS] Completion Handler์„ ์ด์šฉํ•œ Loading Progress ๊ตฌํ˜„

    GitHub - krimpedance/KRProgressHUD: A beautiful and easy-to-use progress HUD for your iOS. A beautiful and easy-to-use progress HUD for your iOS. - GitHub - krimpedance/KRProgressHUD: A beautiful and easy-to-use progress HUD for your iOS. github.com KRProgressHUD๋ฅผ ์ด์šฉํ•˜์—ฌ Loading Progress๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž. ์ด์ œ pod init - pod '์‚ฌ์šฉํ• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ' - pod install์˜ ๋ฃจํ‹ด์— ์™„๋ฒฝ ์ ์‘ ^-^v Completion handler๋Š” ์–ด๋– ํ•œ ์ผ์ด ๋๋‚ฌ์„ ๋•Œ ์ง„ํ–‰ํ•  ์—…๋ฌด๋ฅผ ๋‹ด๋‹นํ•˜..

    [Algorithm] DFS & BFS | ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰

    โ€ปํƒ์ƒ‰: ๋งŽ์€ ๋ฐ์ดํ„ฐ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ (1) ์Šคํƒ (2) ํ (3) ์žฌ๊ท€ํ•จ์ˆ˜ (4) ๊ทธ๋ž˜ํ”„ DFS | ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ : ๊นŠ์€ ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ ๐Ÿ‘‰ ํŠน์ • ๊ฒฝ๋กœ๋กœ ํƒ์ƒ‰ํ•˜๋‹ค๊ฐ€ ํŠน์ • ์ƒํ™ฉ์—์„œ ์ตœ๋Œ€ํ•œ ๊นŠ์ˆ™์ด ๋“ค์–ด๊ฐ€์„œ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ํ›„ ๋‹ค์‹œ ๋Œ์•„๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ ๋ฐฉ๋ฌธ (1) ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ โ€ป ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ: ์Šคํƒ์— ํ•œ๋ฒˆ ์‚ฝ์ž…๋˜์–ด ์ฒ˜๋ฆฌ๋œ ๋…ธ๋“œ๊ฐ€ ๋‹ค์‹œ ์‚ฝ์ž…๋˜์ง€ ์•Š๊ฒŒ check (2) ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— pushํ•˜๊ณ  ๋‹ค์‹œ ๋Œ์•„๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค. (3) (2) ๊ณผ์ •์„ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋…ธ๋“œ์˜ ํƒ์ƒ‰ ์ˆœ์„œ๋Š” ์Šคํƒ์— ๋“ค์–ด๊ฐ„ ์ˆœ์„œ์™€ ๊ฐ™๋‹ค. 1 → 2 → 5 →6 → 3 → 7 → 4 → 8 ์ฒซ ..

    [Swift] Guard๋ฌธ | guard let

    Guard๋ฌธ์€ ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•  ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ทธ ๋‹ค์Œ์— ์˜ค๋Š” ์ฝ”๋“œ๋“ค์„ ์‹คํ–‰ํ• ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. Guard๋ฅผ ์ด์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 1. control flow์™€ indentation์„ ๋‹จ์ˆœํ•˜๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด → ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ง€๊ณ  ๊ทธ๋กœ ์ธํ•ด ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. 2. ๋ถ€์ ์ ˆํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์—†์• ๋ฒ„๋ฆฌ๊ธฐ ์œ„ํ•ด if๋ฌธ vs guard๋ฌธ if๋ฌธ ์‚ฌ์šฉ ver. func singHappyBirthday(){ if(birthdayIsToday){ if(invitedGuests > 0){ if (cakeCandleLit){ print("Happy Birthday to you!") }else{ print("์ผ€์ต ์ด›๋ถˆ ๋ถˆ ์•ˆ์ผœ์ง") } }else{ print("์ดˆ๋Œ€ ์•„๋ฌด๋„ ์•ˆํ•จ") } }else{ p..

    [Algorithm] ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด | ์†Œ์ˆ˜ ์ฐพ๊ธฐ

    ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž ์›๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๐Ÿ’ก 0๋ถ€ํ„ฐ ๊ตฌํ•˜๊ณ ์žํ•˜๋Š” ์ˆ˜(n)๊นŒ์ง€ True๋กœ ์ฑ„์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๐Ÿ’ก 2๋ฅผ ์ œ์™ธํ•œ 2์˜ ๋ฐฐ์ˆ˜๋ฅผ False๋กœ ๋ฐ”๊พผ๋‹ค. ๐Ÿ’ก 3์„ ์ œ์™ธํ•œ 3์˜ ๋ฐฐ์ˆ˜๋ฅผ False๋กœ ๋ฐ”๊พผ๋‹ค. ๐Ÿ’ก 5๋ฅผ ์ œ์™ธํ•œ 5์˜ ๋ฐฐ์ˆ˜๋ฅผ False๋กœ ๋ฐ”๊พผ๋‹ค. . . . ๐Ÿ’กn์˜ ์ตœ๋Œ€ ์•ฝ์ˆ˜๋Š” sqrt(n) ์ดํ•˜์ด๋ฏ€๋กœ sqrt(n)์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ False๋กœ ๋ฐ”๊พผ๋‹ค. ๐Ÿ’ก2~n๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ True์ธ ์ˆซ์ž๋“ค์ด ์†Œ์ˆ˜๊ฐ€ ๋œ๋‹ค. ์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. def isPrime(n): sieve = [True] * n # n์˜ ์ตœ๋Œ€ ์•ฝ์ˆ˜๋Š” sqrt(n) ์ดํ•˜ m = int(n ** 0.5) for i in range(2, m+1): if sieve[i] == ..

    [Algorithm] ์ด์ง„ ํƒ์ƒ‰ | Binary Search

    1. ์ˆœ์ฐจ ํƒ์ƒ‰ : ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํƒ์ƒ‰ ๋ฐฉ๋ฒ• - ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์žˆ๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์•ž์—์„œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ํ™•์ธ - ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฆฌ์ŠคํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ - ํŒŒ์ด์ฌ์˜ count() ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ์ˆœ์ฐจ ํƒ์ƒ‰์ด ์‚ฌ์šฉ๋œ๋‹ค. ๐Ÿ“Œ ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n) # target = ์ฐพ๊ณ ์žํ•˜๋Š” ์›์†Œ def search(n, target, array): for i in range(n): # ํ˜„์žฌ์˜ ์›์†Œ๊ฐ€ target๊ณผ ๋™์ผํ•˜๋ฉด if array[i] == target: return i # ํ˜„์žฌ์˜ ์œ„์น˜ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜ 2. ์ด์ง„ ํƒ์ƒ‰(์ด๋ถ„ ํƒ์ƒ‰) : ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์”ฉ ๋‚˜๋ˆ„๋ฉฐ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ• - ๋ฐฐ์—ด ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ - ๋ณ€์ˆ˜ 3๊ฐœ ํ•„์š”: ์‹œ์ž‘์ , ๋์ , ์ค‘๊ฐ„์  - ์ค‘๊ฐ„์ ์ด ์‹ค์ˆ˜ ์ผ ๋•Œ๋Š” ์†Œ์ˆ˜์  ์ดํ•˜..

    [iOS] WebKit View | ์•ฑ์—์„œ Web ํŽ˜์ด์ง€ ์—ด๊ธฐ

    ์—ด๊ณ  ์‹ถ์€ ์›นํŽ˜์ด์ง€์˜ URL๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์•ฑ์—์„œ ๋ฐ”๋กœ ํ•ด๋‹น ์›นํŽ˜์ด์ง€๋ฅผ ์—ด ์ˆ˜ ์žˆ๋‹ค! ๋จผ์ €, storyboard์— WebKit View๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. Web View๋Š” deprecated ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. (old version) Webkit์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ์Šคํ† ๋ฆฌ๋ณด๋“œ์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์— WebKit ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ import ํ•ด์ค€๋‹ค. import WebKit ๋„ค์ด๋ฒ„๋ฅผ ์—ด๊ธฐ ์œ„ํ•ด ๋„ค์ด๋ฒ„์˜ ์ฃผ์†Œ๋ฅผ url์— ๋„ฃ์–ด์ค€๋‹ค. import UIKit import WebKit class ViewController: UIViewController { @IBOutlet weak var webView: WKWebView! override func viewDidLoad() { super.viewDidLoad() let ..