Structures
- 관련된 코드들을 함께 패키징하도록 코드를 구성하는 방법
- 앱의 어느 곳에서나 재사용할 수 있도록 이름을 가짐
// DayForecast 구조체
struct DayForecast: View {
let day: String
let isRainy: Bool
let high: Int
let low: Int
var iconName: String {
if isRainy {
return "cloud.rain.fill"
} else {
return "sun.max.fill"
}
}
var iconColor: Color {
if isRainy {
return Color.blue
} else {
return Color.yellow
}
}
var body: some View {
VStack {
Text(day)
Image(systemName: iconName)
.foregroundStyle(iconColor)
.font(.largeTitle)
.padding()
Text("High: \(high)")
.fontWeight(.semibold)
Text("Low: \(low)")
.fontWeight(.medium)
.foregroundStyle(.secondary)
}
}
}
Structure와 Class의 비교
Structures and Classes
- 데이터를 저장하고, 이 데이터를 조작할 수 잇는 메서드를 가질 수 있는 타입
- 설계도 같은 역할
예) 자동차 → 바퀴, 엔진, 색상 등의 속성(properties) / 가속하고 멈추는 등의 동작(methods)
⇒ 해당 설계도를 사용해 여러 대의 실제 자동차를 만들 수 있음
Comparing Structures and Classes
in Commons
Differences
// class 예시
class Car {
var color: String
var speed: Int
init(color: String, speed: Int) {
self.color = color
self.speed = speed
}
func accelerate() {
speed += 10
}
func brake() {
speed -= 10
}
}
let myCar = Car(color: "Red", speed: 0)
myCar.accelerate()
print(myCar.speed) // 출력: 10
// struct 예시
struct Bicycle {
var color: String
var speed: Int
// mutating : struct나 enum 내부에서 method가 자신의 프로퍼티를 수정할 수 있도록 허용하는 property
mutating func accelerate() {
speed += 5
}
mutating func brake() {
speed -= 5
}
}
var myBike = Bicycle(color: "Blue", speed: 0)
myBike.accelerate()
print(myBike.speed) // 출력: 5
- 클래스는 참조 타입으로 상속이 가능하고, 메모리 관리를 위해 ARC 사용. 데이터 참조를 전달하여 공유 가능
- 구조체는 값 타입으로 상속이 불가능하고, ARC의 영향을 받지 않음. 데이터를 복사하여 독립적인 인스턴스 생성
⇒ 클래스는 인스턴스 간의 데이터 공유가 필요할 때, 구조체는 독립적인 데이터가 필요할 때 유용함
[Swift] 좋은 데이터 구조 (feat. chatGPT) (0) | 2024.07.06 |
---|---|
[Swift] ERD(Entity Relationship Diagram) (0) | 2024.07.06 |
[Dev_Pathway] Hello, SwiftUI (0) | 2024.07.03 |
[Swift] MVVM (0) | 2024.06.28 |
[Framework] WidgetKit (0) | 2024.06.16 |
댓글 영역