오늘은 struct와 class를 쉽게 비교해보겠습니다.
struct는 값을 복사해서 사용합니다.
복사하면 서로 완전히 다른 객체가 됩니다.
struct User {
var name: String
}
var user1 = User(name: "이든")
var user2 = user1 // 복사됨
user2.name = "민지"
print(user1.name) // "이든"
print(user2.name) // "민지"
➡️ 서로 영향 주지 않음. 완전히 별개입니다.
class는 참조 방식으로 작동합니다.
변수를 복사해도 같은 객체를 가리킵니다.
class User {
var name: String
init(name: String) {
self.name = name
}
}
var user1 = User(name: "이든")
var user2 = user1 // 같은 객체
user2.name = "민지"
print(user1.name) // "민지"
➡️ user2를 바꾸면 user1도 바뀝니다.
| 항목 | Struct | Class |
|---|---|---|
| 저장 방식 | 스택 (Stack) | 힙 (Heap) |
| 전달 방식 | 값 복사 (Value Type) | 참조 공유 (Reference Type) |
| 상속 | ❌ 불가능 | ✅ 가능 |
| ARC (자동 참조 카운팅) | ❌ 적용 안 됨 | ✅ 적용됨 |
| 사용 용도 | 간단한 데이터 모델 (예: 좌표, 색상 등) |
상태 공유, 복잡한 로직 (예: 뷰 컨트롤러, 매니저 등) |
계약서를 프린트해서 각자 사본을 가짐.
한쪽에 서명해도 다른 사람 사본은 안 바뀜.
구글 문서처럼 같이 편집.
누가 내용을 바꾸면 다 같이 그 변화를 봄.
• 데이터만 담고 있는 모델
• SwiftUI의 View
• 좌표, 크기, 색상 등 간단한 값
예:
struct Product {
var name: String
var price: Int
}
• UIKit의 ViewController, View (상속 필요)
• 여러 곳에서 하나의 상태를 공유해야 할 때
• 복잡한 객체, 동작 중심 객체
예:
class UserManager {
var isLoggedIn = false
}
• struct는 값을 복사해서 사용 → 간단한 데이터 모델에 적합
• class는 객체를 공유해서 사용 → 복잡한 상태 관리에 적합
• Swift에서는 struct가 기본입니다. (Apple도 그렇게 권장)