๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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

[UIKit] UITableView UITableView @MainActor protocol UITableViewDataSource ํ…Œ์ด๋ธ” ๋ทฐ๋Š” ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ์ด๋ฉฐ, UIScrollView๋ฅผ ์ƒ์†๋ฐ›์•„ ์ˆ˜์ง ์Šคํฌ๋กค์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์˜ ๊ฐœ๋ณ„ ํ•ญ๋ชฉ์„ ๊ตฌ์„ฑํ•˜๋Š” ์…€์„ UITableViewCell ๊ฐ์ฒด์ด๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์— ํ–‰์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ” ๋ทฐ๋Š” ๊ฐ๊ฐ ์ž์ฒด ํ–‰์ด ์žˆ๋Š” 0๊ฐœ ์ด์ƒ์˜ ์„น์…˜์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์„น์…˜์€ ํ…Œ์ด๋ธ” ๋ทฐ ๋‚ด์—์„œ, ํ–‰์€ ์„น์…˜ ๋‚ด์—์„œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋กœ ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์„น์…˜ ์•ž์— ์„น์…˜ Header๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„ ํƒ์ ์œผ๋กœ ์„น์…˜ Footer๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UITableViewCell @MainActor class UITableViewCell : UIView UITableViewCell ๊ฐ์ฒด๋Š” ๋‹จ์ผ ํ…Œ์ด๋ธ” ํ–‰์˜ ๋‚ด์šฉ์„ .. 2022. 4. 1.
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ตœ๋‹จ ๊ฒฝ๋กœ(Shortest Path) ์ตœ๋‹จ ๊ฒฝ๋กœ(Shortest Path) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธธ ์ฐพ๊ธฐ ๋ฌธ์ œ๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ ๊ทธ๋ž˜ํ”„๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‘œํ˜„ ๊ฐ ์ง€์ ์€ ๋…ธ๋“œ๋กœ ํ‘œํ˜„ ์ง€์ ๊ณผ ์—ฐ๊ฒฐ๋œ ๋„๋กœ๋Š” ๊ฐ„์„ ์œผ๋กœ ํ‘œํ˜„ ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ์˜ ์ข…๋ฅ˜ ๋‹จ์ผ ์ถœ๋ฐœ(single-source) ์ตœ๋‹จ ๊ฒฝ๋กœ ์–ด๋–ค ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ ๋‹จ์ผ ๋„์ฐฉ(single-destination) ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ชจ๋“  ์ •์ ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ์–ด๋–ค ํ•˜๋‚˜์˜ ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๊ฐ„์„ ์„ ๋’ค์ง‘์œผ๋ฉด ๋‹จ์ผ ์ถœ๋ฐœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋ฌธ์ œ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Œ ๋‹จ์ผ ์Œ(single-pair) ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ชจ๋“  ์ •์  ์Œ๋“ค ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ ์ฃผ์š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฒจ๋งŒ-ํฌ๋“œ(Bellman-Ford-Moo.. 2022. 3. 31.
[UIKit] UIView(3) ์„œ๋ธŒ ํด๋ž˜์‹ฑ ๋…ธํŠธ UIView ํด๋ž˜์Šค๋Š” ์‹œ๊ฐ์  ์ฝ˜ํ…์ธ ์™€ ๋”๋ถˆ์–ด ์œ ์ € ์ƒํ˜ธ์ž‘์šฉ ์ œ๊ณต์„ ์œ„ํ•œ ์ค‘์š”ํ•œ ์„œ๋ธŒ ํด๋ž˜์‹ฑ ์ง€์ ์ž…๋‹ˆ๋‹ค. view๋ฅผ ์ƒ์†๋ฐ›๋Š” ๊ฒƒ์€ view๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ์ž‘์—…๋“ค์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ UIViewํด๋ž˜์Šค๊ฐ€ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์žˆ์„ ๋•Œ๋งŒ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•  ํ•จ์ˆ˜๋“ค UIView๋ฅผ ์ƒ์†๋ฐ›์„ ๋•Œ ๋ฐ˜๋“œ์‹œ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์•ผ ํ•˜๋Š” ์†Œ์ˆ˜์˜ ๋ฉ”์„œ๋“œ๋“ค์ด ์žˆ๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋“ค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. UIView๋Š” ์œ ์—ฐํ•˜๊ฒŒ ์„ค์ • ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปค์Šคํ…€ ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•˜์ง€ ์•Š๊ณ  ์ •๊ตํ•œ ๋ทฐ ๋™์ž‘์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ UIView ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉด ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ๋“ค์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” init(frame:): ์ด ๋ฐฉ.. 2022. 3. 30.
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming) ์ปดํ“จํ„ฐ๋ฅผ ํ™œ์šฉํ•ด๋„ ์–ด๋ ค์šด ๋ฌธ์ œ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•˜๊ธฐ์— ์‹œ๊ฐ„์ด ๋งค์šฐ ๋งŽ์ด ํ•„์š”ํ•œ ๋ฌธ์ œ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•˜๊ธฐ์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋งค์šฐ ๋งŽ์ด ํ•„์š”ํ•œ ๋ฌธ์ œ ์ปดํ“จํ„ฐ๋Š” ์—ฐ์‚ฐ ์†๋„์— ํ•œ๊ณ„๊ฐ€ ์žˆ๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋„ ํ•œ์ •์ ์ด๋ผ ๋งŽ์€ ์ œ์•ฝ ๋ฐœ์ƒ โ˜ž ์—ฐ์‚ฐ ์†๋„์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž‘์„ฑ ํ•„์š” ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming) ๋™์  ๊ณ„ํš๋ฒ• ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ๋‚˜๋ˆ„๊ณ , ๊ฐ™์€ ๋ฌธ์ œ๋ผ๋ฉด ํ•œ ๋ฒˆ์”ฉ๋งŒ ํ’€์–ด ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฒ• ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์•ฝ๊ฐ„ ๋” ์‚ฌ์šฉํ•˜๋ฉด ์—ฐ์‚ฐ ์†๋„๋ฅผ ๋น„์•ฝ์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์ž‘์€ ๋ฌธ์ œ์—์„œ ๊ตฌํ•œ ์ •๋‹ต์€ ๊ทธ๊ฒƒ์„ .. 2022. 3. 30.
[UIKit] UIView(2) View ์ƒ์„ฑํ•˜๊ธฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์Šคํ† ๋ฆฌ๋ณด๋“œ์— ๋ทฐ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์บ”๋ฒ„์Šค์— ๋Œ์–ด๋‹ค ๋†“์•„์„œ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ทฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฏธ๋ž˜์˜ super ๋ทฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ดˆ๊ธฐ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋Š” ๋ทฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  super ๋ทฐ์˜ ์ขŒํ‘œ๊ณ„์— ์žˆ๋Š” ์ (10, 10)์— ์™ผ์ชฝ ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. let rect = CGRect(x: 10, y: 10, width: 100, height: 100) let myView = UIView(frame: rect) ๋‹ค๋ฅธ ๋ทฐ์— ํ•˜์œ„ ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด super ๋ทฐ์—์„œ addSubView(_:) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์„ธ์š”. ๋ทฐ์— ํ•˜์œ„ ๋ทฐ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ iOS์—์„œ๋Š” ํ˜•์ œ ๋ทฐ๊ฐ€ ์„œ๋กœ ๊ฒน์ณ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. addS.. 2022. 3. 28.
[UIKit] UIView(1) View๋Š” ์•ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ์ด๋ฉฐ UIView ํด๋ž˜์Šค๋Š” ๋ชจ๋“  view์— ๊ณตํ†ต์ ์ธ ๋™์ž‘์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. view ๊ฐ์ฒด๋Š” ์‚ฌ๊ฐํ˜• ๋‚ด์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ  ํ•ด๋‹น ์ฝ˜ํ…์ธ ์™€์˜ ๋ชจ๋“  ์ƒํ˜ธ์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. UIView ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ  ๊ณ ์ •๋œ ๋ฐฐ๊ฒฝ์ƒ‰์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์ƒ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ๋” ์ •๊ตํ•œ ์ปจํ…์ธ ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ์„œ๋ธŒํด๋ž˜์Šคํ™”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์—์„œ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋Š” label, image, button ๋ฐ ๊ธฐํƒ€ ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด ์ง์ ‘ ์ •์˜ํ•˜๊ธฐ๋ณด๋‹ค๋Š” UIKit ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ทฐ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. view ๊ฐ์ฒด๋Š” ์•ฑ์ด ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์ฃผ๋œ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ธฐ์™€ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ทฐ๋Š” UI.. 2022. 3. 25.
๋ฐ˜์‘ํ˜•