SwiftUI? Storyboard?

๋ฐ•์ค€์„ฑยท2021๋…„ 10์›” 17์ผ
1

Swift

๋ชฉ๋ก ๋ณด๊ธฐ
1/2
post-thumbnail

๐Ÿ˜SwiftUI ์™€ Storyboard์˜ Interface ์ฐจ์ด๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž.

SwiftUI๋Š” ๋ชจ๋“  ์• ํ”Œ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ฒŒ ํ•ด์ฃผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค.
์‰ฝ๊ฒŒ ๋งํ•ด์„œ , ํ•˜๋‚˜์˜ ๋„๊ตฌ ๋ฐ API๋กœ ๋ชจ๋“  ์• ํ”Œ ๊ธฐ๊ธฐ ์‚ฌ์šฉ์ž์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
์ฃผ๋กœ Declarative๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํŠน์ง•

SwiftUI๋Š” IOS 13 ์˜ ์ถœ์‹œ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋œ UI ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์„ ์–ธ์  ๊ตฌ๋ฌธ๊ณผ ํ†ตํ•ฉํ”Œ๋žซํผ์„ ์ง€ํ–ฅํ•œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์žฅ์ 

๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ  ์ฝ”๋“œ๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ๊น”๋”ํ•ฉ๋‹ˆ๋‹ค.
UIHostingController๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UIKit๊ณผ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ…Œ๋งˆ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ๊ด€๋ฆฌ ์žˆ์Šต๋‹ˆ๋‹ค. (๊ฐœ๋ฐœ์ž๋Š” ์•ฑ์— ๋‹คํฌ ๋ชจ๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)
SwiftUI๋Š” BindableObject, ObjectBinding ๋ฐ ์ „์ฒด Combine ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜์‘ ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
SwiftUI๋Š” ๋” ์ด์ƒ Interface Builder๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€ํ™” ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ํŽธ์ง‘๊ธฐ ์ธ Canvas๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ Canvas์˜ ์‹œ๊ฐ์  ๋ถ€๋ถ„์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  ์‹œ๊ฐ์  ํ‘œํ˜„ ์š”์†Œ๋ฅผ ๋งŒ๋“ค ๋•Œ ์ฝ”๋“œ์— ์ž๋™์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
@IBOutlet ์—ฐ๊ฒฐ์„ ๋ณ€์ˆ˜๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์€ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋” ์ด์ƒ ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
AutoLayout ๋˜๋Š” ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  HStack, VStack, ZStack, ๊ทธ๋ฃน, ๋ชฉ๋ก ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. AutoLayout๊ณผ ๋‹ฌ๋ฆฌ SwiftUI๋Š” ํ•ญ์ƒ ์œ ํšจํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ชจํ˜ธํ•˜๊ฑฐ๋‚˜ ๋งŒ์กฑ์Šค๋Ÿฝ์ง€ ์•Š์€ ๋ ˆ์ด์•„์›ƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. SwiftUI๋Š” ์Šคํ† ๋ฆฌ ๋ณด๋“œ๋ฅผ ์ฝ”๋“œ๋กœ ๋Œ€์ฒดํ•˜์—ฌ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ทฐ๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ณ  ๊ฐœ๋ฐœ ํŒ€์ด ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ 

iOS 13 ๋ฐ Xcode 11 ์ดํ›„๋งŒ ์ง€์›ํ•˜์—ฌ ์ด์ „ ๋ฒ„์ „์˜ iOS ์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ด€๋ จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Xcode ๋ฏธ๋ฆฌ๋ณด๊ธฐ์—์„œ ๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฒ€์‚ฌ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ™€UIKit์™€์˜ ์ฐจ์ด์ 

UIKit ์€ ๋ช…๋ นํ˜• ํ”„๋ ˆ์ž„์›Œํฌ ์ด์ง€๋งŒ SwiftUI ๋Š” ์„ ์–ธ์  ํ”„๋ ˆ์ž„์›Œํฌ ์ž…๋‹ˆ๋‹ค.
UIKit ์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•ด์•ผ ํ•˜์ง€๋งŒ, SwiftUI์—์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ์™€ ์ž๋™์œผ๋กœ ๊ฒฐํ•ฉ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์˜ ์š”์†Œ๋ฅผ ์ถ”์ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
UIKit ์˜ ๋ทฐ๋Š” UIView ๋ผ๋Š” ํด๋ž˜์Šค์˜ ์ž์‹์ด์ง€๋งŒ, SwiftUI ๋Š” ๋ทฐ๊ฐ€ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๊ตฌ์กฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์†๋œ ์ถ”๊ฐ€๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿค”๋ฌด์—‡์„ ์“ฐ๋Š”๊ฒŒ ์ข‹์„๊นŒ?

๊ธฐ์กด์˜ iOS ํ˜น์€ ์• ํ”Œ ํ”Œ๋žซํผ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์Šคํ† ๋ฆฌ๋ณด๋“œ ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ์ˆ™์ง€ํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์Šคํ† ๋ฆฌ๋ณด๋“œ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ปค์ง€๊ณ , ํ˜‘์—… ๋ฐ ์œ ์ง€ ๋ณด์ˆ˜ํ•˜๊ธฐ์—๋„ ๋งค์šฐ ๊นŒ๋‹ค๋กœ์›Œ์„œ iOS ํ˜น์€ ์• ํ”Œ ํ”Œ๋žซํผ ๊ฐœ๋ฐœ์ž๋“ค ์ค‘์—๋Š” ์ด๋Ÿฌํ•œ ์Šคํ† ๋ฆฌ๋ณด๋“œ ๋ฐฉ์‹์„ ์•ˆ ์ข‹์•„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค

์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ ์ด๋Ÿฌํ•œ ์ปค๋‹ค๋ž€ ๋‹จ์ ์„ ์Šค์œ„ํ”„ํŠธUI๋Š” ๋Œ€๋ถ€๋ถ„ ํ•ด๊ฒฐํ•ด์ค๋‹ˆ๋‹ค. SwiftUI์—์„œ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋™์‹œ์— ๋””์ž์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๋””์ž์ธ ์š”์†Œ๋“ค์ด ์ฝ”๋“œ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋” ์ด์ƒ ์ฝ๊ธฐ ์–ด๋ ค์šด ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ XML ๋ฐฉ์‹๊ณผ ์‹ธ์šฐ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค

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

0๊ฐœ์˜ ๋Œ“๊ธ€