โ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ์ด๋ ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ๊ธฐ
๐ Swift ์์ธ ๊ฐ์ด๋ โ
"์ ํ(Apple)์ด iOS/macOS ํ๋ซํผ์ ์ํด ์ง์ ์ค๊ณํ๊ณ ํค์ฐ๋ ์ ๋ คํ๊ณ ๊ฐ๋ ฅํ๋ฉฐ ์ง๊ด์ ์ธ ํ๋ฆฌ๋ฏธ์ ๋ช ํ ์ธ์ด"
๐ก 1. 30๋ ์ฐจ ์ ๋ฐฐ์ ์ฌ์ด ์ค๋ช โ
๊ณผ๊ฑฐ์ ์์ดํฐ ์ฑ์ ๋ง๋๋ ค๋ฉด ์ค๋ธ์ ํฐ๋ธ-C(Objective-C)๋ผ๋ ์ธ๊ณ์ด์ฒ๋ผ ๊ธฐ๊ดดํ๊ณ ์ด๋ ค์ด ์๋ ์ธ์ด๋ฅผ ์ฌ์ฉํด์ผ ํ์ต๋๋ค. ์ด๋ณด์ ์ ์ ์ฅ๋ฒฝ์ด ๋๋ฌด๋๋ ๋์์ง์, ์ ํ์ 2014๋ ์ ์ ๊ฒฉ์ ์ผ๋ก ์์ ํ ์๋กญ๊ณ ์๋ฆ๋ค์ด ๋ชจ๋ ์ธ์ด์ธ Swift(์ค์ํํธ) ๋ฅผ ๋ฐํํ์ต๋๋ค.
์ค์ํํธ๋ ํ์ด์ฌ์ฒ๋ผ ์ฝ๊ธฐ ์ฌ์ฐ๋ฉด์๋, ์ปดํ์ผ ์์ ์ ๊ฐ๋ ฅํ ์ ์ ํ์ ๊ฒ์ฌ๋ฅผ ์คํํ์ฌ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ํนํ ์ ํ์ ์ต์ UI ํ๋ ์์ํฌ์ธ SwiftUI์ ๊ฒฐํฉํ๋ฉด, ์ ์ธํ ์ฝ๋ฉ ๋ฐฉ์์ผ๋ก ๋ชจ๋ฐ์ผ ๋ ์ด์์๊ณผ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ ๊ณ ๋ธ๋ก์ ์กฐ๋ฆฝํ๋ฏ ๋น ๋ฅด๊ณ ์ ๋ คํ๊ฒ ์๊ฐํํ ์ ์์ด ๊ฐ๋ฐ์ ์ฌ๋ฏธ๋ฅผ ๋ํญ ์ฌ๋ ค์ค๋๋ค.
- ๋น์ ํ์๋ฉด: ์ธ๋ จ๋๊ณ ๋งค๋๋ฌ์ด ๊ณก์ ๋ฏธ๋ฅผ ๋ฝ๋ด๋ฉฐ, ํ๋ ์ฌ๋์๊ฒ ํธ์ํ๊ณ ์์ ํ ์ฃผํ๊ฐ์ ์ ์ฌํ๋ ์ต์ ํ ์ ๊ธฐ ์ธ๋จ ์์ด์ค๋์ด๋ ํ ์ฌ๋ผ์ ๊ฐ์ต๋๋ค.
๐ ๏ธ 2. ์ด๋์ ์ฃผ๋ก ์ฐ์ด๋์? โ
- iOS/iPadOS ์ฑ ๊ฐ๋ฐ: ์์ดํฐ, ์์ดํจ๋ ์ฑ ์คํ ์ด์ ์ฌ๋ผ๊ฐ๋ ๊ฑฐ์ ๋ชจ๋ ๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ฐ๋ฐ ์คํ์ ๋๋ค.
- Apple ์ํ๊ณ ํตํฉ: watchOS, macOS, visionOS(์ ํ ๋น์ ํ๋ก)๊น์ง ์ ํ ๊ณ์ด ํ๋์จ์ด์ ๋ชจ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํตํฉ ์ํํฉ๋๋ค.
โ๏ธ 3. ์ฅ์ ๊ณผ ๋จ์ (์ ๋ฐฐ์ ์์ง ํ๋ง๋) โ
- ์ฅ์ (์ ๋ คํจ๊ณผ ์ฌ๋ฏธ):
- ์๋์ ์ผ๋ก ์๋ฆ๋ค์ด UI ๊ตฌํ: SwiftUI๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ฉด ์ฝ๋ฉ์ ์ค์๊ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ(Live Preview)๋ก ๋ณด๋ฉด์ ๊ฐ๋ฐํ ์ ์์ด ๋์์ด๋์์ UI ํ์ ๋ฅ๋ฅ ์ด ๊ทน๋ํ๋ฉ๋๋ค.
- ์์ ์ฑ ์ค๊ณ: ์ต์
๋(
Optional) ๊ฐ๋ ๋ฑ์ ํ์ฉํด ๋ฐํ์ ์ค๋ฅ๊ฐ ๋ ์์๋ฅผ ์ฌ์ ์ ์๋ฒฝํ ๊ฒฉ๋ฆฌํฉ๋๋ค.
- ๋จ์ (๋
์ ์ ์ธ ํ๊ฒฝ ์ ์ฝ):
- macOS ๊ธฐ๊ธฐ ํ์: ์์ดํฐ ์ฑ ๋น๋ ๋๊ตฌ์ธ Xcode๊ฐ ๋งฅ๋ถ์ด๋ ์์ด๋งฅ์์๋ง ์คํ๋๊ธฐ ๋๋ฌธ์, ๋ฐ๋์ ์ ํ ์ปดํจํฐ ๊ธฐ๊ธฐ๊ฐ ์ค๋น๋์ด ์์ด์ผ ๊ฐ๋ฐ์ ์์ํ ์ ์์ต๋๋ค. (์ง์ ์๊ธ ํ์)
๐ 4. ์ด๋ณด์๋ฅผ ์ํ ์ฒซ๊ฑธ์ ์ฝ๋ โ
์ค์ํํธ์ ์ง๊ด์ ์ด๊ณ ์ฐ์ํ SwiftUI ๋ทฐ(View) ์ค๊ณ ๊ธฐ๋ณธํ์ ๋๋ค.
import SwiftUI
// 1. ํ๋ฉด์ ๊ตฌ์กฐ์ ์ฝํ
์ธ ๋ฅผ ์ ์ธ์ ์ผ๋ก ์ ์ด์ค๋๋ค.
struct ContentView: View {
// @State ์์ฑ์ด ๋ณ๊ฒฝ๋๋ฉด ํ๋ฉด์ด ์๋์ผ๋ก ๋ค์ ๊ทธ๋ ค์ง๋๋ค.
@State private var clicksCount = 0
var body: some View {
VStack(spacing: 20) {
Text("์ ํ ๊ฐ๋ฐ ์ฒซ๊ฑธ์")
.font(.largeTitle)
.fontWeight(.bold)
Button(action: {
self.clicksCount += 1
}) {
Text("ํด๋ฆญ ํ์: \(clicksCount)")
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(10)
}
}
}
}๐ฏ 5. ์ด๋ณด์ ์ถ์ฒ ๊ณต๋ถ ๋ฐฉํฅ โ
- ๋ฐ๋์ ๋งฅ๋ถ(Mac) ํ๊ฒฝ์ด ํ๋ณด๋์ด ์์ด์ผ ํฉ๋๋ค. ๋งฅ์ด ์ค๋น๋์๋ค๋ฉด ์ฑ์คํ ์ด์์ ๋ฌด๋ฃ ์ฑ ๊ฐ๋ฐ ๋๊ตฌ์ธ Xcode๋ฅผ ์ค์นํ์ธ์.
- ์ค์ํํธ ๊ณต์ ๊ธฐ์ด ๋ฌธ๋ฒ๊ณผ ํจ๊ป ์ต์
๋(Optional) ์ฒ๋ฆฌ ๊ธฐ๋ฒ์ธ
if let,guard let๊ตฌ๋ฌธ์ ๊ฐ์ฅ ๋จผ์ ๋จ๋จํ๊ฒ ์ต๋ํ์ญ์์ค. - ์ ํ์ ๊ต์ก์ฉ ์ฑ์ธ Swift Playgrounds๋ฅผ ํตํด ๊ฒ์์ ํ๋ฏ ์ฝ๋ฉ์ ํ๋ฆ์ ๊นจ์น๋ ๊ฒ๋ ์์ฃผ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.