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

iOS/TIL

22.07.05 ใ…ฃ UIKit Framework

 

Storyboard  vs  SwiftUI

2019๋…„ SwiftUI๊ฐ€ ๋ฐœํ‘œ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” Storyboard ๊ฐ€ ์œ ์ผํ•œ ํ™”๋ฉด ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ๋•Œ๋ฌธ์—, SwiftUI ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์ ˆ๋Œ€์ ์œผ๋กœ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Storyboard ๋Š” ์•„์ดํฐ๊ณผ ์•„์ดํŒจ๋“œ์˜ ํ™”๋ฉด ๊ตฌ์„ฑ์—๋งŒ ์ ํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, SwiftUI ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๋Œ€์‘์ด ์•ฝํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋น„ํ•ด, SwiftUI ๋Š” ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐ•์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋‹ค๋งŒ, SwiftUI ๋Š” iOS 13 ์ด์ƒ์—์„œ๋งŒ ์ง€์›์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ด์ „๊นŒ์ง€๋Š” ์•„์ดํฐ๊ณผ ์•„์ดํŒจ๋“œ๋Š” UIKit ๊ทธ๋ฆฌ๊ณ  Mac ์€ appKit ์—์„œ ๊ฐœ๋ฐœ์„ ํ–ˆ๋‹ค๋ฉด, ํ˜„์žฌ๋Š” Mac Catalyst ์™€ apple Silicon Mac ๋“ฑ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์•„์ดํŒจ๋“œ ์•ฑ๊ณผ Mac ์•ฑ์˜ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋“ฑ ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์œผ๋กœ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

UIKit Framework ์— ๋Œ€ํ•œ ์ดํ•ด 

UIKit Framework๋Š” ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค ๋„๊ตฌ๋ฅผ ํ†ตํ•ด iOS ์•ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด UIKit ์—๋Š” ์–ด๋–ค ๊ฒƒ๋“ค ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

๋Œ€ํ‘œ์ ์œผ๋กœ UIKit ์—๋Š” UIView, UIViewController, UIFont, UIColor ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์ค‘ UIViewController ๋Š” ์•ฑ์„ ์‹คํ–‰ํ•  ๋•Œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋””๋ฐ”์ด์Šค ์Šคํฌ๋ฆฐ ์ „์ฒด๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์”ฌ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ชฉ์ ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰˜๋ฉฐ, ๋ณดํ†ต ํ•˜๋‚˜์˜ ํ™”๋ฉด์„ ํ•˜๋‚˜์˜ ViewController๊ฐ€ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  UIView์—์„œ๋Š” ViewController ์œ„์— View ๊ฐ์ฒด๊ฐ€ ์Œ“์ด๋Š” ํ˜•ํƒœ๋กœ ์”ฌ์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ทธ์ค‘ layer๋Š” UIView์˜ ์ƒ์†์„ ๋ฐ›๊ณ , layer์—๋Š” cornerRadius๋‚˜ borderColor ์™€ ๊ฐ™์€ ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ UIlabel ์ด๋‚˜ UIButton ๋˜ํ•œ UIView์˜ ํŠน์ง•์„ ์ƒ์†๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— XCode ๋‚ด ์ธ์ŠคํŽ™ํ„ฐ ์˜์—ญ์—์„œ ์•„๋ž˜์—์„œ๋ถ€ํ„ฐ ์œ„๋กœ ์ƒ์†๋ฐ›์€ ๊ด€๊ณ„์„ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

Scene ๊ณผ Logic ์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„ 

์ด์ œ ์•ฑ ๋‚ด์—์„œ ๋‹จ์ˆœํžˆ ํ™”๋ฉด์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด ์•ฑ์ด ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š”, ViewController๋ฅผ ์ƒ์†ํ•˜๋Š” ๋กœ์งํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CocoaTouchClass ๋กœ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ ํ›„ ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ์ƒ์†๋ฐ›์„ ์Šˆํผํด๋ž˜์Šค(Subclass of)๋ฅผ ์ง€์ •ํ•˜๋ฉด ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ํŒŒ์ผ์€ ๋ฐ˜๋“œ์‹œ Main.storyboard์—์„œ ์ถ”๊ฐ€ํ•œ ViewController์˜ ์ข…๋ฅ˜์™€ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์–ด์„œ Storyboard์˜ Scene๊ณผ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ์–ด๋–ค Scene๊ณผ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์—ฐ๊ฒฐํ•  ์ง€ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 

 

 

Custom Class ์—์„œ ํด๋ž˜์Šค ํŒŒ์ผ ์—ฐ๊ฒฐํ•˜๊ธฐ

 

์ด๋ ‡๊ฒŒ Class์— ์–ด๋–ค ํด๋ž˜์Šค ํŒŒ์ผ์„ ์—ฐ๊ฒฐํ• ์ง€ ์ ์€ ํ›„ Module ๊ณผ Inherit Module From Target ์ด ์ž˜ ์ฒดํฌ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ Scene ๊ณผ ํด๋ž˜์Šค ํŒŒ์ผ์ด ์ž˜ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

- @IBOutlet 

 

 

์—ฌ๊ธฐ์„œ ์•„์šธ๋ ›์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ์•ฑ ๋‚ด์— ํŠน์ • ๋ทฐ๊ฐ€ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„์šธ๋ ›์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์ ์ง€ ์•Š์œผ๋ฉด ๋‹น์—ฐํžˆ ์ปดํ“จํ„ฐ๋Š” ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ๋™์ž‘ํ•˜๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

 

- @IBAction

 

์ด ๊ฐœ๋…์€ ์‚ฌ์šฉ์ž์˜ ์ œ์Šค์ณ๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚œ ๊ฒฝ์šฐ์— ์‹คํ–‰๋  ๊ธฐ๋Šฅ์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Button์„ ํด๋ฆญํ•˜๋ฉด ๋žœ๋คํ•˜๊ฒŒ ์‚ฌ์ง„์ด ๋ฐ”๋€Œ๊ฒŒ ํ•˜๋Š” ๋“ฑ์˜ ๋™์ž‘์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.