[Swift] Struct와 Class

Eden·2025년 5월 12일

[Swift]

목록 보기
6/7

오늘은 struct와 class를 쉽게 비교해보겠습니다.

1. 기본 개념: struct는 ‘복사’, class는 ‘공유’


🔹 Struct는 복사(Copy)

struct는 값을 복사해서 사용합니다.
복사하면 서로 완전히 다른 객체가 됩니다.

struct User {
    var name: String
}

var user1 = User(name: "이든")
var user2 = user1 // 복사됨
user2.name = "민지"

print(user1.name) // "이든"
print(user2.name) // "민지"

➡️ 서로 영향 주지 않음. 완전히 별개입니다.


🔸 Class는 공유(Reference)

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도 바뀝니다.


2. 차이점 요약

항목 Struct Class
저장 방식 스택 (Stack) 힙 (Heap)
전달 방식 값 복사 (Value Type) 참조 공유 (Reference Type)
상속 ❌ 불가능 ✅ 가능
ARC (자동 참조 카운팅) ❌ 적용 안 됨 ✅ 적용됨
사용 용도 간단한 데이터 모델
(예: 좌표, 색상 등)
상태 공유, 복잡한 로직
(예: 뷰 컨트롤러, 매니저 등)


3. 실생활 예시로 이해해보기

Struct는 종이 사본

계약서를 프린트해서 각자 사본을 가짐.
한쪽에 서명해도 다른 사람 사본은 안 바뀜.

Class는 공동 작업 문서

구글 문서처럼 같이 편집.
누가 내용을 바꾸면 다 같이 그 변화를 봄.


4. 언제 struct, 언제 class?

✅ struct를 쓰는 경우

• 데이터만 담고 있는 모델
• SwiftUI의 View
• 좌표, 크기, 색상 등 간단한 값

예:

struct Product {
    var name: String
    var price: Int
}

✅ class를 써야 할 때

• UIKit의 ViewController, View (상속 필요)
• 여러 곳에서 하나의 상태를 공유해야 할 때
• 복잡한 객체, 동작 중심 객체

예:

class UserManager {
    var isLoggedIn = false
}

📌 요약

• struct는 값을 복사해서 사용 → 간단한 데이터 모델에 적합
• class는 객체를 공유해서 사용 → 복잡한 상태 관리에 적합
• Swift에서는 struct가 기본입니다. (Apple도 그렇게 권장)

profile
iOS Dev

0개의 댓글