Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- PushNotification
- 글또
- Refresh
- mvvm
- http
- ScrollView
- NotificationCenter
- array
- IOS
- Observer
- SWIFTUI
- list
- error
- 고차함수
- class
- singleton
- escaping
- Git
- 화면전환
- Switch
- SWIFT
- protocol
- Animation
- calendar
- self
- viewlifecycle
- struct
- segue
- apns
- uikit
Archives
- Today
- Total
seong_hye, the developer
Swift) Class vs Struct 본문
📘 Swift 문법 정리: Class vs Struct
class와 struct는 둘 다 앱을 만들 때 가장 처음 보게 되는 키워드라고 할 수 있다.
두 키워드의 공통점과 차이점에 대해 한 번 알아보자
🔹 기본 구조
class와 struct 모두 데이터를 정의하는 사용자 정의 타입
class Animal {
var species: String = ""
func sound() {
print("소리를 냅니다")
}
}
struct Person {
var name: String
func greet() {
print("안녕하세요 \(name)님")
}
}
🔹 공통점
프로퍼티(변수), 메서드(함수), 초기화(init), 확장(extension) 프로토콜 채택 등 가능
🔹 차이점
항목 | struct (구조체) | class (클래스) |
타입 | 값 타입 (Value Type) | 참조 타입 (Reference Type) |
메모리 복사 | 복사 -> 독립된 인스턴스 | 참조 -> 동일 인스턴스 공유 |
상속 | 불가능 | 가능 |
ARC 적용 여부 | 영향 없음 | ARC 적용 |
mutating 필요 여부 | 값 변경 시 mutating | 필요 없음 |
deinit 지원 | 없음 | 있음 (메모리 해제 감지) |
Equality(==) | 기본 제공(Equatable) | 직접 구현 필요 |
✅ 메모리 동작 예시
struct A {
var value = 1
}
class B {
var value = 1
}
var a1 = A()
var a2 = a1
a2.value = 2
print(a1.value) // 1 ( 값이 복사됨)
var b1 = B()
var b2 = b1
b2.value = 2
print(b1.value) // 2 (같은 인스턴스 참조됨)
➡️ struct는 값 타입이기 때문에 값을 복사해 따로 사용함
➡️ class는 참조 타입이기에 값을 공유함
✅struct는 왜 mutating을 사용하는가?
struct Counter {
var count = 0
mutating func increment() {
count += 1
}
}
📌 struct는 구조체로 값 타입이기 때문에 내부 값을 바꾸려면 명시적으로 mutating 선언 필요함
✅class의 상속과 deinit
class Animal {
func sound() {
print("...")
}
}
class Dog: Animal {
override func sound() {
print("멍멍")
}
deinit() {
print("메모리에서 해제됨")
}
}
📌 class는 상속을 지원하고
참조타입이기에 메모리 관리(ARC)가 적용되고 deinit을 통해 메모리 해제 될 때 자동으로 호출됨
~> 클로저 캡쳐 시 강한 참조 순환을 피하기 위해 유용
🔹 언제 struct를 쓰고 언제 class를 쓸까?
struct가 적합한 경우 | class가 적합한 경우 |
데이터 저장 용도 ( 값 중심 ) | 공통 기능 상속 필요 |
독립적인 복사 필요 (Immutable 설계) | 하나의 인스턴스를 공유해야 할 때 |
SwiftUI, 모델링에 자주 사용 | UIKit 뷰 컨트롤러 등 대부분 class 기반 |
참조 순환 우려 없음 | ARC로 메모리 관리 필요할 때 |
🔹 Swift의 기본 타입은 모두 struct
기본 타입들이 모두 구조체
- Int, Double, Bool
- String, Array, Dictionary, Set
~> Swift는 구조체를 우선적으로 사용하는 값 중심 프로그래밍을 권장함
'IOS' 카테고리의 다른 글
Swift) DispatchSourceTimer이란? (0) | 2022.08.02 |
---|---|
Swift) NotificationCenter이란? (0) | 2022.07.26 |
Swift) 문법 정리 - 싱글톤(Singleton) 패턴 (0) | 2022.07.26 |
Swift) 문법 정리 - self vs Self (0) | 2022.07.19 |
Swift) 문법 정리 - @escaping (0) | 2022.07.19 |
Comments