SwiftUI

SwiftUI์™€ ํ•จ๊ป˜ ๋†€๋ž๋„๋ก ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ๊ฐ•๋ ฅํ•œ Swift๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋“  Apple ํ”Œ๋žซํผ์—์„œ ๋ฉ‹์ง„ ์•ฑ์„ ๋นŒ๋“œํ•ด ๋ณด์„ธ์š”. ์–ด๋–ค Apple ๊ธฐ๊ธฐ์—์„œ๋“  ๋‹จ ํ•˜๋‚˜์˜ ๋„๊ตฌ ๋˜๋Š” API ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•œ์ธต ๋” ๋ฉ‹์ง„ ๊ฒฝํ—˜์„ ์„ ์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

A MacBook Pro, iPad, and iPhone, each displaying the SwiftUI interface. A MacBook Pro, iPad, and iPhone, each displaying the SwiftUI interface.

SwiftUI ์•Œ์•„๋ณด๊ธฐ

์„ ์–ธ์  ๊ตฌ๋ฌธ

์ง€์‹œ์‚ฌํ•ญ์ด ์•„๋‹Œ ๊ฒฐ๊ณผ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ

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

import SwiftUI

struct AlbumDetail: View {
	var album: Album

	var body: some View {
		List(album.songs) { song in 
			HStack {
				Image(album.cover)
				VStack(alignment: .leading) {
					Text(song.title)
					Text(song.artist.name)
						.foregroundStyle(.secondary)
				}
			}
		}
	}
}

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

์‰ฌ์šด ํ†ตํ•ฉ

๋‚˜๋งŒ์˜ ์†๋„์— ๋งž์ถฐ SwiftUI ์ฑ„ํƒํ•˜๊ธฐ

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

Xcode ๋ฏธ๋ฆฌ๋ณด๊ธฐ

์ž‘์—… ์ค‘์— ๋น ๋ฅด๊ฒŒ ๋ฐ˜๋ณตํ•˜๊ณ  ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋กœ ํ™•์ธํ•˜๊ธฐ

Xcode ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์—์„œ ์•ฑ์˜ ๋ทฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์บ”๋ฒ„์Šค์—์„œ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SwiftUI ๋ทฐ์— ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๊ทธ๋Ÿฐ ๋‹ค์Œ Xcode์˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์บ”๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•ด ์›ํ•˜๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ‘œ์‹œ ๋ฐฉ๋ฒ•์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ๋˜๋Š” ๋Œ€ํ™”ํ˜• ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์˜ต์…˜์„ ์„ ํƒํ•˜๋ฉด ์‹ค์ œ ๊ธฐ๊ธฐ๋‚˜ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ์™€ ๋™์ผํ•œ ๋ทฐ๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ ๋ชจ๋“œ์—์„œ๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐ์— ๋ทฐ์˜ ์Šค๋ƒ…์ƒท์ด ํ‘œ์‹œ๋˜๋ฏ€๋กœ ์บ”๋ฒ„์Šค์—์„œ ๋ทฐ์˜ UI ์š”์†Œ์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ๋ณด๊ธฐ์—์„œ ์ œ์–ด ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜๋ฉด ์†Œ์Šค ํŽธ์ง‘๊ธฐ์—์„œ ํ•ด๋‹น ์ฝ”๋“œ ์ค„์ด ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ๋‹คํฌ ๋ชจ๋“œ๋‚˜ ๊ฐ€๋กœ ๋ชจ๋“œ, ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ ํ…์ŠคํŠธ ๋“ฑ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ‘œ์‹œ ๋ฐฉ์‹์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๊ธฐ ์„ค์ •์„ ์กฐ์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Xcode์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ธฐ

๋” ์‚ดํŽด๋ณด๊ธฐ

Swift ์–ธ์–ด, ์ถ”๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ, ์•ฑ ๊ฐœ๋ฐœ์— ๋„์›€์ด ๋˜๋Š” ๋„๊ตฌ์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.